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








 게시판 검색





 
 
회원등록 비번분실


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

      거래은행 바로가기
 
  AVR Applications
AVR 자료실
작성자 leeky        
작성일 2007/02/25
첨부#1 mifare_classic_spec.pdf (0KB) (Down:252)
첨부#2 rfid_system_develope.jpg (0KB) (Down:116)
Link#1 (Down:75)
ㆍ추천: 1  ㆍ조회: 1517   
  ISO 14443A RFID 카드의 읽기/쓰기 방법

13.56MHz RFID 태그는 의류, 주류, 가구, 차량, 사원증, 회원증, 학생증, 교통카드까지 폭넓게 사용되고 있다.
새로운 13.56MHz RFID Reader IC의 데이터를 입수해서 RFID 카드의 태그를 읽으려 했으나,
3종류의 카드를 지원한다는 IC의 사용 설명서가 다른 IC와 비교하면, 필요한 내용들이 많이 부족했다,

대부분의 세컨소스 IC 들의 자료는, 어차피 작동원리는 자신들의 설계가 아니므로,
자신들이 생산하는 IC에 대한 대한 기본적인 설정은 물론, 상세한 설명이 전혀 없으며,
특히 RFID 카드의 작동과 연계하여 읽기장치에서 태그로 나가는 명령과
실제의 처리수순에 대해서 자료를 지원하지 않는다.
.
13.56MHz용 RFID 태그의 호출에서 활성화까지의 하드웨어의 규격과 처리방법은 FCD-14443-3에 있다.
또한 활성화된 이후의 RFID 태그의 데이터 읽기, 쓰기에 대한 소프트웨어의 규격과 처리방법은 FCD-14443-4에 있다.
읽기장치를 설계하려면, 먼저 읽기장치의 하드웨인 읽기장치 전용칩이나 인터페이스를 파악해야 하며,
읽기장치의 전용칩을 제어하려면, 먼저 RFID 읽기장치에 사용되는 RFID 태그의 제어방법을 알아야 한다.
.
모든 태그는 대기(IDLE) -> 준비(READY) -> 선택(SELECT) -> 활성(ACTIVE) 혹은 정지(HALT) 상태를 가진다.
읽기장치의 REQA 명령으로 부터 IDLE 상태의 태그는 짧은 UID인 ATQA로 응답하여 READY 상태로 전환된다,
READY 상태의 태그는 충돌이 없는 경우에 만, 읽기장치로 부터 완전한 UID를 요청받고, 완전한 UID로 응답해서,
읽기장치에서 완전한 UID로 태그를 호출하면 완전한 UID를 받은 태그만이 ACITVE 상태로 간다.  
HALT는 읽기장치가 충돌된 태그를 분리하기 위하여, 읽기장치에서 일시로 정지시킨 태그의 상태이다.
.
● ISO14443과 ISO15693의 차이 (작동거리와 전송속도의 관계를 보라).

 
ISO 14443은 작동거리가 10cm로 짧지만, 전송속도는 106 Kbps이고
ISO 15693은 작동거리가 70cm로 비교적 길지만, 전송속도는 26 Kbps이다
그래서 14433은 인증에 보안이 필요한 출입증, 전자화폐, 교통카드 등에 많이 이용하고
15693은 거리가 멀고, 저장정보가 적은 물류관리에 많이 사용하고 있다. 
 
● REQA, WUPA Frame의 구조
데이터 요청(REQA), 깨우기(WUPA) 틀은 카드의 대기(Idle) 상태나 정지(Halt) 상태에서 카드를 호출하는 유일한 명령이다.
대기 상태는 데이터 요청(REQA) 명령 틀(Frame)을 사용하고, 정지(HALT) 상태는 깨우기(WUPA) 명령 틀을 사용한다.
대기(Idle) 상태는 태그가 전원이 리셋된 다음, 태그가 최초로 명령을 대기하는 상태이며,
정지(Halt) 상태는 충돌방지(Anticollision) 명령으로, 정지 상태로 들어간 태그의 상태이다.
.
Request Guard Time은 발진 클럭을 7000 Cycle을 지연한다.
읽기장치에서 태그로 송신되는 REQA 명령은 0x26이며, WUPA 명령은 0x52이다.
FCD-14443-3 표준에 의한 명령의 포맷은 1 Start 비트 + 7 Data 비트 + 1 Stop이며 패리티 비트는 없다.
  

REQA 명령에 의해 ATQA를 응답한 태그는 준비(Ready) 상태로 간다.
태그는 Ready 상태에서 충돌이 없다면 읽기장치의 SELECT 명령으로 Acitive 상태로 간다.
.
● 표준 Frame의 구조
표준 프레임은 데이터를 송수신 하는데 사용한다.
표준 프레임의 포맷은 1 Start 비트 + 8 Data 비트 + 1 Parity 비트 + ,,,,,,, + 1 Stop 비트로 구성된다.
 
 
● Bit 지향의 충돌방지 frame
읽기장치로 가는 마지막 2개의 태그 송신의 다른 비트 패턴으로 부터 충돌이 검출된다.
이 경우에 반송파는 마지막 하나의 비트까지 완전한 부반송파로 변조된다.
비트 지향의 충돌방지 구조는 오직 비트 프레임 충돌방지 루프 기간동안에 사용된다.
그리고 7개의 데이터 바이트로 된 표준 틀의 경우이다.
.
2개의 parts로 분할:
PCD에서 PICC로 송신하기 위한 part 1과
PICC에서 PCD로 송신하기 위한 part 2.    
.
part 1과 part 2의 길이는 다음의 규칙을 이용한다.
규칙 1: 데이터 비트의 합계는 56으로 된다
규칙 2: part 1의 최소길이는 16 데이터 비트로 된다.
규칙 3: part 1의 최대길이는 55 데이터 비트로 된다.
.
당연히, part 2의 최소길이는 1 데이터 비트로 되어야 한다 그리고 최대길이는 40 데이터 비트로 되어야 한다.
분리한 다음 부터는 데이터 바이트 안의 어떤 비트 위치에서도 나타난다, 2개의 경우로 정의된다.
FULL BYTE의 경우 : 완전한 데이터 바이트 다음에 분리. parity 비트는 part 1의 마지막 데이터 비트 다음에 추가된다.
SPLIT BYTE의 경우 : 데이터 바이트 안에서 분리, parity 비트는 part1의 마지막 비트에 추가되지 않는다.
.
다음의 예는 FULL BYTE의 경우와 SPLIT BYTE 경우를 위한 비트 지향적인 정의와  비트송신의 요구이다.  
주: 예는 NVB(비트 번호)와 BCC를 위한 적당한 값을 포함한다 (비트는 LSB 우선으로 순서가 뒤집혀 있다)

 
읽기장치에서 태그로 0x93, 0x40, UID0, UID1을 END 비트를 추가하여 송신한다 (PART1).
(PART1의 크기인 NVB의 값 0x40은 4 바이트 + 0 비트이다/ 패리티는 크기에 포함하지 않으나, 반드시 전송한다)   
태그에서 읽기장치로 START 비트를 추가하여 나머지 UID2, UID3, BCC, END 비트를 전송한다. (PART2).
BCC는 UID 4바이트를 XOR한 값이며, UID CLn의 점검 바이트이다.
.
읽기장치에서 2번째 바이트 다음의 5번째 비트를 잘라서 END 비트를 추가하여 PART1으로 송신한다.
(PART1의 크기인 NVB의 값 0x25는 2 바이트 + 5 비트이다/ 패리티는 크기에 포함하지 않으나, 반드시 전송한다)  
태그에서 읽기장치로 송신하는 PART2의 첫 parity 비트(그림에서 x)는 토막난 3번째 바이트의 Parity이므로 읽기장치에서 무시된다.
 
