본문 바로가기
코스웨어/15년 스마트컨트롤러

20151208_RFID #1 _이량경

by 알 수 없는 사용자 2015. 12. 9.
728x90
반응형
<RFID>✔ 

================================================================


< 프로토콜 시리얼>

..시리얼에 흘리면 시리얼 프로토콜, 네트워크에 흘리면 네트워크 프로토콜
> 규약 프로토콜
> 절차.procedure (프로시저) : 프로토콜의 포괄적 내용을 담고있다.

* 시리얼 프로토콜 
> 펌웨어 고정되어있음.
> 녹색판 : 안테나

> 안테나 연결선으로 신호가 나감. 

* Radio 뤠디오(호주식) Frequency
> 녹색판위에 LCD달고 녹색판뒤에 칩을 달면 교통카드단말 Radio Frequency장비다.

* Wireless(와이어리스)
> 미국에서는 무선(Wireless) 이라는 의미다. RF가 더 포괄적이다. 와이어리스는 가정에서 선을 없앴다는 뜻이다.

> 우리가 생각하는 뜻은 와이어리스 커뮤니케이션 개념으로 무선통신을 말한다..그래서 RF가 더 명확
> 무선으로 통신하는 장치의 통칭 : RF
> 전파쪽에서 온 용어다.


예를들어)
..모기가 60층 모기 엘베탓다(묻어간다)/모기를 운반 한 엘베=물건을 운반하기 위해서 필요한 엘베

RF 참고도서)..RF아날리시스 책 

* 무선주파수
> 케리어 주파수를 말함.

* 케리어 주파수 
> 데이터를 운반하기위해 부가적으로 필요한 요소.주파수가 올라가면 많은 양의 데이터를 한방에 보낼 수 있다.

예를 들면) 와이파이 2.4G/ 5G 

> 전파속도는 같다(빛의속도) 한방에 많은 양을 보낸다.=빨리 보낸다.

> 케리어 주파수에 데이터를 실는것     : Modulation(=변조)라고 한다.
> 케리어 주파수에서 데이터가 내리는것 : DeModulation(복조)

> 가로세로 길이는 같으나 진폭변조/ 주파수변조가 다르다. 
> 변조 : 주파수를 바꾸는것
> 변조를 섞으면 한꺼번에 4bit를 보낼수 있다.

예) 소리가 날카롭다 : 촘촘. <-> 느슨. 
1: 촘촘 작음. 2. 느슨 큼 3. 촘촘 큼 4. 느슨 작음 으로 4bit를 보낼수있다.
> 데이터를 보내는 방식이 다르다. 


> 13.56M 카드 / 13.56M RFID / 13.56M 1334데이터시트 / 13.56M 버스
> 안에 넣은 데이터 타입(변조)에 따라 내용스팩이 바뀐다.
> 이런방식으로 사용한다고 정해둔게 프로토콜  ISO15693 이것을 RFID라고 한다.

카드의 칩이 베터리 없이 어떻게 동작?.
> 칩에 외부에서부터 전기를 공급받기 위해 안테나가 반드시 필요하다.
> 칩에 안테나를 두른다. / 리더기에 접촉하면 칩에 전자가 들어오는 순간 전원이 들어오는것.
> 케리어 주파수는 교류 -> 정류회로 ->를 거쳐 칩이 동작하기 위한 직류전기로 사용한다.전자파는 전원.
> 정류회로가 들어가있다. 펌웨어까지 칩안에 다 들어있다. 매우 작은 운영체제가 들어있다.
> 칩을 써서 보안이 걸려있다. 마그네틱은 보안이 약하다.(마그네틱 안쓴다)

<발전의 원리>
> 전자파는 어떻게 받아들이는가?
* 전자기 유도 현상.
> 전기, 자기를 자기는 전기를 유도한다.

* 자기때문에 전자가 밀린다.
> 자력때문에 전자가 움직이므로 자석을 움직인다. F(힘)
> 즉, 발전기라는 것은 힘을 움직여서 전기를 만들어 낸다.

* 원자력은 터빈
> 태양광만 스스로 전기를 생성한다. 소자가 빛을 받으면 전자를 받아낸다. 전기를 직접적으로 생산.

* 전자기를 사용하는 단점 
> 전자파 흡수물질이 근처에있으면 통신에 방해가 된다.
> 금속이있으면 일종의 피뢰침같이. 흡수된다.호일이 있으면 많은 양을 먹어서 부팅이 안된다.
> 비오는날 무선통신에 장애가 많은이유가 물도 전자파를 흡수한다.
> 전자파는 공기자체가 저항이다. 공기중의 전자파는 감쇠가 심하다. 

* 카드마다 고유번호가 있다.
* RFID -> NFC  대체 못함.

* 리더기쪽에서 에너지를 쏴준다.
> 열을높인다. 수분을 진동 시킨다. -> 열이난다.  예) 전자레인지
> 카드를 댄다 = 전자파나온다.
> 받은쪽 : 신호를 해석해서 돈을 낸다 (복조)/ 복조해서 232로 데이터를 보낸다. 
> ASIC : SOC(공정단계에 설계를 다 집어넣음)

