본문 바로가기

임베디드 개발/TMS320F2838x (C28x)74

TMS320F28388D ] 라이브러리 램에 복사해 실행 Flash API 라이브러리를 램에 올려서 실행할 필요가 있다. 단순히 time critical 코드를 고속으로 사용하려는 것 뿐만은 아니고 예를 들어 부트로더를 만들 때 필요하다. Application이 코드영역에서 한창 동작하고 있는데 이 코드영역을 중간에 erase하려고 하면 프로그램이 halt될 것이 아닌가. 하지만 전부 Ram에서 동작하는 함수를 사용하면 코드영역을 침범해 조작해도 halt 되지 않는다. 근데 Flash API를 호출해서 사용하는 copyData()라는 사용자정의 함수가 있다고 하면 이걸 Ram에 올린다고 다 되는 게 아니라, 그 안에 있는 모든 함수들이 램에서 동작해야하고 사용하는 버퍼도 램에 올라간 데이터여야 한다. 아래와 같은 과정을 거치지 않고 Flahs API를 사용한다.. 2023. 4. 22.
TMS320F28388D ] Flash API 사용 일단 아래 경로에 있는 FlashAPI 라이브러리를 복사해 프로젝트 안에 가져온다. C:\ti\c2000\C2000Ware_[Version No]\libraries\flash_api\f2838x\cm\lib 그리고 아래 경로의 FlashAPI를 사용하기 위한 헤더가 모여있는 폴더도 복사해서 프로젝트에 가져온다. C:\ti\c2000\C2000Ware_[Version No]\libraries\flash_api\f2838x\cm\include\FlashAPI 그리고 Include search path에 추가해준다. 복사해서 가져오지 않아도 c2000ware 폴더 내 경로를 추가하면 되긴하지만 선호하지 않는방법이다. 이제 아래 헤더를 include하면 FlashAPI를 가져다 쓸 수 있다. #include ".. 2023. 4. 20.
TMS320F28388D ] TI 제공 부트로더 사용해서 CPU2, CM application 다운로드하기 사용방법은 README.txt 파일에서 찾을 수 있다. When the application starts, the serial connection is with the SCI module which is owned by CPU1. Only commands designated for CPU1 are acceptable at this point before booting CPU2.  If a CPU2 command is selected, the application asks the user for a different option.  After booting to CPU2, either with "Run CPU1 Boot CPU2" or "Reset CPU1 Boot CPU2," CPU.. 2023. 4. 19.
TMS320F28388D ] TI 제공 부트로더 & Flash programmer 툴 사용하기 관련 문서   TI가 ROM에 마스킹 해둔 부트로더 중 SCI boot와 Flash programmer를 사용해 어플리케이션을 program 해보자.   전체 Flow 요약해보면 Boot Mode를 SCI Boot로 바꾸고 SCI ROM bootloader를 사용해 flash kernel 코드를 통째로 램에 복사해 올힌다. 그리고 RAM에 올린 flash kernel을 실행하여 User Application을 Flash에 Program한다.     먼저 내장 SCI bootloader를 사용하기 위해 bootmode를 SCI/Wait Boot로 변경해야 한다.   만약 컨트롤 카드를 쓰고 있다면 S2 스위치로 bootmode를 변경하면 되고, 아닌 경우 해당 b.. 2023. 4. 18.
TMS320F28388D ] Ethernet_resetModule() 무한루프 문제 PHY에 공급되는 클락이 잘못되있거나 GPIO 설정이 잘못되어 있으면 CM 쪽에서 Ethernet 초기화시 Ethernet_resetModule() 함수 안에서 hang되는 문제가 있다. 해당 현상 발생시 CPU1쪽 ethernet Pin mux 설정 코드를 살펴보고 주변회로가 컨트롤카드와 동일하게 구성되어있는지 체크하는게 좋다. 참고 : https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1164646/tmdscncd28388d-stop-with-ethernet_resetmodule-in-lwip TMDSCNCD28388D: Stop with Ethernet_.. 2023. 3. 31.
TMS320F28388D ] CM코어에 lwIP 포팅 포팅은 아래 경로의 예제를 참고해 진행한다. C:\ti\c2000\C2000Ware_x_xx_xx_xx\libraries\communications\Ethernet\third_party\lwip\examples\enet_lwip_udp lwip 라이브러리는 아래 경로에 있다. 이 경로를 그대로 쓰진 않고 폴더를 통째로 복사해서 프로젝트안에 가져온다. C:\ti\c2000\C2000Ware_x_xx_xx_xx\libraries\communications\Ethernet\third_party\lwip 가져온 후 #include search path에 워닝이 안뜰 때까지 다음과 같이 추가해준다. 예제 프로젝트 참고해 스택사이즈도 늘려주고. 추가로 필요한 파일이 f2838xif.c, lwiplib.c, lwip.. 2023. 3. 31.
TMS320F28388D ] phy 레지스터 읽어 link status 감지하기 lwiplib.c 파일에서 bmsr을검색하면 link status를 감지하는 방법을 알 수있다. 먼저 이더넷 initialization 를 하면 Ethernet_getHandle() 함수 안에서 phy 설정을 하고 있긴한데, 그렇게 그냥 써도 이더넷통신은 되지만 phy 칩을 직접 다루려면 바깥에서 올바른 설정값으로 다시 설정해줄 필요가 있다. #define EPHY_BMSR 0x00000001 // Ethernet PHY Basic Mode Status#define EPHY_BMSR_LINKSTAT 0x00000004 // Link Status//MDIO ConfigurationsEthernet_configureMDIO(Ethernet_device_struct.bas.. 2023. 3. 12.
변수를 특정 메모리 영역(섹션 또는 주소)에 배치하기 [공개] 특정 영역에 배치하기 MEMORY { // ... CPU1TOCPU2RAM : origin = 0x03A000, length = 0x000800 CPU2TOCPU1RAM : origin = 0x03B000, length = 0x000800 // ... } SECTIONS { // ... MSGRAM_CPU1_TO_CPU2 : > CPU1TOCPU2RAM, type=NOINIT MSGRAM_CPU2_TO_CPU1 : > CPU2TOCPU1RAM, type=NOINIT // ... } #pragma DATA_SECTION(readData, "MSGRAM_CPU1_TO_CPU2") typedef struct { uint32_t u16; float f; } test_t; test_t readData; 특정 주소.. 2023. 2. 28.
Interrupt Nesting & SW Priorization [공개] 관련문서 https://software-dl.ti.com/C2000/docs/c28x_interrupt_nesting/html/index.html C28x Interrupt Nesting In most cases a system will only require one or two interrupts to be nested. This is easily handled by the example shown previously. There is, however, an example provided by which covers possibilities for every single interrupt in the group. This example software-dl.ti.com PIE 그룹과 채널 디폴트 우선순.. 2023. 2. 25.
CANFD (MCAN) [공개] 메시지램 통해 CPU1에서 사용가능 CPU2에선 불가. MCAN이 사용하는 메시지램은 CPU1_TO_CM, CM_TO_CPU1 MSGRAM 과는 별개 송신 수신 FIFO사용해 수신시 Loss 없음 2023. 2. 25.