이번에 Renesas 에서 나온 H8SC1527R MCU 를 FDT 없이 programming 하는 방법을 찾으면서 정리된 것을 공유하고자 합니다. 그리 감출것도 없는 기술인데 (명시된 것도 아니고) 통신 방법 등을 감추고 공개하지 않는 Renesas 측의 행보가 참 일본기업 답다는 느낌이 드네요. (그래서 정말 짜증 납니다...)
먼저 FDT 가 Programming 을 진행하는 방법을 보면 다음과 같습니다.
*조건*
MD1 은 short, MD0 은 open 되어 있는 상태로 되어 있어야 합니다.
즉,
MD0 = 0
MD1 = 1
이 되어 있어야 합니다.
RS-232C 연결은 9600BPS->38400BPS 로 가변 연결 되어야 하므로, 모듈 설계시 RX 와 TX 까지 모두 참조할수 있는 구조로 만들어야 합니다.
Connection
먼저 RS-232C 를 연결 하되, 속도는 9600BPS 로 엽니다.
그런다음, 최초 0x00 을 최대 30번 만큼 write 합니다.
이때 RX 와 TX 를 검사하여, RX 가 set 되어 receive buffer 가 도달 되면 동일하게 0x00 이 왔는지를 확인 해야 합니다.
만약 0x00 을 쓰다가 0x00 이 30번 안에 오면 연결이 된 상태가 됩니다.
Programming Unit Inquiry
다음에 써야 할 것은 0x27. Programming Unit Inquiry 입니다.
이 값을 보내게 되면 0x37 로 시작하는 array 가 오게 되며, 다음과 같은 구조를 가집니다.
[0x37] [ size = 1 byte ] [ unit (size bytes) ... ] [ check sum ]
Renesas 에서 사용하는 checksum 은 checksum byte 자체를 제외한 모든 array 를 더해서 0x00 이 되도록 만드는 SUM 방식을 사용 합니다.
이를 이해 하지 못하시는 분은 제가 만든 다음 코드를 참조 하시기 바랍니다.
unsigned char makeBYTESum(vector<char> &charArray) { if ( charArray.size() == 0 ) { return 0; } unsigned int intCheckSum = 0; for ( int cnt=0;cnt<charArray.size();cnt++) { intCheckSum += charArray[cnt]; } unsigned char sumCSUM = intCheckSum % 256; unsigned char retCSUM = 256 - sumCSUM; return retCSUM; }
이 코드는 STL 의 std::vector<T> 를 사용하는 방법으로, checksum byte array 를 만들기에 좋은 형태로 만들어 두었습니다.
Programming Unit Inquiry 로 오는 2byte의 값은 고정 되어 있습니다. 이때 넘어 오는 0x00,0x08 은 1527R 의 프로그래밍 되는 유닛의 단위가 됩니다.
Device Selection
다음으로 해야 하는건 Device Selection 입니다.
이는 먼저 Inquiry Support device 를 해 줘야 합니다만, 미리 했다는 가정으로 다음과 같이 전송 될 수 있습니다.
[0x10][size = 0x04][0x32][0x30][0x30][0x31][check sum = 0x29]
여기서 0x32,0x30,0x30,0x31 은 Inquiry Support Device (0x20 전송후 받아 오는 record) 를 해야 합니다.
이 부분이 꽤 복잡 하므로 추후 설명하기로 하고, 반드시 이 Inquiry Support Device 를 통해 받아온 4byte array 를 전송해야 하며, 1527 의 경우는 총 4가지의 모드를 지원 합니다.
만약 이 Device Selection 이 성공할 경우 0x06 이 오게 되며, 이는 Ok. 를 의미 합니다.
Clock Mode Selection
다음으론 Clock mode selection 입니다.
이 부분은 1527R 에 외부에 장착한 clock 에 따라 다릅니다만, 0x00 을 쓰므로 기본 설정을 쓰도록 할 수 있습니다.
그래서 전송 되는 것은
[0x11][size=0x01][0x00][checksum = 0xEE]
정상적으로 write 가 되었다면 0x06 이 오게 됩니다.
다음으로는 new bit rate selection 으로 접속중인 BPS 를 변경하여, rom 을 쓰게 되는 부분까지 진행 하도록 하겠습니다.