● CRC_A :
CRC_A 변조와 점검 처리는 ITU-T 권고안 V.41의 2 장에서 정의되었다
다항식의 생성은 점검 비트 x16 + x12 + x5 + 1을 생성하여 사용한다, 초기 값은 0x6363이 되어야 한다.
CRC_A는  데이터 바이트를 추가해야 하며 표준 프레임으로 송신되어야 한다.
.  
주: 다른 설명은 다음의 개조사항을 고려하면 ISO/IEC 3309로 부터 파생된다.
- 초기값은 0xFFFF 대신에 0x6363 이다.
- register 내용은 연산한 뒤에 반전하지 않는다.
.
● 깨우기(WAKE-UP) 명령
깨우기(WAKE-UP) 명령은 읽기장치로 부터 전송되어, HALT 상태로 들어간 태그를 준비(READY) 상태로 되돌린다.
그들은 다음번의 충돌방지와 선택 처리에 참여 되어야 한다. 그림은 요구-프레임 틀 안의 REQA와 WAKE-UP 명령을 보여준다.
 
 
● 충돌방지(ANTICOLLISION) 명령, 선택(SELECT) 명령
이 명령들은 충돌방지 루프 기간에 사용된다. 충돌방지와 수준선택 명령은 다음과 같다.
· 수준선택 코드 = SEL (1 byte) <- SEL는 수준 선택 cascade level CLn으로 규정된다. <- 0x93, 0x95, 0x97
· 비트의 갯수 = NVB (1 byte) <- 유효비트 수(NVB)는 읽기장치에서 송신된 UID CLn의 비트 수로 규정된다.  <- 0x20 ~ 0x70 
· UID CLn의 0 ~ 40 데이터 비트의 유효비트 수(NVB)의 값에 따른다.
.
명령은 준비(READY) 상태로 남아있는 태그에서 충돌방지 (ANTICOLLISION)라고 부른다.
만일 유효 비트 수(NVB)가 UID CLn (NVB='70')의 데이터 비트를 40으로 규정하면,
데이터의 뒤에 CRC_A를 추가하여 전송해야 한다. 이 명령을 SELECT 명령이라고 한다.
.
만일 태그가 완전한 UID를 송신했다면, 그것은 READY 상태로 부터 ACTIVE 상태로 넘어간 것이다.
그리고 완전한 UID의 SAK-응답으로 표시한다. 아니면, 태그는 준비(READY) 상태로 남아 있다.
그리고 읽기장치는 증가된 cascade level의 새로운 충돌방지 루프로 초기화 된다.
.
● 정지(HALT) 명령
정지(HALT 명령)은 4개의 바이트를 가진다. 그리고 표준 틀로 전송되어야 한다.
 
 
만일 태그가 정지(HALT) 프레임의 끝나고, 이후에 1 ms 동안 어떤 변조신호로 응답한다면,
이 응답은 부정(not acknowledge)으로 해석되어야 한다.  
.
● 선택(Select) 수순(sequence)
선택(Select) 수순(sequence)의 용도는 하나의 태그로 부터 UID를 구함이다. 다음의 통신을 위해서 태그(PICC)를 선택한다.
그림은 읽기장치를 위한 초기화와 충돌방지의 흐름도이다
 
 

● ATQA는 데이터 요구 (REQA)에 대한 태그의 응답이다.
요청(REQA) 명령이 읽기장치에서 전송된 다음, 모든 태그는 요청된 REQA에 동기하여,
태그는 충돌방지에 유효한 2개의 데이터 바이트 ATQA를 전송한다. 만일 그것에 여러개의 태그가 응답하면 충돌이 일어날 수 있고,
읽기장치는 요청응답(ATQA) 내부에서 (1)b의 충돌을 복조해야 한다. 이 결과는 모든 ATQA의 논리적 OR이다.
.
비트 프레임 충돌방지를 위한 ATQA의 변조 법칙
 
 
법칙 1 : 비트 b7 과 b8의 코드는 UID의 크기이다 (1배, 2배 혹은 3배).
법칙 2 : b1, b2, b3, b4 , b5의 5개의 비트 중에서 하나의 출력은 충돌방지 비트 틀에서 1로 세트되어야 한다.
그림은 충돌방지 비트 틀을 위한 b7, b8의 코드와 충돌방지 비트 틀을 위한 b1 - b5의 코드이다.
 
 
● 충돌방지(Anticollision)와 선택(Select)
하나의 종속된(cascade) 레벨에서 충돌방지 루프는, 충돌방지 루프에 다음의 알고리즘을 적용해야 한다.
.
◎ 충돌 단계 (유효자계내의 모든 태그를 호출하여 충돌을 검사한다)
단계 1: 읽기장치는 충돌방지 종류와 종속 수준(cascade level)을 위한 코드를 수준 선택(SEL)값으로 배정한다
단계 2: 읽기장치는 값 0x20으로 유효 비트수(NVB)를 배정한다. (주 : 이 값은 읽기장치가 송신할 no part UID CLn으로 정의된다.
         그러므로 이 것은 태그들의 완전한 UID CLn으로 응답한 필드에서 모든 태그 들의 강제(force) 명령이다.)
