로그인회원등록 내글장바구니주문조회현재접속자
 상품 검색








 게시판 검색





 
 
회원등록 비번분실


온라인 입금계좌
ㆍ기업은행
ㆍ219-043192-01-028
ㆍ이건영

      거래은행 바로가기
 
  AVR Applications
AVR 자료실
작성자 leeky        
작성일 2007/02/19
첨부#1 elektor_060221_11.zip (0KB) (Down:205)
첨부#2 elektor_60221_ays.jpg (0KB) (Down:44)
Link#1 Default.aspx?tabid=28&art=53178 (Down:33)
ㆍ추천: 4  ㆍ조회: 1001   
  AVR 13.56MHz RFID 읽기/쓰기 장치의 제작

제목 : MiFare와 ISO 14443-A 카드를 위한 RFID 리더 실험장치
참조 : Elektor Electronics (2006년 9월)
저자 : Martin Ossmann
개요 : 설계는 MIFARE와 ISO 14443-A 국제표준의 모든 종류의 RFID 카드의 읽기와 쓰기를 설명하고 있다.
.
● 소프트웨어와 조정
카드 실험 장치를 조립한 다음, 처음으로 13.56-MHz 발진기가 실지로 발진을 하고
클럭 신호를 MPU에 공급하는지 점검해야 한다.
그 다음 ISP 인터페이스를 경유하여 MPU로 프로그램을 Download 할 수 있다.
.
● AVR MPU의 프로그래밍 :
펌웨어는 소스코드와 16진 파일을 내려 받을 수 있다. 다음의 퓨즈를 반드시 허용해야 한다.
- 외부 Xtal 발진, 4 ms 시작을 선택 (퓨즈설정 이전에, 회로도와 같이 외부 발진회로 출력이 X1핀에 연결되어 있어야 한다)
   (외부발진 방식이므로 외부발진회로인 7400의 발진출력 3번 핀에서 발진출력이 MPU로 입력되어야 작동한다)
   (XTAL OSC를 사용한다면, XTAL OSC의 출력을 MPU X-IN과 7400의 4번에 연결하고, 7400의 3-4번 사이의 연결을 끊는다)
- 부트 로더의 크기는 1024를 선택
- 브라운 출력 레벨은 2.7 V를 선택
.
● MPU의 몇 개의 핀은 조정을 위한 중요한 신호가 제공된다. 점검용 핀은 다음의 표를 보라.
 
 
● 리셋된 다음에 유효한 다섯 개의 점퍼가 프로그램 옵션으로 제공되었다. 다음의 표를 보라. 
 
 
● MEGA16을 사용한 13.56MHz RFID 읽기장치의 회로도
(유럽에서 판매되는 KIT 이며, 저자가 회로도를 만든 것이다)
 

13.56MHz의 읽기/쓰기 장치의 하드웨어는 MEGA16을 MPU로 사용하고 있으며, 별도의 RFID 전용 칩을 사용하지 않고,
MEGA16의 PB0에서 출력되는 Manchester 변조신호는, 74HC00 NAND 게이트에서 13.56MHz 반송파를 ASK 변조한 다음,
2개의 P-CH FET, N-CH FET 출력회로에서 RFID 안테나 코일을 구동한다. (안테나 코일은 송신, 수신용이 각각 있다)
65pF 가변용량기는 송신 안테나 코일(L1)과 직렬로 접속되어 있으며, 송신안테나의 공진주파수를 13.56MHz로 동조시킨다.   

카드에서 송신된 응답신호는 수신 안테나 코일 (L2)로 들어오고, NPN TR (Q1)에서 증폭되고, BTA43에서 ASK 복조된 다음,
2.2K와 220pF로 된 2단의 LPF에서 반송파가 제거되고, 아날로그 전압 비교기(LM393)에서 기준전압과 비교된다.
RFID 카드에서 전송된 변조신호는, 아날로그 전압비교기에서 디지털 신호로 변환되어 MEGA16의 PB4에 입력된다.
MEGA16의 PB4에 입력된 Manchester 신호는, MEGA16의 펌웨어에서 복조되어 원래의 데이터로 저장된다.
수신된 데이터는 LCD에 표시하거나 RS232C로 전송하여, PC의 터미널 프로그램으로 RFID 카드의 데이터를 확인할 수 있다.   

안테나 코일은 직경 0.5~1.0mm의 에나멜이나 폴리 우레탄 피복전선 130 cm를 카드 크기의 직사각형으로 감는다.
안테나 코일은 플라스틱 카드보다 아주 작거나 크지 않은 크기이면, 공진 주파수는 대부분 감는 코일의 길이에 비례한다.  
송수신 안테나 코일은 동일한 규격으로 2개를 만들고, L1, L2에 각각 연결하여 송수신 별도로 사용한다. 

● 초기 설정 : MPU가 프로그램이 된 후에 설정 작업을 시작할 수 있다.
점퍼 JA를 고정하여  Fast REQA 시험 프로그램을 시작한다.
프로그램은 다음과 같은 순서로 반복한다. 

(1) Mifare 카드의 전원-리셋(POR)을 위해서, 송신기는 2 ms  동안 꺼진다.
(2) REQA 명령이 카드로 송신된 후에, 송신기는 2.5 ms 동안 켜진다.
명령이 송신되었을 때, PB1 출력은 1로 설정 된다. 표시된 측정을 위한 오실로스코프를 Trigger 하는데 사용될 수 있다.
(3) 명령이 송신된 후, Load modulation으로 Mifare 카드가 응답할 때, trigger 신호는 0으로 리셋 된다.
Trigger 신호의  하강 모서리에서 오실로스코프를 trigger 하면, 탐지막대(sniffer probe)로 들어오는 신호는,
카드의 응답신호 중에서 부하변조(Load  modulation)된 신호 파형을 오실로스코프의 중심에서 볼수 있다. 

