728x90
반응형
■ RFID
■ Set Output외의 프로토콜 살펴보기
▲ Baud Rate detection은 통신할 때 BaudRate가 일치해야만 응답받을 수 있다.
일치하지 않으면 응답 없다. 즉, 리더기의 baud rate를 알아내기 위해 사용하는 프로토콜이다.
▲ CPU리셋을 위한 프로토콜 (해도되고 안해도됨)
▲ 리더기의 소프트웨어 버전을 알 수 있는 프로토콜이므로 구현해야 된다.
▲ 그 외 RF Reset과 RF On/Off 프로토콜도 있다.
■ GetSoftwareVersion 프로토콜 구현
u_char caString[255] =
{
0x05, 0x00, 0x65,
0x00, 0x3F,
printf("SW-REV : %02X%02X\n", caString[4], caString[5]);
printf("D-REV : %02X\n", caString[6]);
printf("HW-Type : %02X\n", caString[7]);
printf("SW-Type : ");
switch(caString[8])
{
case 30:
printf("ID ISC.M01\n");
break;
case 31:
printf("ID ISC.M02\n");
break;
case 71:
printf("ID ISC.PRH100–U (USB-Version)\n");
break;
case 72:
printf("ID ISC.PRH100\n");
break;
case 73:
printf("ID ISC.MR100–U (USB-Version)\n");
break;
case 74:
printf("ID ISC.MR100 / .PR100\n");
break;
case 75:
printf("ID ISC.MR200-A / -E\n");
break;
case 40:
printf("ID ISC.LR100\n");
break;
case 41:
printf("ID ISC.LR200\n");
break;
case 91:
printf("ID ISC.LRU1000\n");
break;
case 80:
printf("ID CPR.M02\n");
break;
case 81:
printf("ID CPR.02\n");
break;
case 84:
printf("ID CPR.M03 (586/#)\n");
break;
}
printf("TR-Type : ");
if( caString[10] & 0x80 )
{
printf("I-Code UID, ");
}
if( caString[10] & 0x40 )
{
printf("I-Code EPC, ");
}
if( caString[10] & 0x08 )
{
printf("ISO 15693, ");
}
if( caString[10] & 0x02 )
{
printf("Tag-it HF, ");
}
if( caString[10] & 0x01 )
{
printf("I-Code 1, ");
}
Get Reader Info 알아서구현
■ Host command
호스트 커맨드는 PC에서 카드에있는 값을 읽거나 쓸때 쓰는 커맨드들이다.
▲ Host->Read하면 Host<-Reader로 응답하는데,
4번 바이트에 STATUS, 5번~n-2번 바이트에 데이터가 포함된다.
Host Command부터는 3번째 바이트가 B0로 고정되므로,
데이터시트에는 4번째 바이트부터 CRC 앞 바이트 까지에 대해서만 설명한다.
▲ Inventory 커맨드를 전송하면
리더기가 응답하는 타입이 3가지가 있는데 우리는 스탠다드를 본다.
데이터시트에서 봤을때 15바이트니까 + CRC2바이트 = 총길이 17바이트이다.
I-Code EPC는 16(20)바이트
I-Code UID는 27바이트.
응답데이터 타입마다 길이가 다르므로 길이를 알면 타입을 알 수 있다.
즉 우리 소스코드의 첫번째 readfile()함수에서 카드 타입을 추출할 수 있다는 뜻이다.
우리는 17바이트를 수신할테니까 8~15바이트를 체크하면 UID가 나온다.
UHF는 Ultra High Frequency
▲ TYPE_NO 에는 위의 값들 중 하나가 포함되어 있다.
DSFID - 군(family)을 분류하는 ID. 사용하지않으면 0
UID - 카드의 id가 들어있다.
■ Inventory 프로토콜 구현
UID 카드번호.
u_char caString[255] =
{
0x07, 0x00, 0xB0,
0x01, 0x00,
■ Write Multiple Blocks 프로토콜
카드 내부에 메모리가 있기 때문에 Write하는 프로토콜이 사용가능한 것이다.
괄호 안의 숫자는 Address모드일 때 바이트넘버를 뜻한다.
왜냐하면 부가적인 정보가 더 필요하기 때문에, 프로토콜 길이가 길어진다.
Non-Address모드를 쓸때는 카드 대량등록의 경우이다.
예를들어 처음 교통카드를 구매하면 5천원이 들어있는것을 작업할때 사용한다고 보면 된다.
이처럼 특수한 경우가 아니고서야 보안상의 이유로 거의 Address모드를 사용한다.
Non-Address모드는 위험하기 때문에, 일반적인 단말기는 못하게 해놨다.
▲ DB-ADR을 검색해보면 위와같은 정보가 나오는데 ANNEX G를 참조하라고 되어있다.
그에 따라 ANNEX G를 참조하면..
112쪽
5~15까지 데이터블록(DB-ADR)으로 사용할 수 있음을 알 수 있다.
DB-SIZE는 제조사에 달려있다.
■미구현 프로토콜
stay quiet
Lock Multiple Blocks
728x90
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151213 수업 / RFID - 남수진 (3) | 2015.12.13 |
---|---|
20151211-김재홍-Serial_5일차-RFID_win32 (2) | 2015.12.11 |
20151211_[김태현]_RFID_3 (3) | 2015.12.11 |
2015.12.10_시리얼 포로토콜#3_이량경 (2) | 2015.12.11 |
20151210_[안향진]_RFID_3 (3) | 2015.12.11 |
20151210 - 홍준모 RFID 시리얼 통신 Dos 용 마무리, 내일 window 용 할 것 (3) | 2015.12.10 |
2015-12-10 Dos RFID 개인 업무일지 - 천정호 (3) | 2015.12.10 |
20151210 수업 / RFID_3-남수진 (3) | 2015.12.10 |