S32K/S32M + RTD 사용 


본 페이지는 사용자가 S32 Configuration Tools 및 RTD(Real-Time Drivers)를 사용함을 전제하고 있습니다.

STEP 1 : 하드웨어 설정

먼저 사용자 보드 환경에 맞춰 easyDSP, MCU간 통신에 사용될 UART 채널 및 핀을 설정합니다.
채널 및 핀 사용에 제한 사항은 없습니다. 단, S32M의 경우 LPUART1은 사용할 수 없습니다.
만약 easyDSP가 플래시 프로그래밍을 수행하지 않을 경우라면, /BOOT 와 /RESET은 연결할 필요가 없습니다.



기타 주의 사항 :
- /RESET 핀은 MCU에 리셋을 줄 수 있도록 적절히 연결  (/RESET핀의 Low상태 유지 기간은 약 500msec)
- easyDSP /RESET신호와 MCU /RESET 신호사이에 리셋 IC같은 회로가 삽입된다면, 삽입된 회로는 0.5초내에 신호를 전달해야 함.
- easyDSP 헤더 RX, TX 신호는 easyDSP 포드 내부에서 100k 오옴으로 풀업되어 있습니다.


STEP 2 : easyDSP 모니터링을 위한 S32 Configuration Tools 설정

먼저 사용자 보드 환경에 맞춰 easyDSP에서 사용할 UART 채널 및 핀을 설정합니다. 앞서 하드웨어 설정과 일치되어야 합니다.
TX, RX 핀의 Identifier에 각각 EZ_TX, EZ_RX를 입력합니다.
아래 그림에서는 LPUART0을 사용하며 RX는 PTA2, TX는 PTA3를 사용할 경우입니다.
각 핀의 성질을 Rounting Details 탭과 같이 설정합니다. 특히 풀업을 설정하는 것에 주의하세요.


그리고 Drivers에 Lpuart_Uart, IntCtrl_Ip 모듈을 추가합니다. 이미 해당 모듈이 있다면 추가없이 사용하시면 됩니다.

Lpuart_Uart 모듈에 대해서 설정합니다.
GeneralConfiguration 탭에서 Uart Callback Capability를 활성화하고, 그 이름을 ez_RxCallBack으로 설정합니다.
UartGlobalConfig 탭에서 이름을 하기와 같이 지정하시고, UART 사용 채널을 선정합니다. 여기서는 앞서 스텝 1, 2와 같이 LPUART0을 사용합니다.
또한 각종 설정치를 그림과 같이 설정합니다. Baudrate 설정치는 easyDSP 프로젝트에서 사용될 보드레이트와 동일하게 설정합니다.

  

 

IntCtrl_Ip 모듈에 대해서 설정합니다.
Interrupt Controller 탭에서 easyDSP 통신에 사용할 LPUART 채널의 인터럽트를 활성화시키고 그 순위를 최하위 (가장 큰 값)로 설정합니다.
Generic Interrupt Setting 탭에서 해당 LPUART 채널 인터럽트의 인터럽트 핸들러를 EZ_LPUART_UART_IP_IRQHandler로 설정합니다.
MCU 종류에 따라 두 탭의 역할이 하나의 탭으로 합쳐져 있는 경우도 있습니다.
아래 그림에서는 앞서 예제와 같이 LPUART0을 사용합니다.


또한 해당 UART 채널에 적절한 클럭이 공급될 수 있도록 설정하여 주세요. 아래 예제 참조하세요. 
 

STEP 3-1 : S32K1x에서 easyDSP 부트로더를 위한 S32 Configuration Tools 설정

만약 S32K1x에서 easyDSP 부트로더를 사용하여 플래시 프로그래밍을 수행할 경우, 하기 작업이 추가로 필요하게 됩니다.
easyDSP 부트로더가 사용할 Ftfc_Ip 모듈 및 Gpio_Dio 모듈을 추가합니다.
 

Gpio_Dio 모듈은 별도의 설정이 필요 없습니다.
Ftfc_Ip 모듈의 FlsGeneral 탭에서 Fls Timeout Supervision Enabled 버튼을 비활성화합니다.

 

      