● 부하변조(Load Modulation)는 읽기장치에서 전송한 무변조 반송파를 받은 에너지로 RFID 카드가 응답하는 방법으로,
RFID 카드의 내부안테나 코일의 출력에 연결된 R이나 C부하를 단속(OOK)하여 응답하는 변조방식을 말한다.
        

● 그림 1. 탐지 막대 (sniffer probe)의 제작
 
(코일은 0.5mm 에나멜 전선으로 직경 25mm,  꼬아진 연결 부분의 길이는 50mm 이다) 

● 탐지 막대 (Sniffer probe)
에너지는 본질적으로 유도결합에 의해 13.56MHz RFID 카드로 송신된다.
이것은 흥미롭게도 전송기 시험장치에서 발생된 자계의 힘을 근접하여 측정한다.
그림 1에 그려진 0.5mm 에나멜 피복 전선으로 만든 탐지 막대를 쓸 수도 있다.
2 개의 저항은 13.56 MHz에 정의된 임피던스를 비교적 잘 발생한다.   

(탐지막대는 안테나 코일에 근접시켜 송수신 파형을 오실로스코프로 감시한다)
탐지 막대는 오실로스코프 안에서 50 옴 저항으로 접지된 동축 케이블로 오실로스코프에 연결된다.
이 탐지 막대의 변환 계수는 약 40 A/Vm 이다.
우리는 필립스사 Mifare 리더기의 송신코일 중심에서 800 mVpp의 전압을 측정하였다.
적절한 횟수로 감은 유효값 12 A/m는, 첨두(p-p)값으로 32 A/m의 자계의 세기(H)에 상당한다. 

● 송신단의 조정과 첫 번째 기능 시험
이제 탐지막대를 읽기장치의 송신회로 조정에 사용할 수 있다. (Fast REQA 시험상태로 작동).
송신코일 틀의 중심에서 탐지막대는 안전하며, 최대 진폭을 위한 C4 (65pF 가변용량기)를 조정한다.
저자가 탐지막대의 출력을 오실로스코프로 측정한 전압은, 3 A/m의 자계강도에서 약 200 mV pp 이다.
.
이것은 특정한 필립스사 IC (MIFARE RC522)에서 획득된 값보다는 특별히 작다.
그러나 이것은 1.5 ~ 7.5 A/m 범위로 허용된 (ISO 14443-2 FCD 6.2) 표준에는 충족한다.
다음, Mifare UltraLight 카드의 송신과 프레임 수신 사이, 수신 프레임 닫기에는 안전하다.
.
이 신호는 Mifare RFID 카드에서 응답하는 Load Modulation 신호로 기본적인 Manchester 포맷으로 송신된다.
송신 데이터가  0 일때의 송신 비트는 0 ->1 로 반전되며, 송신 데이터가 1 일때의 송신 비트는 1->0으로 반전된다.
즉 1개의 비트 레벨은 2개의 송신 레벨로 변조되며, 송신 비트가 0 일때는 무변조, 송신비트가 1 일때는 부반송파를 변조한다
송신비트가 1 일때 변조되는 부반송파의 주파수는 주반송파(13.56MHz)의 1/16로 8개의 Cycle을 출력한다. (전송속도는 106K BPS)

아래 그림에서  Machester Coded Subcarrier의 칠해진 부분이 부반송파로 변조된 송신비트1을 보여준다.    
 
 
화면중심에 load 변조신호를 위치시키는 격발신호의 하강 모서리로 오실로스코프를 Trigger한다.
탐지막대로 수신 프레임을 잡으려 한다면, 그림 2의 상단에  보여준 신호와 유사한
깨끗하게 load modulation된 부반송파의 신호가 보여야 한다. 이제 다음 단계의 준비가 되었다. 

● 그림 2. Load  Modulation 신호(윗쪽 파형)와 복조된(Decoded) 부반송파(Sub carrirer) (아래쪽 파형).
 
● 수신 조정
첫 번째 임무는 수신단의 트랜지스터 BC560 증폭도의 최적화이다.
이렇게 하려면, 오실로스코프로를 써서 가변저항 22 K로 조정된 콜렉터의 신호를 감시한다.
신호의 진폭은 그림2의 아래에서 보여준 Load 변조신호는 847 KHz의 주기로 약 5 Vpp  이다.
다음은, 오실로스코프로 비교기의 입력신호를 감시한다. 그림3의 아래에 보여준 신호와 비슷해야 한다.

● 그림 3  Load modulation(윗쪽) 신호가 ASK 복조된 파형(아래 쪽)
 
그림3에서 보여준Mifare UltraLight 카드로 가는 REQA 명령의 응답으로부터 복조된 신호를 바르게 처리할 수 있다.
변조된 반-비트는 신호는 언제나 High 이다. 이미 말한 대로,
두 번째 반-비트 변조에 의해 “0”이 송신될 때 까지, 첫 번째 반-비트로  “1” 이 송신되었다.  
하나의 수신 프레임은 “1”로 출발하는 형식(symbol) S로 시작된다.  
.
RFID 카드에서 한 바이트가 전송된  다음 비트는, 최하위 비트부터 시작된다.
패리티 비트는 바이트의 마지막 비트 다음에 추가된다.
바이트와 패리티 비트 안의 모든 ‘1’의 개수는 항상 홀수이다. (홀수 패리티 전송을 말함)
간단한 예로, 프레임의 끝은 무변조로 표시된 Pause(마지막 부분의 End) 이다.
.
신호의 복조된 내용을 보여준 그림3은 그림4에서 도식으로 묘사되었다 .    
데이터 시트 [1]에 따라 바르게 수신된 바이트는 44H와 00H이다.
(수신파형에서 좌측이 먼저 수신된 신호이고, 우측이 나중에 수신된 신호이다)
.
● 그림 4. 그림3의 신호를 복조한 내용 (LSB 우선의 전송방식의 2 바이트 데이터 0x44와 0x00)
 
