본문 바로가기
코스웨어/11년 내장형하드웨어

[내장형]심재원_2011.10.31_일일보고서

by 알 수 없는 사용자 2011. 10. 31.
728x90
반응형
1. 시리얼 통신
●Baud rate detection에 쓰이는 프레임의 형태는 다음과 같다.
[0x52]baud rate detection
'host -> reader' 패킷과 'reader -> host' 패킷은 그 크기와 안의 내용이 똑같다.
즉, host가 패킷을 reader에게 보내고 똑같은 패킷을 host가 받게 되면 서로 동일한 bps를 사용한다는 것이다.
다음은 위의 그림의 상단 파란색 부분에 있는 번호를 기준으로 해당 영역을 설명 한 것이다.
2: 장치 번호이다.
마트 같은 곳에서는 이 부분에 여러 고유값이 들어 가지만, 수업시간에 테스트 할 때는 0 이 들어간다.
3: baud rate detection 명령에 해당하는 번호가 들어가 있다.
4: 아무 의미가 없다. 단순히 패딩이다.
●다음은 위의 그림에 나타나 있는 패킷의 정보를 이용하여 CRC16을 구하는 소스이다.
      1 //baud rate detection
      2 #include <stdio.h>
      3
      4 #define CRC_PRESET 0xFFFF
      5 #define CRC_POLYNOM 0x8408
      6
      7 unsigned short crc16(void*,unsigned int); //CRC를 구하는 함수
      8
      9 int main()
     10 {
     11     unsigned char ucNum[6]={0x06,0x00,0x52,0x00,};
     12     unsigned short usCrc;
     13
     14     usCrc=crc16(ucNum,4);
     15
     16     printf("crc16() 리턴값: %04X\n",usCrc); //현재는 CRC가 아님
     17
     18     ucNum[4]=*(unsigned char*)&usCrc;
     19     ucNum[5]=*(((unsigned char*)&usCrc)+1);
     20
     21     printf("CRC: %02X %02X\n",ucNum[4],ucNum[5]); //CRC 출력

     22
     23     if(0==crc16(ucNum,6)) //구한 CRC가 맞는 값인지 검증
     24     {
     25         printf("위의 CRC는 옳은 값입니다.\n");
     26     }
     27     else
     28     {
     29         printf("위의 CRC는 틀린 값입니다.\n");
     30     }
     31
     32     return 0;
     33 }

     34
     35 unsigned short crc16(void* P,unsigned int cnt)
     36 {
     37     unsigned char* DATA=P;
     38     unsigned int i;
     39     unsigned int j;
     40     unsigned short crc=CRC_PRESET;
     41
     42     for(i=0;cnt>i;++i)
     43     {
     44         crc^=DATA[i];
     45         for(j=0;8>j;++j)
     46         {
     47             if(0!=(0x0001&crc))
     48             {
     49                 crc=(crc>>1)^CRC_POLYNOM;
     50             }
     51             else
     52             {
     53                 crc=(crc>>1);
     54             }
     55
     56         }
     57     }
     58
     59     return crc;
     60 }

●[0x63]CPU reset
2011.10.28일짜 포스터를 보면 패킷의 크기는 최소가 6바이트 라고 되어 있는데,
다음의 패킷은 5바이트 이다.


위의 3번째 필드를 보면 '0x63'이라 되어 있는데, 이는 'CPU reset'을 나타낸다.
즉, host가 reader의 CPU를 reset 시킬때 사용되는 패킷이다.
Host -> reader 패킷의 CRC 값은 '0x13 0x51'이다.
●[0x65]Get software version
Reader -> host 패킷을 하단의 내용을 기준으로 설명을 한다.
D-REV: 개발 버젼이다.
SW-TYPE: 제품 모델에 해당하는 번호가 들어간다.
TR-TYPE: 여러가지 방식 중 어떤 방식을 지원하는지 나타내 준다.
다음은 2바이트 TR-TYPE을 자세히 나타낸 것이다.
위의 그림에서 해당하는 비트가 1로 세팅되어 있으면 그 방식을 지원한다는 것이다.
만약, 전부 다 1로 세팅되어 있다면 전부 다 지원한다.
Host -> reader 패킷의 CRC값은 '0x25 0x34'이다.

●[0x66]Get reader info
다음은 4번째 필드인 mode에 해당하는 값과 설명이다.
0x00: controller firmware
0x02: USB controller firmware
0x80: device_ID 



728x90