STEP 3-2 : S32K3x에서 easyDSP 부트로더를 위한 S32 Configuration Tools 설정

만약 S32K3x에서 easyDSP 부트로더를 사용하여 플래시 프로그래밍을 수행할 경우, 하기 작업이 추가로 필요하게 됩니다.
easyDSP 부트로더가 사용할 C40_Ip 모듈 및 Siu2_Dio 모듈을 추가합니다.

Siu2_Dio 모듈은 별도의 설정이 필요 없습니다.
C40_Ip 모듈의 FlsGeneral 탭에서 Fls Timeout Supervision Enabled 버튼을 비활성화합니다.
 


STEP 3-3 : S32M24x에서 easyDSP 부트로더를 위한 S32 Configuration Tools 설정

만약 S32M24x에서 easyDSP 부트로더를 사용하여 플래시 프로그래밍을 수행할 경우, 하기 작업이 추가로 필요하게 됩니다.
easyDSP 부트로더가 사용할 Ftfc_Mem_InFls_Ip 모듈 및 Gpio_Dio 모듈을 추가합니다.
 

Gpio_Dio 모듈은 별도의 설정이 필요 없습니다.
Ftfc_Mem_InFls_Ip 모듈도 별도 설정없이 기본 설정 사용합니다. MemGeneral 탭에서 Mem Timeout Supervision Enabled 버튼 및 MemAutosarExt탭의 Mem Synchronize Cache 버튼은 비활성화되어야 함을 주의하세요.

STEP 3-4 : S32M27x에서 easyDSP 부트로더를 위한 S32 Configuration Tools 설정

만약 S32M27x에서 easyDSP 부트로더를 사용하여 플래시 프로그래밍을 수행할 경우, 하기 작업이 추가로 필요하게 됩니다.
easyDSP 부트로더가 사용할 C40_Ip 모듈 및 Siu2_Dio 모듈을 추가합니다.

Siu2_Dio 모듈은 별도의 설정이 필요 없습니다.
C40_Ip  모듈도 별도 설정없이 기본 설정 사용합니다. MemGeneral 탭에서 Mem Timeout Supervision Enabled 버튼 및 MemAutosarExt탭의 Mem Synchronize Cache 버튼은 비활성화되어야 함을 주의하세요.

STEP 4-1 : S32K1x에서 easyDSP 부트로더를 위한 소스 코드 수정

S32K1x에서 easyDSP 부트로더를 사용하여 플래시 프로그래밍을 수행할 경우, 앞서 STEP 3-1에서 진행된 Configuration tool 설정 및 이로 인한 소스 코드 생성 이후, RTD > include 폴더내에 Ftfc_Fls_Ip.h 파일이, RTD > src 폴더내 Ftfc_Fls_Ip.c 파일이 각각 생성됩니다.

본 파일내 함수를 easyDSP 부트로더가 사용하는데, 이 함수가 램에서 동작하도록 설정해줘야 합니다.
Ftfc_Fls_Ip.h 파일내 중간 부분, 함수 선언이 시작되는 곳에 #define FLS_START_SEC_CODE 부분을 찾아 주석 처리한 후, 대신 #define FLS_START_SEC_RAMCODE 라인을 추가합니다.
그리고 파일 마지막 부분, 함수 선언이 끝나는 곳에서 #define FLS_STOP_SEC_CODE 부분을 찾아 주석 처리한 후, 대신 #define FLS_STOP_SEC_RAMCODE 라인을 추가합니다.

 

마찬가지로 Ftfc_Fls_Ip.c 파일내 중간 부분에서 각종 static 함수를 선언한 부분을 찾아 동일하게 처리합니다.

 

또한 Ftfc_Fls_Ip.c 파일내 Ftfc_Fls_Ip_SectorErase 함수가 정의된 부분을 찾아, Ftfc_Fls_Ip_SectorErasePreCheck 함수를 호출하는 부분을 주석처리합니다.

Configuration Tool이 자동 생성한 소스를 수정한 것이므로, Configuration tools이 이를 감지하여, 소스파일을 다시 원래로 되돌릴 지 문의할 경우 이를 허용하지 마십시요.


STEP 4-2 : S32K3x에서 easyDSP 부트로더를 위한 소스 코드 수정