남아있는 완전한 수신기의 조정은 R13으로 비교기 기준레벨의 조절이다.
가변저항 R13의 조절은 반드시 비교기의 “1”과 ‘0“을 올바르게 구별해야 한다.  
그림5에 보여준 REQA 명령으로 부터 응답의 시작부분에서 비교기는 출력한다.
(주: 비교기 출력은 그림3에 보여준 신호와 상대적으로 반전된다) 

● 그림 5. 비교기 출력의 디지털 신호.
 
 
조절이 올바른지 점검하려면,  REQA 시험모드(점퍼 JB의 고정과 장치의 reset)에서,
장치의 작동 시작으로 부터, 다른 좋은 방법으로 만들어야 한다.
코드에 따라서 표시되는 수신신호의 오류가 없는지 이 모드에서 수신된 바이트들을 보여 준다.
.
● 어셈블리 소스
여기에 우리는 RFID 카드에서 요구되는 최대한의 속도로 통신하는,
기계어로 프로그램 된 약간의 소프트웨어를 설계하였다.
이 부분은 올바른 간격의 송신 단속펄스를 생성하는 TX-RX 라고 부른다.
유지 간격은 모든 것을 간단하고 빠르게 처리하는 미리 계산된 표에서 정의되었다  
.
송신신호가 발생된 후에, 루틴은 수신모드로 전환되고, 하나의 반-비트마다
4번 샘플링 하는 약 800 kS/s 속도로 비교기 출력을 샘플링 한다.
샘플들은 간단하게 표 안에 저장되고, 사전에 정의된 샘플의 숫자로 전달할 때
(약 50 명령으로 된) 기계어 루틴의 목표로 마무리 된다.
.
● 어셈블리 TX_RX 루틴
.set         R0,         0 
.set         temp,      16
.set         mC1,       17
.set         mC0,       18
.set         YL,         28
.set         YH,         29
.set         PORTB,    24 
.set         PINB,       22
;
TX_RX:
        push         YH                ; save frame pointer
        push         YL
        push         temp             ; and other used registers
        push         mC1
        push         mC0
        ldi           YL,lo8(IObuffer) ; Y points to next byte
        ldi           YH,hi8(IObuffer)
;
TXlp:   ld        temp, Y+            ; get duration
        tst       temp                 ; set flags
        breq     sample               ; 0 = end of list
        push     temp                 ; save duration 
        cbi       PORTB,0             ; carrier switched to 0
        rcall      time0                ; wait pause-duration
        sbi       PORTB,0             ; switch carrier on again
        pop      temp                 ; restore duration
        rcall     timer                 ; wait duration 
       rjmp     TXlp                  ; and next slot to TX
;                
sample:  
        ldi        temp,250           ; sampling PINB.4 
        rcall      timer
        cbi       PORTB,1            ; falling edge trigger
        ld        mC1,Y+             ; sample count                                                
        tst       mC1
        breq     ENDsample                                                        
        ldi        YL,lo8(IObuffer)
        ldi        YH,hi8(IObuffer)
;
BITlp2:  ldi        mC0,8             ; shift bits into emp MSB first !!
BITlp1:  clc                            ; get new slot at tmp.0
        rol        temp                ; by rotating a zero int this position
        sbi        PORTB,3           ; signalize sampling
        sbic       PINB,4
        ori        temp,1             ; conditionally set this bit
        cbi        PORTB,3           ; stop sampling signal
        dec       mC0                ; SAMPLE counter                                
        brne      go1                ; equalize
;
        st        Y+,temp            ; save complete BYTE = 8 samples
        dec      mC1                 ; BYTE counter
        brne     BITlp2               ; restart with new BYTE
        rjmp     ENDsample
;                                        
go1:   nop                            ; equalize jump delay
        nop
        nop
        nop
        rjmp     BITlp1
;                        
time0: ldi        temp,9              ; general timing routines
timer:  dec      temp
        brne     timer
        ret
;
ENDsample:  
        pop   mC0                    ; restore registers
        pop   mC1
        pop   temp
        pop   YL
        pop   YH
        ret                             ; end of TR_RX
