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

20151208 - 강동조 개인업무일지

by 알 수 없는 사용자 2015. 12. 9.
728x90
반응형
RF :  무선

라디오도 통신이다 하지만 더 정확한 표현은 RF이다 전파쪽에서 온 용어이다
많은양의 주파수를 한방에 보내준다 한번에 많은양을 보내면 빠른것이다
안의 주파수떄문에 데이터 전송속도가 빨라지고 느려진다

버스같은경우도 많은사람을 목적지까지 데리고 가는것을 목표라하는데 버스를 캐리어라고 보면 됩니다
내리는 것을 복조라고 한다 (deModuleation) Mo와dem을 합쳐서 모뎀이 나오게 됩니다
주파수는 세로폭이아닌 가로폭이다 
주파수를 바꾸는 것을 변조라고 한다
소리의 크기에 큰것고 작은것이 있는데 진폭변조이다 크게 강하게 이것을 섞으면 한꺼번에 4bit를 보낼수 있다 
우리가 쓰는 카드가 대부분 13.56m이다 버스에서 쓰는 카드는 13.56이다 데이터 모양이나 위상변조인지 주파수변조인지 진폭변조인지 쓰는방식에 따라서 RF스펙이 바뀌게 된다 각 데이터를 정해놓은것이 프로토콜입니다 RFID방식이라고 합니다

 

우리는 교통카드에 돈을 어떻게 내는것인가??

칩이 내장이 됩니다 칩이란건 전기가 있어야 동작한다 베터리를 넣게되면 많이쓰는사람은 정기적으로 갈아야한다
하지만 이방법은 불편하다
그래서 안테나를 달게 된다 버스리더기에서 전자파를쏜다 13.56메가로 전자파를 밧데리로 씁니다 전자파를 밧데리로 바꿉니다
전파회로가 들어가있고 이것이 주파수교류로 오는것을 직류로 바꾼다 캐리어안에 데이터가 실려있을건데 에너지를 바꾸기전에 떼어냅니다
 칩이 하는일은 데이터를 받아서 프로토콜이 맞는지 해석하고 맞으면 내부메모리에 씁니다 칩안에 펌웨어까지 들어가 있습니다 큰카드는 안테나가 큰테두리로 있습니다
 마그네틱카드는 암호화가 힘들었기에 해킹할수 있었습니다 칩은 암호화가 가능하기에 해킹하기 어렵습니다 해킹을 하게되면 무한으로 사용할수 있게 만들수도 있습니다

기 유도현상으로 인해서 전자파를 받아 들여집니다  전기자기가 유도를 한다라는 뜻입니다

발전기의 원리

전자가 움직이면 전기입니다 전자의 이동이 전기이기에 자력입니다
자석으로 인해서 전기가 밀리면 자석을 움직이기위해서 힘이필요합니다 힘은 포스라하며 발전기라하면 힘을 줘서 전기를 만들어 줍니다
이힘을 어디에서 줄것인가에 따라서 각 발전기가 다르게됩니다 불, 물, 풍력 등등으로 힘을 얻습니다
스스로 전자를 만드는것은 태양광밖에 없다 태양광은 직접으로 전기를 만들고 나머지는 수동적으로 만들어 내야 합니다
힘 -> 자기 -> 전기

전자파란?

발전의 원리는 오른손에의해 되는것이다 전류가 흐르는 오른손을 안쪽으로 굽히면 전류가 나오게되고
전계 -> 자계 -> 전계 -> 자계 이런식으로 나가는것이 전자파입니다
단점은 전자파를 사용하는 것을 같이 들고있으면 흡수하기에 통신에 방해가 됩니다 일종의 피뢰침입니다



무선으로 통신을하면 RF라고 한다 칩에다가 고유번호가 찍혀져 있습니다 칩과 통신해서 칩을 알아볼수 있게 만들었습니다
아이덴티티를 무선으로 한다해서 RFID입니다 블루투스도 RF입니다 RFID -> NFC -> IOT 방식으로 진화해왔지만 사실 별차이 없습니다  
바코드 대체를 한다했는데 사실상 못한다 칩하고 바코드하고 가격이 다르기 때문입니다

리더기쪽에서 에너지를 쏴주는 역활을한다 단말기 근처에 있으면 안좋다 전자파를 계속 쏴주기 때문이다

수분을 진동을시켜서 열을 발생시킨다 이원리를 이용해서 만든것이 전자렌지입니다 

14443A는 교통카드이다

제대로 출력이되면 status와 data가 반환이되어 Host로 넘어가게되고 제대로 처리가 안되면 error처리가 되어 Host로 이동합니다
함수와 비슷합니다


전재 조건이 위에 UID를 알아내는것부터 시작해서 두번쨰로 넘어가야합니다 
3가지 모드가 존재한다

Addressed mode
3가지
UID가 존재하는지 여부 확인


Non-addressed mode
2가지
읽고쓰는것만 존재하며 그냥 읽어 드리고 쓴다 

Selected
4가지
UID있는모드와 없는모드가 있다
UID읽은다음 읽고 쓰는것을 정해준다 
그냥 읽어 드린다


Data Format and Protocol Frames


Host -> Reader
1. n이 255까지 가능하다
2. 고유번호가 존재하며 0을 사용한다
3. 보내는 타입 3번을 의해 용량이 달라진다 그렇기에 4번부터n바이트가된다
빅인디안이다
이것을 보내게되면 밑에것이 응답을하게 된다

3번에 들어갈것

0을 리턴하게되면 OK이다 0이아니면 에러이다





NonCanonial.c 소스

#include "smart.h"

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

#define CRC_POLYNOM 0x8408
#define CRC_PRESET 0xFFFF

unsigned short RFID_CRC16(void * vpData, unsigned int uiLen);

unsigned char ucaBeep[] = {0x0D, 0x000x71
                        , 0x000x300x00
                        , 0x000x000x0A
                        , 0x000x000x460x41};

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


        return 0;
}

int main(void)
{
        char cBuff[255];

        int iDev = 0;
        int iRet = 0;

        struct termios stOldState;
        struct termios stNewState;

        iDev = open(SPORT, O_RDWR | O_NOCTTY);

        if (0 > iDev)
        {
                perror(SPORT);
                exit(-100);
        }

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

        stNewState.c_cflag = SPEED | CRTSCTS | CS8 | CLOCAL | PARENB;

        stNewState.c_iflag = IGNPAR | ICRNL;
        stNewState.c_oflag = 0;
        stNewState.c_lflag = 0;
        bzero(stNewState.c_cc, NCCS);

        stNewState.c_cc[VTIME] = 10;
        stNewState.c_cc[VMIN] = 0;

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

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

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

        tcsetattr(iDev, TCSANOW, &stOldState);

        close(iDev);

        return 0;
}
unsigned short RFID_CRC16(void * vpData, unsigned int uiLen)
{
        unsigned short crc = CRC_PRESET;
        unsigned int i;
        unsigned int j;
        unsigned char * DATA = vpData;

        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