단계 3: 읽기장치는 수준선택(SEL)과 유효 비트수(NVB)를 송신한다.
단계 4: 자계내의 모든 태그는 그들의 완전한 UID CLn으로 응답해야 한다.
단계 5: 간단한 일련번호를 가진 어떤 태그는, 만일 하나 이상의 태그가 응답하면, 충돌을 일으킨다.
         만일 충돌이 없다면, 단계 6 - 단계 10을 생략한다. (1개의 태그만 허용하는 간단한 읽기장치의 제어이다)
.
◎ 회피 단계 (유효 비트수 NVB로 태그를 선택한다)
단계 6:  읽기장치는 첫번째 충돌 위치를 분간해야 한다 (루프의 진입 초기엔 충돌이 없다, NVB가 증가되면 충돌이 나온다)
단계 7:  읽기장치는 UID CLn의 특정한 유효 비트수로 NVB를 배정한다. (유효 비트수 NVB는 루프를 돌때 마다 1비트씩 증가한다)
         유효 비트수 NVB는 충돌을 일으키기 전에 읽기장치에 수신된 UID CLn의 비트 수이다.
단계 8: 읽기장치는 SEL과 NVB를 송신한다음, 유효비트 NVB 만큼의 UID 비트를 송신한다.
단계 9: 송신된 만큼의 UID CLn이 같은 태그들 만이 UID CLn의 나머지 유효비트분의 UID를 읽기장치로 송신한다.
단계 10: 만일 다음에도 충돌이 일어 난다면, 단계 6에서 9까지 반복해야 한다. 최대 반복 횟수는 32이다.
.
◎ 선택 단계 (완전한 UID를 요청하고, 읽혀진 완전한 40비트 UID를 태그로  전송하여, 태그를 ACTIVE 시킨다)
단계 11: 만일 다음에 충돌이 일어나지 않으면, 읽기장치는 NVB 값을 0x70으로 배정한다.
         (앞으로의 SLE 송신에 사용할 SEL+NVB+UID+CRC에서, 읽기장치가 완전한 UID CLn을 송신한다는 뜻이다)
단계 12: 읽기장치는 수준선택(SEL)과 유효비트수(NVB)를 송신한다, UID CLn의 40 비트가 뒤따른다, CRC_A가 뒤따른다.
         (시작비트+0x93+0x70+UDI0+UID1+UID2+UID3+UID4+CRA_A+종료비트) <- 여기서 SEL 0x93은 선택수준 1이다.  
단계 13: 태그는 읽기장치에서 보내온 완전한 UID CLn의 40 비트가 일치하면 단계 14의 선택응답(SAK)으로 응답한다
단계 14: 만일 UID 처리가 끝나면, 태그는 종속비트(cascade bit)를 지운 SAK를 송신하고, 활성(ACTIVE) 상태로 간다.
단계 15: 읽기장치는 다음의 충돌방지 루프를 종속수준을 증가(0x93 ->0x95)시켜, SEL 틀을 태그로 송신하고
          태그로부터의 받은 선택응답 SAK를 분석하여, 충돌이 모두 해결이 되었는가를 SAK의 종속 비트로 부터 점검해야 한다.
.
마지막 SAK에서 충돌이 검출되지 않으면, 활성(ACTIVE) 상태의 처리로 간다(데이터를 주고 받는 처리)  
만일 태그의 UID가 잘 알려진 것이라면, 읽기장치는 충돌방지 루프없이 단계 2 - 단계 10을 건너 뛸 수 있다.
이제 읽기장치는 태그와 데이터를 주고 받을 수 있다. (UID만 사용하는 경우는 지금까지의 처리로 UID가 구해진다)
.
◎  읽기장치를 위한 충돌방지(Anticollision) 루프(loop)의 흐름도이다
 

 
● 선택  명령의 코드 (Select code)
길이 : 1 byte,  가능한 값 : ‘93’, ‘95’, ‘97’
 

● 유효 비트 수(NVB)의 값
길이 : 1 byte
상위 4비트는 바이트 카운터라고 부른다 그리고 읽기장치는 SEL와 특정한 모든 유효 비트수를 8로 나눈 숫자를 포함하는 NVB를 송신한다.
당연히, 바이트 카운터의 최소값은 2이다 그리고 최대 값은 7이다. (그것은 UID 바이트의 최소 ~ 최대수이다)
하위 4비트는 비트 카운터라 부른다 그리고 읽기장치에서 모든 유효 비트수를 8로 나눈 나머지를 숫자로 송신한다.
.
유효 비트수 NVB의 부호화
 

● 선택응답 SAK의 부호화(coding)
선택응답 SAK는 선택 응답(Select acknowledge)이다. 선택응답 SAK는 태그에서 NVB가 보유한 유효비트가 40일때와
그들의 UID CLn과 모든 데이터 비트가 일치할 때 송신된다. 선택응답 SAK는 표준 프레임으로 송신된다. CRC_A가 따라간다.
그림은 선택 응답 (SAK) 틀의 구조이다.
 

읽기장치는 UID가 완전한지 선택-응답 SAK의 b3 비트를 점검해야 한다. 비트 b3의 부호화와 b6는 다음 표에서 주어진다.
충돌이 없을 때, b3는 종속-수준 1의 선택-응답에서는 1이며, 종속수준 2의 선택-응답에서는 0이 된다.
 
 
만일 UID가 완전하지 않으면, 태그는 READY 상태로 남아 있고, 읽기장치는 종속수준을 증가시킨 새로운 충돌방지 루프로 초기화 해야 한다.
만일 UID가 완전하면, 태그는 종속 비트가 지워진 선택응답 SAK를 송신해야 하고, 준비(READY) 상태에서 활성(ACTIVE) 상태로 간다
태그는 추가 정보(additional information)가 있을 때 선택응답 SAK의 b6를 세트해야 한다, (사용하지 않는 SAK의 나머지 비트는 0이다)
추가정보의 정의는 표준적인 이 단원의 제목이 아니다, 그리고 ISO/IEC 14443-4 에서 정의될 것이다.
(Mifare DesFire 태그는 b6가 1이다(추가정보에 Des 암호처리가 있다). 그러나 Mifrae 1K와 4K Standard 태그는 b6가 0이다.)
.
다음은 SAK 응답에 의한 RFID 태그의 분류방법이다.
 