;
● C 루틴 소스 (WinAVR for AVR Studio)
송신과 수신 함수 두 곳에 필요한 약간 복잡한 작동.  
송신, checksum을 위해 반드시 계산되고 사용자 데이터로 추가된다.
바이트는 반드시 조합된 패리티와 함께 비트로 변환되고 (패리티를 추가한 바이트를 생성)
하나의 송신 비트들은 반드시 2개의 부호로 변환되고 송신되어야 한다.
.
운이 좋게도 어떤 추가 비용이 없는 무료 WinAVR (GNU) 번역기로,
C안에서, 모든 계산들은 거의 통상적으로 프로그램 된다. 수신 마무리는 역시 까다롭다.
처음, 소프트웨어는 샘플과 정의된 비트 값으로부터 반드시 반-비트 안에서 인식된다.
비트들은 바이트 안으로 변환 되어야 한다. 그리고 패리티는 반드시 점검되어야 한다.
.
● 내려받기 :
elektor_060221_11.zip (23.5 KB) 소스는 첨부 파일을 내려받기 하십시요.
.
CRC 점검은 필요 없다. 그들 임무는 역시 C 안에 통상적으로 프로그램 될 수도 있다.  
마지막으로, 사용자 데이터는 평가되고 표시되기 위해서 존재한다.
만일 고정된 점퍼가 없으면, 읽기장치는 RS232C 인터페이스를 경유하여 작동된다.  
.
다음의 표에 표시된 몇 개의 RS232C 통신 기능이 있다.
 R = 4 세트의 16 바이트 데이터 읽기와 표시
 W = 4 바이트 데이터 쓰기
 C = 키가 눌릴 때 까지 연속으로 읽기
 T = 충돌방지 명령 시험
 S = 선택 처리를 반복한다.
.
● 터미널 프로그램으로 MEGA16 RFID 읽기장치를 연결한 화면 (14443A RFID 카드의 4 블록 데이터 읽기)
R=read,W=write,C=contious-read,T=collision_sequence,S=state_sequence >>
REQA:44 00 e:0000
READ 0000 >>04 14 5E C6 29 EE 02 81 44 48 00 00 00 00 00 00 e:0000
READ 0004 >>FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 e:0000
READ 0008 >>00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e:0000
READ 000C >>00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e:0000
.
● 터미널 프로그램으로 MEGA16 RFID 읽기장치를 연결한 화면 (14443A RFID 카드 0008에 59, 56, 45, 53을 저장)
14443 RFID 카드는 인증이 걸린 교통카드의 경우에는 아래와 같이 (인증처리가 없으므로) 쓰기작동으로 작동하지 않는다.
R=read,W=write,C=contious-read,T=collision_sequence,S=state_sequence >>
enter 4 bytes:>59
>56
>45
>53
enter ADR:>8
WR :59 56 45 53 @:08
ok ? (Y/N):WRITE !!
REQA:44 00 e:0000
READ 0000 >>04 14 5E C6 29 EE 02 81 44 48 00 00 00 00 00 00 e:0000
.
REQA:44 00 e:0000
READ 0000 >>04 14 5E C6 29 EE 02 81 44 48 00 00 00 00 00 00 e:0000
READ 0004 >>FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 e:0000
READ 0008 >>59 56 45 53 00 00 00 00 00 00 00 00 00 00 00 00 e:0000
READ 000C >>00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e:0000
.
● 데이터 보호
몇 개의 보호 장치 들이  ISO 14443 카드에서
데이터를 송신할 때 일어 날수 있는, 오류 검출이 가능하도록 읽기장치에 사용되었다.
읽기장치와 조합된 소프트웨어는 반드시 그들의 모든 원리를 올바로 사용할 수 있어야 한다.
미리 만들어진 한 개의 바이트는 패리티 비트로 보호된다.
.
UID 안의 바이트는 몇 개의 장소마다 block check character라 부르는 블록 점검 바이트는  
UID 마지막 바이트이며 UID에 포함된다. (UID 4 바이트를 XOR한 값)  
비교적 긴 명령과 그들의 결과는 데이터의 뒤에 추가되는 2개의 CRC를 사용하여 보호된다.  
CRC(cyclic redundancy check)에 대한 상세한 자료는 ISO 표준을 참조할 수 있다.
.
그러나 어떤 경우에도 그들의 모든 원리는 소프트웨어로 구현된다.
만일  당신이 소프트웨어에 새로운 명령의 추가를 원한다면,
반드시 하나의 경우마다 올바른 원리를 사용하여 확보해야 한다.
현재의 소프트웨어는, 읽기장치의 오류를  RXerror 변수에 기록하고, 발생한 곳을 알 수 있도록 표시한다.
.
● 충돌 검출
ISO 14443 동의한 장치에서 찾을 수 있는, 현대적인 RFID 소자는, 충돌 검출과 충돌 처리를 지원하도록 설계되었다.
이것은 단일 읽기장치가 "in parallel" 의 다중 카드의 주소를 인식하는 것을 가능하게 만든다.
어떻게 이 작업을 하는지 아래에서 간단히 보여준다.
.
● 그림 6  비트 충돌된 2개의 카드로 부터의 신호
 