S32K3x에서 easyDSP 부트로더를 사용하여 플래시 프로그래밍을 수행할 경우, 앞서 STEP 3-2에서 진행된 Configuration tool 설정 및 이로 인한 소스 코드 생성 이후, RTD > include 폴더내에 C40_Ip.h 파일이, RTD > src 폴더내 C40_Ip.c 파일이 각각 생성됩니다.

본 파일내 함수를 easyDSP 부트로더가 사용하는데, 이 함수가 램에서 동작하도록 설정해줘야 합니다.
C40_Ip.h 파일내 중간 부분에서 #define FLS_START_SEC_CODE 부분을 찾아 주석 처리한 후, 대신 #define FLS_START_SEC_RAMCODE 라인을 추가합니다.
그리고 파일 마지막 부분에서 #define FLS_STOP_SEC_CODE 부분을 찾아 주석 처리한 후, 대신 #define FLS_STOP_SEC_RAMCODE 라인을 추가합니다.

마찬가지로 C40_Ip.c 파일내 중간 부분에서 각종 static 함수를 선언한 부분을 찾아 동일하게 처리합니다.



Configuration Tool이 자동 생성한 소스를 수정한 것이므로, Configuration tools이 이를 감지하여, 소스파일을 다시 원래로 되돌릴 지 문의할 경우 이를 허용하지 마십시요.
 

STEP 4-3 : S32M24x에서 easyDSP 부트로더를 위한 소스 코드 수정

S32M24x에서 easyDSP 부트로더를 사용하여 플래시 프로그래밍을 수행할 경우, 앞서 STEP 3-3에서 진행된 Configuration tool 설정 및 이로 인한 소스 코드 생성 이후, RTD > include 폴더내에 Ftfc_Mem_InFls_Ip.h 파일이, RTD > src 폴더내 Ftfc_Mem_InFls_Ip.c 파일이 각각 생성됩니다.

본 파일내 함수를 easyDSP 부트로더가 사용하는데, 이 함수가 램에서 동작하도록 설정해줘야 합니다.
Ftfc_Mem_InFls_Ip.h 파일내 중간 부분, 함수 선언이 시작되는 곳에 #define MEM_43_INFLS_START_SEC_CODE부분을 찾아 주석 처리한 후, 대신 #define MEM_43_INFLS_START_SEC_ RAMCODE 라인을 추가합니다.
그리고 파일 마지막 부분, 함수 선언이 끝나는 곳에서 #define MEM_43_INFLS_STOP_SEC_CODE부분을 찾아 주석 처리한 후, 대신 #define MEM_43_INFLS_STOP_SEC_RAMCODE라인을 추가합니다.



마찬가지로 Ftfc_Mem_InFls_Ip.c 파일내 중간 부분에서 각종 static 함수를 선언한 부분을 찾아 앞과 동일하게 처리합니다.


 

STEP 4-4 : S32M27x에서 easyDSP 부트로더를 위한 소스 코드 수정

S32M27x에서 easyDSP 부트로더를 사용하여 플래시 프로그래밍을 수행할 경우, 앞서 STEP 3-4에서 진행된 Configuration tool 설정 및 이로 인한 소스 코드 생성 이후, RTD > include 폴더내에 C40_Ip.h 파일이, RTD > src 폴더내 C40_Ip.c 파일이 각각 생성됩니다.

본 파일내 함수를 easyDSP 부트로더가 사용하는데, 이 함수가 램에서 동작하도록 설정해줘야 합니다.
C40_Ip.h 파일내 중간 부분, 함수 선언이 시작되는 곳에 #define MEM_43_INFLS_START_SEC_CODE부분을 찾아 주석 처리한 후, 대신 #define MEM_43_INFLS_START_SEC_ RAMCODE 라인을 추가합니다.
그리고 파일 마지막 부분, 함수 선언이 끝나는 곳에서 #define MEM_43_INFLS_STOP_SEC_CODE부분을 찾아 주석 처리한 후, 대신 #define MEM_43_INFLS_STOP_SEC_RAMCODE라인을 추가합니다.