● UID 내용과 종속 수준(cascade levels)
UID는 4, 7 혹은 10 UID 바이트의 요소이다. 당연히, 태그는 모든 UID를 획득하는 종속수준 3으로 가야 한다.
하나의 종속 수준에서, 5개 바이트로 구성된 UID의 조각은 읽기장치로 송신되어야 한다.
최대 종속 수준에 따라서, 3 종류의 크기의 UID로 정의된다. UID 크기는 다음의 표와 일치한다.
 

UID의 요소를 위해 다음의 정의를 이용한다:
UID의 UID CLn 조각은 종속 수준 n을 따른다, 5 바이트로 구성된 n은 1 ~ 3 이다
UIDn은 UIDn의 #n 번째 바이트이다. n은 0~5 이다
BCC는 UID CLn의 점검 바이트이다, 앞서 전송된 4 바이트의 독점적-논리합으로 계산된다.
CT는 종속 태그‘88’이다
.
UID는 단순히 고정된 숫자(상수) 혹은 태그에서 생성된 변동적인(dynamically) 난수이다.
UID의 첫 바이트 (uid0)는 다음의 UID 바이트의 내용(content)으로 배정(assign) 된다.
1배 크기의 UID에서는 uid0을 위한 종속태그 CT 의 값 '88' 을 사용하지 않는다.
 

2배 그리고 3배 크기의 UID들 :  ISO/IEC 7816-6/AM1 안에서
값 '81' 에서 'FE' 까지는 개인적으로 사용하기 위해 표시된다.  
  

종속 수준 cascade levels의 용도
 
주: cascade tag의 용도는 간단ID(UID)로 응답하는 태그들의 강제적인 충돌 발생이다.
당연히 UID0 아니면 UID3 중에서 cascade tag의값을 가지게 된다.
다음의 알고리즘은 읽기장치를 이용하여 완전한 UID를 구한다
.
단계 1: 읽기장치를 종속 수준l 1으로 선택한다
단계 2: 충돌방지(anticollison) 루프를 실행해야 한다.
단계 3: 읽기장치는는 SAK의 종속 비트를 점검해야 한다
단계 4: 만일 종속 비트가 세트되면, 읽기장치는 종속 수준을 증가시켜야 하고, 새로운 충돌방지 루프로 초기화 해야 한다.
단계 5: 태그가 완전한 UID로 선택 되었다면 종속 비트를 지우고,  준비 상태에서 활성 상태로 가는 선택 응답을 송신해야 한다.  
.
● 만일 읽기장치에서 Mifare (ISO 14443) 카드의 active field를 입력하려면,
먼저 읽기장치와 카드사이의 연결통신의 수립을 어떻게 하는지 생각해야 한다.
이 용도를 위한 명령세트는 같은 시간에 읽기장치의 active field와 함께 하나 이상의 카드를 계정으로 갖는다.    
그리고 이미 진행중인 카드와 이미 활성된 다른 카드와 함께 통신한다.
.
● 그림1. Mifare RFID 카드의 명령 상태도(state machine).
 
 
● 명령 상태도의 설명
만일 카드 수신이 읽기장치의 고주파 자계로 부터 에너지가 부족하면, 카드는 작동적으로 대기 상태로 들어 간다.
읽기장치와 다른 카드사이의 통신 인터페이스는 무시된다.
대기(idle)일 때에 카드는 응답 요구(REQA)와 깨우기(WUPA)에 만 응답한다.
만일 카드로 REQA 혹은 WUPA 명령이 수신되면, ATQA 블록을 송신하여 응답하고 준비(Ready) 1 상태로 간다.
오랜시간 동안 읽기장치에 어떤 ATQA 블록도 수신되지 않는다면,
매 5ms 동안 유효자계 안에서 ATQA 혹은 WUPA 명령을 송신하는 새로운 카드를 등록한다.
.
만일 읽기장치가 ATQA 블록을 수신하면, 첫 충돌방지 명령의 송신으로 충돌방지 루프를 초기화 한다.
만일 카드들이 ATQA 혹은 WUPA로 응답 한다면, 데이터 충돌을 일으키는 충돌방지 처리는 불필요하다.
충돌방지 처리는 모든 카드들이 송신한 여러 카드들 중에서 하나를 선택 명령 SEL로 사용한다.
하나의 카드 응답은 그들의 4 바이트 일련번호 송신에 의해 충돌방지 명령으로 응답한다.
.
카드는 Mifare 카드의 표준에서 찾을 수 있는 4 바이트 일련번호와 함께 실제로 7 바이트의 일련번호들이 사용된다.
예를 들면 Mifare UltraLight 카드는, 공급자 바이트 0x88을 포함한 7 바이트의 일련번호를 가지고 있으며,
이 바이트 ID는 7 바이트 일련번호이다. 각각의 카드의 일련번호는 모두 틀리므로, 1 비트의 위치에서 충돌할 것이다.
하나의 카드에  다른 카드로 부터의 1이 혼입된 0 비트는 충돌 되었다는 뜻이다.  
.
● 그림 2. 충돌 검출의 원리
ISO/IEC 14433-A 호환 카드에 사용되는 Manchester 데이터 변조의 작동원리와 카드의 응답으로 혼합 변조된 신호
 

충돌검출은 기준펄스폭 보다 크면 충돌 이며 작으면 정상으로 처리한다.
(충돌: 수신펄스폭 >8 ,  정상: 수신펄스폭 <7 )  
.
● 충돌방지 명령.
그림 2에서 충돌은 비트 위치 3A이다. 읽기장치의 IC 복조기는 충돌을 검출하여 찾을 수 있다.
읽기 장치는 새로운 ANTICOLLISION1 송신으로 충돌에 응답한다.
이 ANTICOLLISION 명령은 충돌비트의 위치까지 모든 일련번호 비트들을 포함한다.  
충돌이 일어난 곳에서 0 혹은 1로 정해진 비트에 의해서, 충돌된 비트의 위치에 특정화 된 값으로 읽어 진다.
.
각각의 카드는 카드에 저장된 일련번호와 함께 수신된 일련번호의 부분을 비교한다.  
어떤 카드는 수신된 위치에 일치하지 않는 송신된 제조자 일련 번호의 일부는 자동적으로 잃게 되고 Idle 상태로 돌아 간다.
남은 카드는 그들의 일련번호의 첫 4 바이트의 송신에  동기하여 다시 응답한다.
이 처리는 읽기장치가 어떤 충돌도 없이 완전한 일련번호를 수신할 때 까지 반복된다.
.
● 그림 3. RFID 카드의 완전한 activation 수순(sequence)
 