충돌 검출의 주요  인자는 RFID 소자에서 변조와 각각의 비트들이 읽기장치로 송신되는 코딩이다.
단 하나의 반-비트는 하나의 비트 간격으로 변조된다. (하나의 비트가 2개의 송신비트로 만들어 진다)  
만일 부반송파가 2개의 반-비트에서 검출되면, 이 뜻은 1개 혹은 다른 RFID 소자는 “0”으로
하나 이상의 RFID 소자가 같은 시간에  "1"로 송신된 것이다. 이 결과는 충돌이다.
.
적당한 신호 파형을 그림 6에서 보여준다. 이 그림은 2개의 Mifare 카드 중에서 두 번째의 송신코일로부터
획득된다. (1 cm 거리의 다른 하나) 그리고 개별적으로 사용하는 탐지막대를 써서 필드가 검출된다.
비트 충돌은 두 개의 커서라인 사이에서 확실하게 나타난다.  카드에서 동일시간에 송신된 비트에 나타날 수 있다.
.
RFID 장치는 충돌을 회피하는 약간의 특별한 명령으로 ‘eliminate’를 사용한다.
개별적인 주소로 되어 있는 카드의 주요 인수는, 하나의 카드를 간단히 64 비트 UID로 인식한다.
얼마쯤 간단한 폼으로, 프로세서는 다음의 원리에 따라서 작동한다.
.
읽기장치에 응답하는 모든 카드는 UID의 첫 K (K=0으로 시작하는) 비트를 송신한다.
응답에서, 하나의 카드는 남아 있는 UID의 64개 K 비트를 송신한다.  
이것은 모든 카드 들이 한 번에 완전한 UID를 송신한다는 뜻이다.
만일 충돌이 없다면, 그들은 정확한 하나의 카드와 UID를 완전하게 알 수 있다.
.
한편, 만일 충돌이 일어난 카드에서 첫 비트의 충돌이 일어난 위치가 어디인지 알 수 있다.
마지막 2개의 카드의 UID는 같은 자리이거나 다른 자리에서 동시에 올라온 것을 안다.  
이것은 카드의 처리를 이 위치에서 “1”로 계속할 수도 있다.
그리고 카드는 UID 송신 sequence 진행으로 이 위치에서 분리되거나,
그리고 적당히 증가된 K값으로 이위치를 포함한 “0”으로 계속할 수 있다.
.
읽기장치는 3개로 판단하는 분기처리 기간 동안, 충돌을 해결할 때 까지 이 처리를 반복한다.
그러나 그보다, 그룹 안에서 비트는 이미 알려진 송신하지도 않는 불필요한 반복시간으로 부터
처리 속도를 올리기 위해서, 64 비트들을 같은 시간에 모두 처리하지 않는다.
읽기장치가 한 번에 모든 UID를 알려면, 카드를 개별적으로 활성화 하거나 정지 상태로 가도록 한다.
.
읽기 시험기를 위한 소프트웨어는 자동으로 충돌을 검출하고 해결하는 방법이 아직 도구화되지 않았다.
이 기능을 포함하여 업그레이드될 것이다. 그러나 현재의 송신전력은 하나의 이상의 카드에너지로 불충분하다.  
다중 카드의 응답처리에 매우 적당한, 고정된 기준레벨의 간단한 진폭복조 회로는 특별하지 않다.
.
● 참고 자료
[1] http://www.elektor.com/Default.aspx?tabid=28&art=53178
[2] http://www.nxp.com/products/identification/mifare/classic/   - mifare classic
 
참고로 이 프로젝트의 소스를 첨부한다. (ICC-AVR-C를 사용하였으며, 소스의 앞 부분인 선언부이다)
//-----------------------------------------------
// EXPERIMENTAL MIFARE RFID READER
// Date: 31.th July 2006
// M. Ossmann
// built using WINAVR-GCC c-compiler under AVR-STUDIO
//
// MPU = MEGA16-16PI (40 PIN DIP)
// Xtal = 13.56MHz
// Uart = 9600,N,8,1
// Comannd = R, W, C, T, S,
//-----------------------------------------------
#include <iom16v.h>
#include <macros.h>
#include <pgmspace.h>

//-----------------------------------------------
// user defines
//-----------------------------------------------
#define F_CPU 13560000                                                 

#define JE 0x40                                                                // PD6 JPE = RD_test(4)
#define JD 0x20                                                                // PD5 JPD = RD_test(0)                                
#define JC 0x10                                                                // PD4 JPC = fast_WUPA_test()        
#define JB 0x08                                                                // PD3 JPB = REQA_test()                        
#define JA 0x04                                                                // PD2 JPA = fast_REQA_test()

#define DEM 0x10                                                        // Demodulation input
//#define SPL 0x08                                                        // sampling pulse for oscilloscope
#define TRG 0x03                                                        // trigger for mod and oscilloscope
#define MOD 0x01                                                        // Modulation output

//-----------------------------------------------
// user variables
//-----------------------------------------------
#define io_bytes 220
unsigned char io_buff[io_bytes] ;
unsigned int io_ptr;                                                         // points to time buffer !!

unsigned char rx_bit_buff[200];
unsigned int bits_buff_ptr;
unsigned int is_first;

unsigned char tx_byte_buff[20];                // tx buffer for transfer
unsigned int tx_bits;                                                        // Number of PAYLOAD bits
unsigned int tx_zeroes;
unsigned int tx_time;

unsigned char rx_byte_buff[30];                // rx buffer for receive
unsigned int rx_byte_error ;                        // rx byte error
unsigned int rx_error ;                                                // rx error

unsigned int sys_mode;                                                // system mode
unsigned int crc_reg;                                                        // 16 bit crc

unsigned int sample_byte_ptr;                        // sampling pointer
unsigned int sample_bit_mask;                        // sampling bit mask

//-----------------------------------------------
// time-gap to time-element in TXbuffer conversion
//-----------------------------------------------
#define gap_t3 24
#define gap_t5 46
#define gap_t7 68

//-----------------------------------------------
// RS232C Command
// R = Read and Display (16 bytes x 4 set)
// W = Write to address
// C = Read Continue
// T = Test of Antenna Collision
// S = Loop Select Sequence

★★★ 자료의 무단 복사 및 무단 게시를 금합니다. ★★★
단 아래와 같이 원저자와 번역자를 본문과 함께 게시해야 합니다.
원저자: http://www.elektor.com/
번역자: http://avrtools.co.kr/
 

   
이름아이콘 석재균
2007-09-20 13:04
 Atmega 16-16을 이용하여 제작을 해보고 있는 학생입니다. 다름이 아니라 구성 후 테스트해본 결과 PB0에서