* 리더기 3가지
1. 리더형 : 안테나
2. 손잡이형. : 바코드 - 눌리면 전자파 쏨.
3. 리더대형


1. Data Transmission between OBID ® i-scan ID ISC.MR/PR/PRH100 and Host


1.1. Configuration Commands and Control Commands
> 리더 : 함수와 비슷하다.
> 화살표에 실려오는것 파라미터(데이터)를
저장하거나
제어 명령을 처리한다.
> 반환값 : status/ data


1.2. ISO15693 Host Commands
> UID : 카드의 고유 번호가 있어야 한다.
* Addressed mode:

> 1. 카드 번호 확인. 명령을 트랜스폰더 (카드를 말함) 안테나 범위 안에 카드가 있나?
> return  value : Y 카드 개수나 카드 고유번호/ N

> 2.3 : read/write pair이다.
> 전제조건: PC가 UID를 알아야 한다 / 전제 조건 2.: 1번이 한번 수행된 상태어야 한다.

* Non-addressed mode:
> 4.5 : read/write pair이다.
> 카드나..되는데로 읽어들인다.

* Selected:
> 읽고 쓰는것은 셀렉트 된애만 읽고 쓰겠다.고정(이것만 쓰겠다) 다른카드는 안읽어 들이겠다.
> 주소UID가 있어야 한다.

* Addressed mode, Non-addressed mode, Selected 이 세가지 표 자체가 절차다.


2.1. Data Format and Protocol Frames
> 시리얼 프로토콜의 실체
> 1. 1 :첫번째 바이트 ~ n : 길이가 가변이다. / n:이론적으로는 255까지 쓸수 있다.
> 2. 컴어드레스 단말기 
> 3. 보내는 명령어 타입. 이것에 따라 뒤에 용량이 달라진다./3번에 뭐가 들어가는지 배워야 한다.
> 4. 끝에 반드시 2바이트 추가가 되어야 한다 CRC


ANNEX D: Index of Status Bytes
p108
> 리턴 값 : 0이면 ok /나머지는 에러

> 메인의 리턴값과 비슷하다.


5.8. [0x71] Set Output



#include <stdio.h>
#include <fcntl.h>
#include <termios.h>
#include <sys/types.h>
#include <sys/stat.h>
#include "ws_rfid_lib.h"

#define SPEED  B38400
#define SPORT  "/dev/ttyS0"

#define CRC_POLYNOM    0x8408
#define  CRC_PRESET    0xFFFF

unsigned char ucaBeep[] = {0x0D, 0x000x710x00 
            , 0x300x000x000x00
            , 0x0A, 0x000x000x46
            , 0x41};


unsigned short CRC16(void *, unsigned int);

main()
{
  char cBuff[255];
  int iDev = 0;
  int iRet = 0;

  struct termios stOldState;
  struct termios stNewState;

  iDev = open(SPORT, O_RDWR|O_NOCTTY);  // Serial Port Open
  if(0>iDev)
  {
    perror(SPORT);
    exit(-100);
  }

  tcgetattr(iDev, &stOldState);
  bzero(&stNewState, sizeof(stNewState));

  stNewState.c_cflag = SPEED|CRTSCTS|CS8|PARENB|CLOCAL|CREAD;
  stNewState.c_iflag = IGNPAR|ICRNL;
  stNewState.c_oflag = 0;

  stNewState.c_lflag = 0;    // Non Canonical
  bzero(stNewState.c_cc, NCCS);
  stNewState.c_cc[VTIME] = 0;
  stNewState.c_cc[VMIN] = 10;

  tcflush(iDev, TCIFLUSH);
  tcsetattr(iDev, TCSANOW, &stNewState);

/*
  iRet = read(iDev, cBuff, 255);
  cBuff[iRet] = 0;
  printf("[%s]:[%d]\n", cBuff, iRet);

  tcsetattr(iDev, TCSANOW, &stOldState);
  close(iDev);
*/

  getchar();
  write(iDev, ucaBeep, ucaBeep[0]);
  

}

int main1(void)
{
  unsigned short usCrc = CRC16(ucaBeep, ucaBeep[0]-2);
  printf("[%04X]\n", usCrc);
  return 0;
}

unsigned short CRC16(void *vpData, unsigned int uiLen)
{
  unsigned int i;
  unsigned int j;
  unsigned char *DATA = vpData;
  unsigned short crc = CRC_PRESET;
  for (i = 0; i < uiLen; i++) 
  {
    crc ^= DATA[i];
    for (j = 0; j < 8; j++)
    {
      if (crc & 0x0001)
      {
        crc = (crc >> 1) ^ CRC_POLYNOM;
      }
      else
      {
        crc = (crc >> 1);
      }
    }
  }
  return crc;
}




728x90