이 후, 읽기장치는 SELECT1 명령을 송신하면 카드는 Ready2 상태로 간다.
카드는 SAK(선택 응답) 바이트의 송신으로 응답한다. 이 바이트는 Mifare 카드가 가진 7 바이트의 일련번호를 읽기장치에 알려준다.
ANTICOLLISION2와 SELECT2 명령의 수순은 ANTICOLLISION1과 SELECT1과 같은 틀을 따른다.
Active 상태를 바꾸거나 SAK 바이트의 재송신으로 확인한다.
.
Active 상태에서, 카드안의 EEPROM은 READ와 WRITE 명령을 써서 읽기와 쓰기 작동을 위해 호출할 수 있다.
HALT 명령은 메모리 작동이 성공적으로 끝낫을 때, 마지막으로 카드에 보내는 명령이다.
정지(Halt) 상태이면 WUPA 명령으로 활성화 될 수 있다. 혹은 태그가 재 접속되면 처음 부터 다시 시작할 수 있다 

다음 그림은 ISO 14443-3 표준을 참고하여 만든, 13.56MHz RFID 읽기장치에서 전송하는 데이터이다.
 
 
RFID 읽기장치에 시험한 카드는 Phillips 사의 Mifare 1K Classic 카드이다. (ISO 14443A 표준 태그이다)
Mifare 1K Classic 카드의 ATQA의 수신 데이터는 2 바이트이며 0x04 0x00 이다. (태그의 고유값이 들어 온다)
LSB 우선으로 들어 오므로 실제 값은 0x0040 이다. UID 또한 LSB 부터 들어오므로, 최종값을 표시할 때는 주의해야 한다.
그러나 내부 처리는 LSB 우선으로 들어 오고, LSB 우선으로 인증 처리하므로 마지막 표시 직전까지는 그대로 두어도 된다.
Mifare 1K Classic 카드의 UID의 5 번째 바이트는 UID 바이트 4개의 BCC이다. (UID에 포함되어 들어 온다)
Mifare 1K Classic 카드의 SAK의 수신 데이터는 1 바이트이며 0x08 이다. (카드의 고유값이 들어 온다)
.
RFID 태그가 활성화된 이후의 데이터 읽기, 쓰기에 대한 소프트웨어의 처리방법은 FCD-14443-4에 있다.
FCD-14443-1.PDF : 물리적 특성
FCD-14443-2.PDF : 무선 주파수 전력과 신호처리
FCD-14443-3.PDF : 초기화와 충돌방지
FCD-14443-4.PDF : 전송 방식 (Mifare 1K  Classic은 이 표준을 따르지 않는다)
.
필립스사의 Mifare 1K  Classic 태그는 인증절차 없이 데이터를 읽거나 쓸 수 없게 되어 있다,
또한 인증은 4개의 Block 마다 별도로 인증하므로, 4개의 Block 마다 다른 용도로 사용이 가능하다.
블록 0는 일반적인 읽기/쓰기 장치로는 바뀌지 않는, 태그마다 틀린 고유의 ID가 들어 있는 영역이다.
그러므로 0섹터의 0블록은 읽기전용이다. 그러나 0 섹터의 1~3 Block은 읽기/쓰기가 가능하다.
.
1섹터는 4개의 Block으로 구성되며,  1 블록은 16 바이트로 읽기/쓰기가 가능한 영역이다.
다음은 RFID 읽기장치에서 Mifare 1K  Classic 태그로 나가는 제어 명령이다.
이 명령들은 읽기장치가 SAK를 수신하고, 태그가 Active상태로 들어간 다음,
Mifare 1K Classic 태그의 고유한 인증(Authent) 절차을 완료해야만, 명령이 태그로 들어 간다.
.
#define MIFARE_AUTHENT_A 0x60     // AUTHENT A command
#define MIFARE_AUTHENT_B 0x61     // AUTHENT B command
#define MIFARE_READ      0x30        // READ command
#define MIFARE_WRITE     0xA0        // WRITE 16 bytes command
#define MIFARE_WRITE4    0xA2        // WRITE 4 bytes command
#define MIFARE_INCREMENT 0xC1      // INCREMENT command
#define MIFARE_DECREMENT 0xC0     // DECREMENT command
#define MIFARE_RESTORE   0xC2      // RESTORE command
#define MIFARE_TRANSFER  0xB0      // TRANSFER command
#define MIFARE_NOCOMMAND 0x00   // no MIFARE command 

 
 
Mifrea 1K 태그의 메모리는 16 Bytes의 블록 4개를 1Sector로 구성되는 합계 1024 Bytes/16 Sector이다.
각 영역(sector)의 4번째 뭉치 (block 3)는 항상 그 영역의 호출제어(access control) 뭉치이다,
각 영역(sector)의 0 ~ 2 뭉치(block)는 해당 영역(sector)의 데이터 block이다, 

 
 
제조자 Block은 영역(sector) 0의 뭉치(Block) 0 이며, 읽기전용으로 크기는 16 바이트이다.
처음의 4 바이트는 일련번호인 UID이며,
다음은 BCC로 1바이트, 그다음이 10 바이트의 제조자 데이터이다.
실지로 BCC는 UID에 포함하여 5바이트로 Select 절차와 인증절차에 포함된다.
(이 BCC는 별도로 생성하지 않고 수신된 5 바이트 UID의 마지막 바이트로 처리한다).
.
[img:mifare_1k_block3.gif,align=,width=487,height=113,vspace=0,hspace=0,border=0]
호출제어(access control) 는 처음의 6 바이트인 KEY A는 읽을 수 없으며,
읽기장치에서 태그로 쓰기만 한다,
태그는 읽기장치에서 보내 온 KEY A가 일치해야 호출제어가 된다.
마지막 6 바이트인 KEY B는 읽거나 쓸 수 있으며,
4바이트로 된 호출제어 비트인 ACB에 따라 작동한다.
즉 인증절차를 마친 태그는 읽기장치에서 보내온, 6 바이트 KEY A가 일치하면,
4 바이트 ACB 와 6 바이트 KEYB로 제어된다. 

 
 