맨체스터 신호가 안나가는 것 같군요. PB0에서 맨체스터 신호가 나오는 지 확인 부탁드립니다..
   
이름아이콘 오형택
2007-10-09 00:06
 AVR 13.56MHz RFID 읽기/쓰기 장치의 제작 중 질문좀 드리겠습니다.
제발 지우지 마세요 어디에 질문올릴때가 없어서 이곳에 질문올립니다.
●설정/결과값
AVR: ATMEGA16L-16PU
퓨즈설정: CKOPT 0, BOOTSZ1 0,SUTL 0, CKSEL3~0 0 =>0 체크됨
TAG: Mifare classc 1K
ANT: 0.5mm130cm (Snif탐지막대의 출력을 오실로스코프로 측정한 전압은약 243 mV pp)
TAG 동조후 수신안테나 신호 900mV pp 증폭후 약 2Vpp 비교기 전 2번단자 심볼파형 나옴
비교기 1번에  맨체스터신호 0x04 0x00 이 나옴(위 자료에는 0x44 0x00 이나온다고함)
위 내용처럼 안테나 동조 TAG동조신호 나옴(물론 자료와 다르지만)

●UART 통신테스트시(S=state_sequence )
< 오류 메세지  >>
R=read,W=write,C=contious-read,T=collision_sequence,S=state_sequence >>
REQA:04 00 e:0000
9320:6A 5B 1F 86 A8 BCC1=00 e:0000
9370:08 e:0000
9520:08 B6 DD 86 A8 BCC0=4D e:0002
9570:08 e:0022
>> 9520에서 BCC0=4D e:0002의 의미를 잘 모르겠습니다
T=collision 에러는 없음
●R=read 시험
R=read,W=write,C=contious-read,T=collision_sequence,S=state_sequence >>
REQA:04 00 e:0000
READ 0000 >> 04 00 DD 86 A8 00 00 00 00 00 00 00 00 00 00 00 e:0022
READ 0004 >> 04 00 DD 86 A8 00 00 00 00 00 00 00 00 00 00 00 e:0022
READ 0008 >> 04 00 DD 86 A8 00 00 00 00 00 00 00 00 00 00 00 e:0022
READ 000C >> 04 00 DD 86 A8 00 00 00 00 00 00 00 00 00 00 00 e:0022
하지만 Tag로 고유의 정보를 받아 올시 약간의 오류가 있어서 그런지 완전한 고유 정보가 아닌 4byte의
값(00 DD 86 A8 )만 받아 오는 것을 확인 하였습니다. (카드변경시 4byte 다른값으로 변함)

●질문:
1. 퓨즈설절문제인지?
2. 카드가 문제인지?(mifare ultra right를 꼭써야 되는건지)
3.위 내용처럼 카드값이 다읽히지 않고 4byte의 값(00 DD 86 A8 ) 값만 나오는게 BCC오류때문에 인증처리가
     되지않아 다음 단게로 넘어가지 않는건가요 궁금?
벌써 3개월'째 이러고 있습니다. 관리자님또는 이 리더기를 제작해보신 분들은 꼭쫌 답변좀 부탁드립니다.
제발요~~

   
이름아이콘 avrtools
2007-10-10 18:28
 버스카드 같은 Mifare 카드는 인증이 필요하므로, 이것을 꼭 사용하려 한다면,,,
불용 버스카드나  ID 카드를 이용한 잠금장치등 UID 만으로 작동하는 장치에 적당합니다.
저도 ISO 14443A 카드를 구해보려 했지만, 못 구하고 버스카드인 Mifare를 구했지요
이것은 전자화폐이므로 Phillips 칩이 아니면 UID 이외에는 절대로 읽거나, 쓸 수 없습니다.
Phillips칩이 있어도 인증코드를 모르면 또한 읽거나 쓸 수 없습니다.
   
이름아이콘 avrtools
2007-10-10 18:33
 Mifare 카드와 ISO 14443A 카드는 인증절차가 틀립니다, Mifare는 비표준입니다.
그러므로 Mifare 카드(Tag)는 인증이 안되면 UID 만 출력되며,
UID인 04 00 DD 86 A8 외에는 읽기, 쓰기가 안됩니다.
인증이 필요없는 ISO 14443 카드(Tag)를 구해서 내용읽기/쓰기를 하십시요,
다른 질문의 답변은 센서자료실의 14443A의 카드 읽기/쓰기 자료를 참고하십시요
target=_blank>http://avrtools.co.kr/bbs/view.php?id=sensor&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=104
   
이름아이콘 오형택
2007-10-12 20:09
  avrtools 관리자님 답변 감사드리고요 그럼 결국은ISO 14443A (13.56 MHz)방식 필립스 mifare classic 1k를 테스트하고 있는데  위 소스로 동작이 안된다는 말이군요  그럼 위 설명처럼   필립스 mifare ultra right 카드만 있으면 소스 수정없이 동작이 가능하겠네요
다시한번 감사드리고 UID는 읽혔지만 이게 무엇이 문제인지 난감했는데 그래도 관리자님께서 답변을 해주시니 정말 감사드립니다. ...


   
이름아이콘 avrtools
2007-10-15 10:06
 이소스로 작동이 가능한 태그는 Mifare가 아니고 ISO14443A 만 작동이 됩니다.
즉 Mifare 태그는 ISO14443A에 인증이 추가된 옵션태그이며 우리나라에서는 교통카드에 사용하고 있습니다.
그러니 인증없이 읽기, 쓰기가 되려면 표준태그를 구해야 합니다, 결국 버스카드를 구현하지 않는다면,,,,
현 시점에서는 ISO15693 이 입수하기 쉽고, 공개된 읽기/쓰기방법으로 읽기/쓰기가 용이합니다.
   