마찬가지로 C40_Ip. c 파일내 중간 부분에서 각종 static 함수를 선언한 부분을 찾아 앞과 동일하게 처리합니다.

 


STEP 5 : easyDSP 제공 소스 파일 및 함수 호출

easyDSP 통신 및 플래시프로그래밍을 위해 제공되는 소스파일 (easyS32_RTD.h, easyS32_RTD_comm.c, easyS32_RTD_boot.c)을 프로젝트에 포함하시기 바랍니다.
해당 파일은 easyDSP 프로그램이 인스톨된 폴더 아래 \source\S32에서 찾을 수 있습니다.

이중 easyS32_RTD.h 파일 일부 내용을 수정해야 합니다.
우선 easyDSP 통신을 위해 선정된 LPUART 채널을 지정합니다. 아래 예제에서는 LPUART0으로 선정하였습니다.
만약 easyDSP를 사용하여 플래시 프로그래밍을 수행할 경우, EZ_BOOTLOADER_USE를 1로 설정하시기 바랍니다.

 


main.c 상단에 easyS32_RTD.h를 include하여 주시고, main 함수에서 초기화 루틴 이후 easyDSP_init() 함수를 호출하시기 바랍니다. easyDSP_init() 함수에서는 easyDSP 통신을 위한 각종 설정을 수행합니다.
클럭, 핀, 인터럽트 설정은 easyDSP 통신을 위해 필요하므로 main 함수 앞부분에서 수행되어야 합니다.
만약 easyDSP가 플래시 프로그래밍을 지원하길 원하시면 클럭 및 핀이 설정된 바로 직후 easyDSP_boot()를 호출하시기 바랍니다.
 

STEP 6 : IDE 설정

1. 매 컴파일마다 hex 파일 (인텔 형식) 이 생성되어 출력 파일과 동일한 폴더에 동일한 이름으로 위치하도록 IDE를 설정해주세요. Hex 파일은 플래시 프로그래밍할 때 사용됩니다. 
    Hex 파일 확장자는 hex 또는 ihex가 될 수 있습니다. easyDSP는 확장자 hex 파일의 존재를 먼저 확인하여 사용하고, 존재하지 않을 경우 확장자 ihex 파일을 사용합니다. 
    S32DS 기준 하기 옵션 설정 참조하세요.
   



2. easyDSP로 모니터링을 수행하기 위해서는, 출력 파일 (예:*.elf)에 debug information이 반드시 포함되어야 합니다.이를 위해 어셈블리/ 컴파일러/링커 옵션을 적절히 선택하시기 바랍니다.
3. 최적화 또는 링커 세팅에 따라, 선언되었지만 실제 사용되지 않는 변수는 debug information에 포함되지 않아 easyDSP에서 모니터링되지 않을 수 있습니다. 
이 경우에도 해당 변수를 모니터링하려면 적절한 IDE 세팅이 필요합니다. 예를 들어, S32DS의 프로젝트 설정 > 링커 옵션 하기 항목을 체크하지 않습니다.
 

STEP 7 : easyDSP 부트로더의 제한 사항

1. S32K MCU는 제작업체에서 제공하는 롬부트로더가 없기에 사용자가 부트로더를 별도로 제작 사용해야 합니다. easyDSP는 사용자 프로그램 안에 easyDSP가 제공하는 부트로더 (함수 easyDSP_boot)가 존재하는 구성입니다. 따라서 MCU 플래시에 easyDSP 소스파일이 이미 프로그래밍되어 있어야 새로운 프로그램으로 재 프로그래밍이 가능합니다. 만약 플래시가 전부 지워져 있거나, easyDSP 소스파일이 플래시에 프로그래밍이 되어 있지 않다면, 플래시 프로그래밍이 지원되지 않으며 하기와 같은 메시지가 송출되며, 이 경우 디버거를 사용한 플래시 프로그래밍이 필요합니다. 따라서 처음 한번은 디버거를 이용해서 플래시 프로그래밍을 해야만 합니다.
 
2. easyDSP 부트로더는 램에서 동작해야 하기에 일정 램 영역을 소비합니다.
S32K1의 경우 약 2.4K바이트, S32K3의 경우 약 4.8kB입니다 (-O1 최적화 옵션 기준).