16 바이트(00~15)의 데이터 뭉치는, 각 영역의 0~3 번 뭉치이며, 호출제어 뭉치로 쓰거나 읽을 수 있다. 


 
Value 뭉치는 3번을 써야 하며, 2번은 비반전, 1번은 반전된 4 바이트 값을 Value, /value, value에 쓰고
마지막으로 4 바이트의 주소는 1바이트씩 4번을 써야 하며, adrs, /adrs, adrs, /adrs로 구성된다. 

 
 
Mifare 1K Classic 태그의 작동 절차는 그림과 같다.

Mifare 1K Classic 태그의 인증절차
Mifare 1K Classic 태그의 인증절차는 ISO 14443-4의 표준을 따르지 않으며,
Phillips사의 독자적인 보안절차를 따른다.
그러나 RC632등 NXP에서 생산하는 13.56MHz Mutilmode RFID Reader를 사용하면,
IC 내부에서 인증절차를 진행한다.
시용자는 단순히 RFID 카드의 그룹이 사용하는 KEY_A를 알고 있으면,
 RFID 태그를 읽거나 쓸 수 있는 인증이 이루어진다.
.
NXP사의 RC632에서 사용하는 인증절차를 설명한다.
일단 태그는 REQA로 호출되고, ATQA로 응답하여,
SELECT절차가 마무리되면 SAK를 발행한다,
정상적인  Mifare 1K Classic 태그의 SAK는 0x08 이며,
이 상태가 Active 상태이며, 다음 단계는 Authent이다.
NXP사의 RC632의 Authent는 Crypto1 이라고 하며,
IC의 내부에 Crypto1 Module을 내장하고 있다.
.
먼저 인증을 하는 읽기장치는 알고 있는 KEY값을 RC632에 전송한다,
Loadkey 명령은 0x19이다.
RC632의 Comannd Register에 0x19를 써 넣고,
6 바이트 대칭(상호 공통) Key A를 12개의 니블로 분할하고 섞어서,
12 바이트의 Key 값으로, LSB부터 RC632의 FIFO에 써 넣으면,
RC632 내부의 Key Buffer에 저장된다.
.
6 바이트 (48 비트)의 Key A값이 0xA0(MSB), 0xA1, 0xA2, 0xA3, 0xA4, 0xA5(LSB) 라고 한다면,
0x0A, 0x00, 0x0A, 0x01, 0x0A, 0x02, 0x0A, 0x03, 0x0A, 0x04, 0x0A, 0x05로 4비트씩 나누고,
12개의 4비트 니블의 값을 뒤집어 상위 4비트를 생성하여 1 바이트로 확장하면
(서로 보수관계의 니블로 구성된 바이트가 됨)
0x5A, 0xF0, 0x5A, 0xE1, 0x5A, 0xD2,  0x5A, 0xC3,  0x5A, 0xB4, 0x5A. 0xA5 가 만들어 진다.
.
이것은 일반적인 대칭키 방식의 Stream Cipher 복호 처리를 위한 1단계의 Decrypt 준비 절차이다.
Mifare 1K Classic 태그의 48 비트 Key_A 값은 아래와 같이 사전에 96 비트 Key_A 로 확장해야 한다.
A0 -> 5A F0 = 0101 1010 1111 0000
A1 -> 5A E1 = 0101 1010 1110 0001
A2 -> 5A D2 = 0101 1010 1101 0010
A3 -> 5A C3 = 0101 1010 1100 0011
A4 -> 5A B4 = 0101 1010 1011 0100
A5 -> 5A A5 = 0101 1010 1010 0101
.
다음은 Authent1 명령 0x0C 를 RC632의 Command에 저장하고,
FIFO에 태그 Authent 명령, 태그 Block Address,
사전에 Slect된 태그 UID0~UID3 을 전송하면,
RC632는 이 태그명령 6 바이트를 태그로 전송한다음, Crypto1을 수신한다.
수신된 Crypto1과 사전에 확장된 12 바이트 KEY A를
Crypto1 Module에서 Stream crypto1을 만들어 대기한다.
수신된 Crypto1은 MPU로 전달하지 않으며,
RC632 내부의 Crypto1 register에 저장된다.
.
마지막으로 Authent2 명령 0x14를 RC632의 Command로 전송하면,
태그는 인증절차가 끝나고 읽기/쓰기로 들어간다.
이명령은 MPU에서 RC632로 어떤 데이터도 전송하지 않으며,
LoadKey로 준비된 12 바이트 KEY A와 Authent1으로 태그에서 수신한 Crypto1을
Crypto1 Module에서 Decripted KEY A를 태그로 송신한다.
Decrypted KEY A를 수신한 태그는 인증키가 자신이 발행한 Crypto1과
상대의 KEY A 값이 정상적으로 Decrypted 된 값인지 확인되면,
Crypto1On을 읽기장치로 송신하고, 인증(Authent) 상태로 들어 간다.            
.
만일 NXP의 RC632를 사용하지 않는 읽기장치에서,
Mifare 1K classic 태그를 인증상태로 만들어야 한다면,
Authent1과 같은 절차로 태그에서 수신한 Crypto1과
12 바이트의 Expanded Key A를 MPU에서 Stream Cipher 처리를 한다,
Stream Cipher 처리는 12 바이트의 Expanded Key A 값을
Crypto1 값과 Bit Stream 연산(기본은 XOR)을 해야 한다.