이름아이콘 오형택
2007-10-15 17:25
  avrtools 감사합니다. 많은 도움 되었습니다.
   
 
윗글 T89C51SND1C 64M USB MP3 플레이어
아래글 WhereAVR for APRS GPS/Telemetry
    N         제목    글쓴이 작성일 조회 추천
AVR 자료실 안내 avrtools™ 2008/09/02 (화) 164 0
97 AVR Basic Compiler (4K Free) avrtools™ 2008/12/03 (수) 180 0
96 코드비젼 V2.05.0 평가판 avrtools™ 2011/07/17 (일) 124 0
95 8x8 LED Audio Spectrum Display avrtools™ 2009/10/18 (일) 242 0
94 AVR 펌웨어로 만드는 USB 드라이버 avrtools™ 2009/10/07 (수) 416 0
93 AVR-CDC and V-USB avrtools™ 2009/10/06 (화) 214 0
92 AVR USB-HID-Bootloader의 제작 avrtools™ 2009/10/01 (목) 250 0
91 AT91SAM7S256 개발환경과 컴파일러 [2] avrtools™ 2008/11/03 (월) 2166 0
90 SAM7S256 USB 드라이버와 AT91-ISP avrtools™ 2008/11/01 (토) 1149 0
89 AT91SAM7S256 공부를 시작합니다. avrtools™ 2008/11/01 (토) 578 1
88 ICCAVR V7.16A AVR 컴파일러 45일판 avrtools™ 2009/03/09 (월) 130 0
87 CodeVisionAVR1248b 最新版下载 leeky 2008/11/08 (토) 292 0
86 AVR UART 소스 (ICC AVR V6) avrtools™ 2008/12/03 (수) 172 0
85 cvAVR Soft Uart Source avrtools™ 2008/12/03 (수) 141 0
84 cvAVR 직렬포트와 LCD 시험용 소스 avrtools™ 2008/12/03 (수) 137 0
83 Free SmallC for AVR avrtools™ 2008/12/03 (수) 155 0
82 AVR910-ISP용 AVR-OSP2 Ver5.43 avrtools™ 2008/12/03 (수) 170 0
81 Code Vision AVR 컴파일러 2K 데모버전 avrtools™ 2008/12/02 (화) 96 0
80 AVR delay loop generator avrtools™ 2008/12/02 (화) 146 0
79 ICC tiny C컴파일러 V6 데모버전 (30일 제한판) avrtools™ 2008/12/02 (화) 67 0
78 ICC AVR C 컴파일러 V6 (4K 제한판) avrtools™ 2008/12/02 (화) 82 0
77 DasmAVR (Windows용 AVR 역어셈블러) avrtools™ 2008/12/02 (화) 129 0
76 AVR PROG KIT avrtools™ 2008/12/02 (화) 176 0
75 AVR JTAG ICE KIT avrtools™ 2008/12/02 (화) 250 0
74 AVR 부동소수점, 지연시간 계산기 avrtools™ 2008/12/02 (화) 152 0
73 ATtiny45 USB to RS232 인터페이스 avrtools™ 2008/09/26 (금) 194 0
72 MEGA32 128x64 GLCD Scope 제작 avrtools™ 2008/09/22 (월) 301 0
71 PC송신방식 Tiny2313 50x7 LED 전광판 avrtools™ 2008/09/10 (수) 258 0
70 mega8 적외선 거리측정 레이더 leeky 2006/05/07 (일) 1375 0
69 ATmega16 RFID #3 소프트웨어 leeky 2006/12/27 (수) 888 0
68 ATmega16 RFID #2 하드웨어 leeky 2006/12/27 (수) 1134 0
67 ATmega16 RFID #1 태그 leeky 2006/12/27 (수) 866 0
66 ISO 14443A RFID 카드의 읽기/쓰기 방법 [1] leeky 2007/02/25 (일) 1498 1
65 ATmega8 PSK31 RF Modem의 제작 leeky 2006/03/07 (화) 1383 21
64 T89C51SND1C 64M USB MP3 플레이어 avrtools 2006/03/04 (토) 971 8
63 AVR 13.56MHz RFID 읽기/쓰기 장치의 제작 [7] leeky 2007/02/19 (월) 1001 4
62 WhereAVR for APRS GPS/Telemetry avrtools 2006/05/05 (금) 393 2
61 ATmega8 UI-TNC 무선모뎀의 제작 avrtools 2006/03/07 (화) 399 0
60 AVR APRS(GPS) Packet 무선모뎀 avrtools 2006/03/07 (화) 380 0
59 AT90PWM3 교류모터 속도제어 leeky 2006/04/07 (금) 931 1
58 M128 MMC LED 전광판 leeky 2006/03/07 (화) 918 0
57 Charon 2 이더넷 모듈의 소개 avrtools 2006/04/04 (화) 480 0
56 S2313 LED 회전계 (TACHO METER) avrtools 2006/03/28 (화) 603 0
55 Mega8 + 128x128 LCD 스코프 avrtools 2006/03/28 (화) 1192 0
54 Mega8 + OV6630 Treva 모바일용 카메라의 화상처리 leeky 2006/03/19 (일) 782 0
53 YUKI Mega8 MP3 Player #3 avrtools 2006/03/11 (토) 838 0
52 AVR JTAG 에뮬레이터의 제작 avrtools 2006/03/07 (화) 839 0
51 USB AVR 프로그래머 AvrUsb500 avrtools 2006/03/07 (화) 732 1
50 Mega88 USB 버스 모니터 avrtools 2006/03/07 (화) 389 0
49 M16 MMC Flash Memory leeky 2006/03/07 (화) 451 1
48 M163 SD,MMC Interface leeky 2006/03/07 (화) 438 0
47 S2313 MMC to Serial leeky 2006/03/07 (화) 322 0
46 ATmega48 UDP/IP 적외선 리모콘 수신장치 avrtools 2006/03/07 (화) 413 0
45 HDD MP3 플레이어 leeky 2006/03/07 (화) 602 0
44 MP3 yampp-3/USB leeky 2006/03/07 (화) 296 0
43 MP3 Player yampp-3 leeky 2006/03/07 (화) 262 0
42 YUKI MP3 플레이어2의 제작 (ATmega8 + SD Card) avrtools 2006/03/07 (화) 378 0
41 AVR CD 플레이어 leeky 2006/03/07 (화) 539 0
40 S2313 초음파 거리계 (미터, TV 스크린, LED 표시) avrtools 2006/03/07 (화) 550 0
39 RF Spectrum Monitor avrtools 2006/03/07 (화) 380 0
38 Easy Ethernet AVR 웹서버 leeky 2006/03/07 (화) 452 0
37 90S4433 LCD표시 100Mhz 주파수 카운터 leeky 2006/03/07 (화) 254 0
36 ELM Audio Spectrum Monitor avrtools 2006/03/07 (화) 358 0
35 Mega8 Door Bell leeky 2006/03/07 (화) 284 0
34 AVR 휴대용 DVM leeky 2006/03/07 (화) 489 0
33 Minimum Mass Waveform Capture and Display leeky 2006/03/07 (화) 267 0
32 AT90S2313 디지털 용량계 avrtools 2006/03/07 (화) 372 0
31 SLO2016 Alphanumeric Intelligent Display leeky 2006/03/07 (화) 179 0
30 AT90S2313 흔드는 LED 전광판 (POV) leeky 2006/03/07 (화) 432 0
29 ATtiny2313 Scrolling LED Sign avrtools 2006/03/07 (화) 368 0
28 Tiny22,S1200 나이트 라이더 avrtools 2006/03/07 (화) 310 0
27 ATtiny26L의 AD 변환과 PWM 출력제어 leeky 2006/03/07 (화) 478 0
26 S2313을 사용한 DS1820 온도계 leeky 2006/03/07 (화) 269 0
25 ATmega8535 온도센서 leeky 2006/03/07 (화) 299 0
24 AVR2313 100MHz RF연결 주파수 측정메터 avrtools 2006/03/07 (화) 199 0
23 VHF 무선 데이터 송신기 leeky 2006/03/07 (화) 507 0
22 90S2313 1MHz 파형 포착기 leeky 2006/03/07 (화) 229 0
21 VHF 무선 데이터 수신기 avrtools 2006/03/07 (화) 365 0
20 AVR 5x7 Dotmatrix LED leeky 2006/03/07 (화) 240 0
19 Mega163 웹 LCD leeky 2006/03/07 (화) 396 0
18 AVR 이더넷 시험소프트 avrtools 2006/03/07 (화) 297 0
17 AVR 넷트웍 시계 (타임 프로토콜) avrtools 2006/03/07 (화) 376 0
16 RS-232 to 100 MHz RF desktop avrtools 2006/03/07 (화) 238 0
15 AVR 6디지트 50MHz 주파수 카운터 leeky 2006/03/07 (화) 215 0
14 AVR DS1820 온도센서 avrtools 2006/03/07 (화) 252 0
13 AVR 직접주파수 발생기 (AT90S2313 DDS) avrtools 2006/03/07 (화) 374 0
12 프로그래머블 PLL 제어 avrtools 2006/03/07 (화) 223 0
11 AVR AT90S2313 7Segment LED Display leeky 2006/03/07 (화) 219 0
10 TINY15L 무전원 4채널 온도계 avrtools 2006/03/07 (화) 317 0
9 8PIN AVR을 사용한 풀컬러 LED leeky 2006/03/07 (화) 358 0
8 DS1820 고분해능 온도계 avrtools 2006/03/07 (화) 335 0
7 S2313 디지털 전압계 avrtools 2006/03/07 (화) 452 0
6 S2313 적외선 USB 모듈 avrtools 2006/03/07 (화) 319 0
5 S2313 주파수 카운터 avrtools 2006/03/07 (화) 257 0
4 AVR90S2313과 Treva 카메라의 연결 leeky 2006/03/07 (화) 302 0
3 Mega8 PID 온도제어 leeky 2006/02/24 (금) 536 1
2 90S2333 3채널 다이오드 온도계 avrtools 2006/02/24 (금) 244 0
1 AT89S8252로 만드는 1~40MHz DDS leeky 2006/02/14 (화) 315 0
1

바구니 : 0
 보관함 : 0
오늘뷰 : 0
HOME   |   회사소개   |   제휴안내   |   회사위치   |   서비스이용 약관   |   개인정보 보호정책   |   사이트맵
17015 경기도 용인시 기흥구 동백중앙로16번길 16-25, 508호. 전화 : 031-282-3310
사업자 등록번호 : 697-47-00075 / 대표 : 이건영 / 업태 : 제조업 / 종목 : LED조명, LED전원, 제어장치.
개인정보 관리책임자 : 홈페이지 관리자 . Copyright ⓒ2016 아크레즈 (ACLEDS INC.)
HOME TOP PREVNEXT 0 0 0