(처리방법은 비공개 상태이다,
원리 및 처리 방법은 ISO8731-1 표준과 대칭키 Stream Cipher Algolithm을 참조하라)
이 결과를 0x60, Block Address, Decripted Key, UID 4 바이트를 태그로 전송하여,
태그를 인증상태로 만들어야 한다.
.
현재 까지 알려진 Mifare 1K Classic 태그의 Crypto1 값은,
난수와 내장된 KEY_A를 가지고 만든 4 바이트 출력이다,
이 4 바이트 출력에 내장된 UID의 BCC 1 바이트가 추가되고,
최종 Crypto1 출력은 5 바이트로 읽기장치에서 수신된다.
읽기장치는 6 바이트 KEY_A를 12 바이트로 확장하고,
태그에서 수신된 Crypto1 값과 Stream 처리하여 인증키를 만든다,
마지막으로 태그로 나가는 인증키를 만드는 Stream Cipher 처리장치는
LFSR에 의한 비트 Stream EX-or로 알려진 회로이다.
이렇게 만들어진 인증키는, 마지막 인증절차인 Authent2 포맷
(태그제어 명령 + 블록주소+ 인증키)으로 태그에 전송된다.
.
Crypto1은 대칭 암호키(symmetric cipher) 방식으로 암호(Encription)과
복호(Decryption)에 사용하는 LFSR이 동일한 인증 방식이다.
아래의 Crypto1 방식의 암호인증 신호 흐름도를 보라.
 

(암호키의 처리방법을 보호하기 위해, 소프트웨어로 읽혀지지 않토록, LFSR은 논리회로를 사용한다.)

Encrypto나 Decypto용 LFSR은 초기화 값이 있으며,
대부분 암호장치의 LFSR은 의사난수 값을 발생하는 구조라고 한다.
  
또한 인증용 KEY_A의 보안을 위해 NDA(비밀 준수 계약)를 체결해야,
판매할 14433 태그의 KEY_A 값을 장치 제조회사에 알려준다.
 
Mifare 1K Classic 태그의 Authent 1 에서 Authent 2 까지의 Crypto1 인증절차는 아래와 같다.
난수발생 -> 태그 LFSR (KEY_A로 초기화) -> 암호키 (Crypto1) -> RFID 인터페이스 ->
-> 읽기장치 LFSR (KEY_A로 초기화) -> Authent2 (태그 제어 + 블록주소 + 인증키 출력) ->
-> RFID 인터페이스 -> 인증키 -> 일치판정 -> 태그의 읽기/쓰기 승인상태
 
참조 1: ISO/IEC FCD 14443-3 Committee identification: ISO/IEC JTC1/SC17/WG8, 저자 :  D. Baddeley
참조 2: Elektor RFID Reader (Elektor Electronics 2006), 저자 : Gerhard H. Schalk
참조 3: Phillpis Semiconductor Mifare 1K Standard : http://www.nxp.com/
참조 4: Phillpis Semiconductor CL RC632 Multiple Protocol Contactless Reader IC Product Specification 

원저자 : http://www.nxp.com/
AVRTOOLS™
   
이름아이콘 avrtools
2007-09-18 15:45
 이 자료의 질문은 여기에서 해 주십시요
   
 
윗글 ATmega16 RFID #1 태그
아래글 ATmega8 PSK31 RF Modem의 제작
    N         제목    글쓴이 작성일 조회 추천
AVR 자료실 안내 avrtools™ 2008/09/02 (화) 302 0
97 AVR Basic Compiler (4K Free) avrtools™ 2008/12/03 (수) 218 0
96 코드비젼 V2.05.0 평가판 avrtools™ 2011/07/17 (일) 152 0
95 8x8 LED Audio Spectrum Display avrtools™ 2009/10/18 (일) 262 0
94 AVR 펌웨어로 만드는 USB 드라이버 avrtools™ 2009/10/07 (수) 450 0
93 AVR-CDC and V-USB avrtools™ 2009/10/06 (화) 233 0
92 AVR USB-HID-Bootloader의 제작 avrtools™ 2009/10/01 (목) 268 0
91 AT91SAM7S256 개발환경과 컴파일러 [2] avrtools™ 2008/11/03 (월) 2193 0
90 SAM7S256 USB 드라이버와 AT91-ISP avrtools™ 2008/11/01 (토) 1180 0
89 AT91SAM7S256 공부를 시작합니다. avrtools™ 2008/11/01 (토) 597 1
88 ICCAVR V7.16A AVR 컴파일러 45일판 avrtools™ 2009/03/09 (월) 149 0
87 CodeVisionAVR1248b 最新版下载 leeky 2008/11/08 (토) 313 0
86 AVR UART 소스 (ICC AVR V6) avrtools™ 2008/12/03 (수) 199 0
85 cvAVR Soft Uart Source avrtools™ 2008/12/03 (수) 161 0
84 cvAVR 직렬포트와 LCD 시험용 소스 avrtools™ 2008/12/03 (수) 159 0
83 Free SmallC for AVR avrtools™ 2008/12/03 (수) 181 0
82 AVR910-ISP용 AVR-OSP2 Ver5.43 avrtools™ 2008/12/03 (수) 191 0
81 Code Vision AVR 컴파일러 2K 데모버전 avrtools™ 2008/12/02 (화) 114 0
80 AVR delay loop generator avrtools™ 2008/12/02 (화) 166 0
79 ICC tiny C컴파일러 V6 데모버전 (30일 제한판) avrtools™ 2008/12/02 (화) 89 0
78 ICC AVR C 컴파일러 V6 (4K 제한판) avrtools™ 2008/12/02 (화) 101 0
77 DasmAVR (Windows용 AVR 역어셈블러) avrtools™ 2008/12/02 (화) 155 0
76 AVR PROG KIT avrtools™ 2008/12/02 (화) 196 0
75 AVR JTAG ICE KIT avrtools™ 2008/12/02 (화) 277 0
74 AVR 부동소수점, 지연시간 계산기 avrtools™ 2008/12/02 (화) 186 0
73 ATtiny45 USB to RS232 인터페이스 avrtools™ 2008/09/26 (금) 215 0
72 MEGA32 128x64 GLCD Scope 제작 avrtools™ 2008/09/22 (월) 320 0
71 PC송신방식 Tiny2313 50x7 LED 전광판 avrtools™ 2008/09/10 (수) 279 0
70 mega8 적외선 거리측정 레이더 leeky 2006/05/07 (일) 1397 0
69 ATmega16 RFID #3 소프트웨어 leeky 2006/12/27 (수) 906 0
68 ATmega16 RFID #2 하드웨어 leeky 2006/12/27 (수) 1154 0
67 ATmega16 RFID #1 태그 leeky 2006/12/27 (수) 884 0
66 ISO 14443A RFID 카드의 읽기/쓰기 방법 [1] leeky 2007/02/25 (일) 1517 1
65 ATmega8 PSK31 RF Modem의 제작 leeky 2006/03/07 (화) 1401 21
64 T89C51SND1C 64M USB MP3 플레이어 avrtools 2006/03/04 (토) 998 8
63 AVR 13.56MHz RFID 읽기/쓰기 장치의 제작 [7] leeky 2007/02/19 (월) 1055 4
62 WhereAVR for APRS GPS/Telemetry avrtools 2006/05/05 (금) 416 2
61 ATmega8 UI-TNC 무선모뎀의 제작 avrtools 2006/03/07 (화) 419 0
60 AVR APRS(GPS) Packet 무선모뎀 avrtools 2006/03/07 (화) 407 0
59 AT90PWM3 교류모터 속도제어 leeky 2006/04/07 (금) 957 1
58 M128 MMC LED 전광판 leeky 2006/03/07 (화) 945 0
57 Charon 2 이더넷 모듈의 소개 avrtools 2006/04/04 (화) 503 0
56 S2313 LED 회전계 (TACHO METER) avrtools 2006/03/28 (화) 622 0
55 Mega8 + 128x128 LCD 스코프 avrtools 2006/03/28 (화) 1211 0
54 Mega8 + OV6630 Treva 모바일용 카메라의 화상처리 leeky 2006/03/19 (일) 806 0
53 YUKI Mega8 MP3 Player #3 avrtools 2006/03/11 (토) 856 0
52 AVR JTAG 에뮬레이터의 제작 avrtools 2006/03/07 (화) 868 0
51 USB AVR 프로그래머 AvrUsb500 avrtools 2006/03/07 (화) 754 1
50 Mega88 USB 버스 모니터 avrtools 2006/03/07 (화) 411 0
49 M16 MMC Flash Memory leeky 2006/03/07 (화) 471 1
48 M163 SD,MMC Interface leeky 2006/03/07 (화) 456 0
47 S2313 MMC to Serial leeky 2006/03/07 (화) 341 0
46 ATmega48 UDP/IP 적외선 리모콘 수신장치 avrtools 2006/03/07 (화) 434 0
45 HDD MP3 플레이어 leeky 2006/03/07 (화) 622 0
44 MP3 yampp-3/USB leeky 2006/03/07 (화) 314 0
43 MP3 Player yampp-3 leeky 2006/03/07 (화) 280 0
42 YUKI MP3 플레이어2의 제작 (ATmega8 + SD Card) avrtools 2006/03/07 (화) 401 0
41 AVR CD 플레이어 leeky 2006/03/07 (화) 557 0
40 S2313 초음파 거리계 (미터, TV 스크린, LED 표시) avrtools 2006/03/07 (화) 568 0
39 RF Spectrum Monitor avrtools 2006/03/07 (화) 405 0
38 Easy Ethernet AVR 웹서버 leeky 2006/03/07 (화) 470 0
37 90S4433 LCD표시 100Mhz 주파수 카운터 leeky 2006/03/07 (화) 274 0
36 ELM Audio Spectrum Monitor avrtools 2006/03/07 (화) 378 0
35 Mega8 Door Bell leeky 2006/03/07 (화) 302 0
34 AVR 휴대용 DVM leeky 2006/03/07 (화) 521 0
33 Minimum Mass Waveform Capture and Display leeky 2006/03/07 (화) 285 0
32 AT90S2313 디지털 용량계 avrtools 2006/03/07 (화) 390 0
31 SLO2016 Alphanumeric Intelligent Display leeky 2006/03/07 (화) 196 0
30 AT90S2313 흔드는 LED 전광판 (POV) leeky 2006/03/07 (화) 449 0
29 ATtiny2313 Scrolling LED Sign avrtools 2006/03/07 (화) 385 0
28 Tiny22,S1200 나이트 라이더 avrtools 2006/03/07 (화) 327 0
27 ATtiny26L의 AD 변환과 PWM 출력제어 leeky 2006/03/07 (화) 528 0
26 S2313을 사용한 DS1820 온도계 leeky 2006/03/07 (화) 289 0
25 ATmega8535 온도센서 leeky 2006/03/07 (화) 317 0
24 AVR2313 100MHz RF연결 주파수 측정메터 avrtools 2006/03/07 (화) 218 0
23 VHF 무선 데이터 송신기 leeky 2006/03/07 (화) 524 0
22 90S2313 1MHz 파형 포착기 leeky 2006/03/07 (화) 247 0
21 VHF 무선 데이터 수신기 avrtools 2006/03/07 (화) 395 0
20 AVR 5x7 Dotmatrix LED leeky 2006/03/07 (화) 260 0
19 Mega163 웹 LCD leeky 2006/03/07 (화) 414 0
18 AVR 이더넷 시험소프트 avrtools 2006/03/07 (화) 324 0
17 AVR 넷트웍 시계 (타임 프로토콜) avrtools 2006/03/07 (화) 393 0
16 RS-232 to 100 MHz RF desktop avrtools 2006/03/07 (화) 257 0
15 AVR 6디지트 50MHz 주파수 카운터 leeky 2006/03/07 (화) 238 0
14 AVR DS1820 온도센서 avrtools 2006/03/07 (화) 270 0
13 AVR 직접주파수 발생기 (AT90S2313 DDS) avrtools 2006/03/07 (화) 408 0
12 프로그래머블 PLL 제어 avrtools 2006/03/07 (화) 245 0
11 AVR AT90S2313 7Segment LED Display leeky 2006/03/07 (화) 238 0
10 TINY15L 무전원 4채널 온도계 avrtools 2006/03/07 (화) 342 0
9 8PIN AVR을 사용한 풀컬러 LED leeky 2006/03/07 (화) 383 0
8 DS1820 고분해능 온도계 avrtools 2006/03/07 (화) 353 0
7 S2313 디지털 전압계 avrtools 2006/03/07 (화) 474 0
6 S2313 적외선 USB 모듈 avrtools 2006/03/07 (화) 338 0
5 S2313 주파수 카운터 avrtools 2006/03/07 (화) 276 0
4 AVR90S2313과 Treva 카메라의 연결 leeky 2006/03/07 (화) 330 0
3 Mega8 PID 온도제어 leeky 2006/02/24 (금) 707 1
2 90S2333 3채널 다이오드 온도계 avrtools 2006/02/24 (금) 261 0
1 AT89S8252로 만드는 1~40MHz DDS leeky 2006/02/14 (화) 330 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