{"id":7297,"date":"2024-04-08T19:01:01","date_gmt":"2024-04-08T11:01:01","guid":{"rendered":""},"modified":"2024-04-08T19:01:01","modified_gmt":"2024-04-08T11:01:01","slug":"\u7269\u8054\u7f51\u4e4bRFID\u4e09\uff08NFC\uff09","status":"publish","type":"post","link":"https:\/\/mushiming.com\/7297.html","title":{"rendered":"\u7269\u8054\u7f51\u4e4bRFID\u4e09\uff08NFC\uff09"},"content":{"rendered":"

\u5185\u5bb9\u63d0\u7eb2
1\u3001NFC\u7684\u6982\u5ff5-\u719f\u6089<\/p>\n

2\u3001NFC\u548cRFID\u533a\u522b-\u638c\u63e1<\/p>\n

3\u3001NFC\u7684\u5de5\u4f5c\u6a21\u5f0f-\u638c\u63e1<\/p>\n

nfc\u6982\u8ff0\uff1a<\/p>\n

NFC (Near Field Communication)\u8fd1\u573a\u901a\u4fe1\uff0c\u8fd9\u4e2a\u6280\u672f\u7531\u975e\u63a5\u89e6\u5f0f\u5c04\u9891\u8bc6\u522b\uff08RFID\uff09\u6f14\u53d8\u800c\u6765\uff0c\u7531\u98de\u5229\u6d66\u534a\u5bfc\u4f53\uff08\u73b0\u6069\u667a\u6d66\u534a\u5bfc\u4f53\u516c\u53f8\uff09\u3001\u8bfa\u57fa\u4e9a\u548c\u7d22\u5c3c\u5171\u540c\u7814\u5236\u5f00\u53d1\uff0c\u5176\u57fa\u7840\u662fRFID\u53ca\u4e92\u8fde\u6280\u672f\u3002NFC\u662f\u4e00\u79cd\u77ed\u8ddd\u79bb\u9ad8\u9891\u7684\u65e0\u7ebf\u7535\u6280\u672f\uff0c\u572813.56Mhz\u9891\u7387\u8fd0\u884c\u4e8e20cm\u8ddd\u79bb\u5185\u3002\u5176\u4f20\u8f93\u901f\u5ea6\u6709106Kbit\/s\uff0c212Kbit\/s\u6216\u8005424Kbit\/s\u4e09\u79cd\u3002\u76ee\u524d\u8fd1\u573a\u901a\u4fe1\u5df2\u901a\u8fc7\u5e76\u6210\u4e3aISO\/IEC IS 18092\u56fd\u9645\u6807\u51c6\u3001ECMA-340\u6807\u51c6\u4e0eETSI TS 102 190\u6807\u51c6\u3002NFC\u91c7\u7528\u4e3b\u52a8\u548c\u88ab\u52a8\u4e24\u79cd\u8bfb\u53d6\u6a21\u5f0f\u3002<\/p>\n

Nfc\u5de5\u4f5c\u6a21\u5f0f\uff1a<\/p>\n

\u5361\u6a21\u5f0f\uff1a\u8fd9\u4e2a\u6a21\u5f0f\u5176\u5b9e\u5c31\u662f\u76f8\u5f53\u4e8e\u4e00\u5f20\u91c7\u7528RFID\u6280\u672f\u7684IC\u5361\u3002\u53ef\u4ee5\u66ff\u4ee3\u5927\u91cf\u7684IC\u5361\uff08\u5305\u62ec\u4fe1\u7528\u5361\uff09\u573a\u5408\u5546\u573a\u5237\u5361\u3001\u516c\u4ea4\u5361\u3001\u95e8\u7981\u7ba1\u5236\uff0c\u8f66\u7968\uff0c\u95e8\u7968\u7b49\u7b49\u3002\u6b64\u79cd\u65b9\u5f0f\u4e0b\uff0c\u6709\u4e00\u4e2a\u6781\u5927\u7684\u4f18\u70b9\uff0c\u90a3\u5c31\u662f\u5361\u7247\u901a\u8fc7\u975e\u63a5\u89e6\u8bfb\u5361\u5668\u7684RF\u57df\u6765\u4f9b\u7535\uff0c\u5373\u4fbf\u662f\u5bc4\u4e3b\u8bbe\u5907\uff08\u5982\u624b\u673a\uff09\u6ca1\u7535\u4e5f\u53ef\u4ee5\u5de5\u4f5c\u3002<\/p>\n

\u8bfb\u5199\u5668\u6a21\u5f0f\uff1a\u8fd9\u4e2a\u6a21\u5f0f\u53ef\u4ee5\u6a21\u62df\u8bfb\u8bfb\u5361\u5668\u529f\u80fd\uff0c\u8bfb\u53d6MIFARE\u548cFeliCa\u5361\u7684\u4fe1\u606f<\/p>\n

\u70b9\u5bf9\u70b9\u6a21\u5f0f\uff1a\u8fd9\u4e2a\u6a21\u5f0f\u548c\u7ea2\u5916\u7ebf\u5dee\u4e0d\u591a\uff0c\u53ef\u7528\u4e8e\u6570\u636e\u4ea4\u6362\uff0c\u53ea\u662f\u4f20\u8f93\u8ddd\u79bb\u8f83\u77ed\uff0c\u4f20\u8f93\u521b\u5efa\u901f\u5ea6\u8f83\u5feb\uff0c\u4f20\u8f93\u901f\u5ea6\u53ef\u5feb\u4e9b\uff0c\u529f\u8017\u4f4e\uff08\u84dd\u7259\u4e5f\u7c7b\u4f3c\uff09\u3002\u5c06\u4e24\u4e2a\u5177\u5907NFC\u529f\u80fd\u7684\u8bbe\u5907\u94fe\u63a5\uff0c\u80fd\u5b9e\u73b0\u6570\u636e\u70b9\u5bf9\u70b9\u4f20\u8f93\uff0c\u5982\u4e0b\u8f7d\u97f3\u4e50\u3001\u4ea4\u6362\u56fe\u7247\u6216\u8005\u540c\u6b65\u8bbe\u5907\u5730\u5740\u7c3f\u3002\u4e00\u6b21\u901a\u8fc7NFC\uff0c\u591a\u4e2a\u8bbe\u5907\u5982\u6570\u7801\u76f8\u673a\u3001PDA\u3001\u8ba1\u7b97\u673a\u548c\u624b\u673a\u4e4b\u95f4\u90fd\u53ef\u4ee5\u4ea4\u6362\u8d44\u6599\u6216\u8005\u670d\u52a1<\/p>\n

\"\u7269\u8054\u7f51\u4e4bRFID\u4e09\uff08NFC\uff09<\/p>\n

 <\/p>\n

NFC\u4e0eRFID\u533a\u522b\uff1a<\/p>\n

\u2022 \u7b2c\u4e00\u3001NFC\u5c06\u975e\u63a5\u89e6\u8bfb\u5361\u5668\u3001\u975e\u63a5\u89e6\u5361\u548c\u70b9\u5bf9\u70b9\u529f\u80fd\u6574\u5408\u8fdb\u4e00\u5757\u5355\u82af\u7247\uff0c\u800crfid\u5fc5\u987b\u6709\u9605\u8bfb\u5668\u548c\u6807\u7b7e\u7ec4\u6210\u3002RFID\u53ea\u80fd\u5b9e\u73b0\u4fe1\u606f\u7684\u8bfb\u53d6\u4ee5\u53ca\u5224\u5b9a\uff0c\u800cNFC\u6280\u672f\u5219\u5f3a\u8c03\u7684\u662f\u4fe1\u606f\u4ea4\u4e92\u3002\u901a\u4fd7\u7684\u8bf4NFC\u5c31\u662fRFID\u7684\u6f14\u8fdb\u7248\u672c\uff0c\u53cc\u65b9\u53ef\u4ee5\u8fd1\u8ddd\u79bb\u4ea4\u6362\u4fe1\u606f\u3002NFC\u624b\u673a\u5185\u7f6eNFC\u82af\u7247\uff0c\u7ec4\u6210RFID\u6a21\u5757\u7684\u4e00\u90e8\u5206\uff0c\u53ef\u4ee5\u5f53\u4f5cRFID\u65e0\u6e90\u6807\u7b7e\u4f7f\u7528\u8fdb\u884c\u652f\u4ed8\u8d39\u7528\uff1b\u4e5f\u53ef\u4ee5\u5f53\u4f5cRFID\u8bfb\u5199\u5668\uff0c\u7528\u4f5c\u6570\u636e\u4ea4\u6362\u4e0e\u91c7\u96c6\uff0c\u8fd8\u53ef\u4ee5\u8fdb\u884cNFC\u624b\u673a\u4e4b\u95f4\u7684\u6570\u636e\u901a\u4fe1\u3002<\/p>\n

\u2022 \u7b2c\u4e8c\u3001NFC\u4f20\u8f93\u8303\u56f4\u6bd4RFID\u5c0f\uff0cRFID\u7684\u4f20\u8f93\u8303\u56f4\u53ef\u4ee5\u8fbe\u5230\u51e0\u7c73\u3001\u751a\u81f3\u51e0\u5341\u7c73\uff0c\u4f46\u7531\u4e8eNFC\u91c7\u53d6\u4e86\u72ec\u7279\u7684\u4fe1\u53f7\u8870\u51cf\u6280\u672f\uff0c\u76f8\u5bf9\u4e8eRFID\u6765\u8bf4NFC\u5177\u6709\u8ddd\u79bb\u8fd1\u3001\u5e26\u5bbd\u9ad8\u3001\u80fd\u8017\u4f4e\u7b49\u7279\u70b9\u3002<\/p>\n

\u2022 \u7b2c\u4e09\u3001\u5e94\u7528\u65b9\u5411\u4e0d\u540c\u3002NFC\u770b\u66f4\u591a\u7684\u662f\u9488\u5bf9\u4e8e\u6d88\u8d39\u7c7b\u7535\u5b50\u8bbe\u5907\u76f8\u4e92\u901a\u8baf\uff0c\u6709\u6e90RFID\u5219\u66f4\u64c5\u957f\u5728\u957f\u8ddd\u79bb\u8bc6\u522b\u3002<\/p>\n

NFC\u4e0eBLE\u533a\u522b\uff1a<\/p>\n

\"\u7269\u8054\u7f51\u4e4bRFID\u4e09\uff08NFC\uff09<\/p>\n

\u5185\u5bb9\u63d0\u7eb2
1\u3001PN532\u4ecb\u7ecd-\u4e86\u89e3<\/p>\n

2\u3001PN532\u5e27\u683c\u5f0f-\u638c\u63e1<\/p>\n

PN532\u6982\u8ff0\uff1a<\/p>\n

\u2022 \u968f\u7740\u4e92\u8054\u7f51\u7684\u666e\u53ca\uff0c\u624b\u673a\u4f5c\u4e3a\u4e92\u8054\u7f51\u6700\u76f4\u63a5\u7684\u667a\u80fd\u7ec8\u7aef\uff0c\u5fc5\u5c06\u4f1a\u5f15\u8d77\u4e00\u573a\u6280\u672f\u4e0a\u7684\u9769\u547d\uff0c\u5982\u540c\u4ee5\u524d\u84dd\u7259\u3001USB\u3001GPS\u7b49\u6807\u914d\uff0cNFC\u5c06\u6210\u4e3a\u65e5\u540e\u624b\u673a\u6700\u91cd\u8981\u7684\u6807\u914d\uff0c\u901a\u8fc7NFC\u6280\u672f\uff0c\u624b\u673a\u652f\u4ed8\u3001\u770b\u7535\u5f71\u3001\u5750\u5730\u94c1\u90fd\u80fd\u5b9e\u73b0\uff0c\u5c06\u5728\u6211\u4eec\u7684\u65e5\u5e38\u751f\u6d3b\u4e2d\u53d1\u6325\u66f4\u5927\u7684\u4f5c\u7528\u3002<\/p>\n

\u2022 \u6211\u4eec\u8fd9\u91cc\u4f7f\u7528\u7684NFC\u82af\u7247\u4e3aPN532\uff0c\u5b83\u662f\u4e00\u6b3e\u9ad8\u5ea6\u96c6\u6210\u7684\u975e\u63a5\u89e6\u5f0f\u901a\u8baf\u6536\u53d1\u6a21\u5757\uff0c\u57fa\u4e8e8051\u5355\u7247\u673a\u6838\u5fc3\u3002\u5b83\u652f\u63016\u4e2a\u4e0d\u540c\u7684\u64cd\u4f5c\u6a21\u5f0f\uff1aISO\/IEC14443A\/MIFARE \u8bfb\/\u5199\u5668\u3001FeliCa \u8bfb\/\u5199\u5668\u3001ISO\/IEC 14443B \u8bfb\/\u5199\u5668\u3001ISO\/IEC14443A MIFARE\u5361\u6a21\u62df\u6a21\u5f0f\u3001FeliCa\u5361\u6a21\u62df\u6a21\u5f0f\u3001ISO\/IEC 18092 ECMA 340\u70b9\u5bf9\u70b9\uff1b\u8fd9\u6b3e\u82af\u7247\u63d0\u4f9b3\u4e2d\u548c\u4e3b\u673a\u901a\u4fe1\u7684\u63a5\u53e3\uff1aSPI\\I2C\\USART\u3002<\/p>\n

SPI\\I2C\\USART\u4e09\u79cd\u901a\u4fe1\u65b9\u5f0f\u6709\u8be5\u82af\u7247\u7684P16\u5f15\u811a\u548cP17\u5f15\u811a\u914d\u7f6e\uff1a<\/p>\n

                            P16                 P17<\/p>\n

UART                0(GND)            0(GND)<\/p>\n

I2C                    1(DVDD)          0(GND)<\/p>\n

SPI                    0(GND)            1(DVDD)<\/p>\n

PN532\u666e\u901a\u5e27(P9)\uff1a\uff08\u666e\u901a\u683c\u5f0f\u6700\u5927\u53d1\u9001255\u4e2a\u5b57\u8282\uff0c\u800c\u957f\u683c\u5f0f\uff08\u4e0b\u9762\u6709\u8bb2\u89e3\uff09\u53ef\u4ee5\u53d1\u9001\u66f4\u591a\u7684\u5b57\u8282\uff09<\/p>\n

\"\u7269\u8054\u7f51\u4e4bRFID\u4e09\uff08NFC\uff09<\/p>\n

\u5bf9\u4e8ePN532\u7684\u63a7\u5236\uff0c\u53ea\u9700\u8981\u6309\u7167\u5e27\u683c\u5f0f\u5199\u5165\u6570\u636e\u5c31\u53ef\u4ee5\u4e86<\/p>\n

0x00, \u524d\u5e8f<\/p>\n

0x00, 0xff, \u5305\u5934<\/p>\n

LEN, \u6570\u636e\u957f\u5ea6\uff0c\u5305\u542bTFI\u548cPD<\/p>\n

LCS, \u957f\u5ea6\u6821\u9a8c\u548c\uff0cLEN + LCS = 0x00;<\/p>\n

TFI, \u4f20\u8f93\u65b9\u5411\uff0c0xd4\u4f20\u5230\u5361\u7247\uff0c0xd5\u5361\u7247\u8fd4\u56de<\/p>\n

PD0, \u6570\u636e<\/p>\n

PD1, \u6570\u636e<\/p>\n

\u2026<\/p>\n

PDn, \u6570\u636e<\/p>\n

DCS, \u6570\u636e\u6821\u9a8c\u548c\uff0cDCS+TFI+PD0+\u2026+PDn = 0x00;<\/p>\n

 <\/p>\n

\u957f\u683c\u5f0f\u5e27(P10) \uff1a<\/p>\n

\"\u7269\u8054\u7f51\u4e4bRFID\u4e09\uff08NFC\uff09<\/p>\n

 <\/p>\n

0x00, \u524d\u5e8f<\/p>\n

0x00, 0xff, \u5305\u5934                                                 <\/p>\n

0xff, 0xff   \u77ed\u683c\u5f0f\u4e2d\u7684\u957f\u5ea6\u548c\u6821\u9a8c           \uff08\u666e\u901a\u683c\u5f0f\u6700\u5927\u53d1\u9001255\u4e2a\u5b57\u8282\uff0c\u800c\u957f\u683c\u5f0f\u53ef\u4ee5\u53d1\u9001\u66f4\u591a\u7684\u5b57\u8282\uff09<\/p>\n

LENH, \u6570\u636e\u957f\u5ea6\u9ad8\u5b57\u8282\uff0c\u5305\u542bTFI\u548cPD<\/p>\n

LENL, \u6570\u636e\u957f\u5ea6\u4f4e\u5b57\u8282\uff0c\u5305\u542bTFI\u548cPD<\/p>\n

LCS, \u957f\u5ea6\u6821\u9a8c\u548c\uff0cLENH + LENL + LCS = 0x00;<\/p>\n

TFI, \u4f20\u8f93\u65b9\u5411\uff0c0xd4\u4f20\u5230\u5361\u7247\uff0c0xd5\u5361\u7247\u8fd4\u56de<\/p>\n

PD0, \u6570\u636e<\/p>\n

PD1, \u6570\u636e<\/p>\n

\u2026<\/p>\n

PDn, \u6570\u636e<\/p>\n

      DCS, \u6570\u636e\u6821\u9a8c\u548c\uff0cDCS+TFI+PD0+\u2026+PDn = 0x00;<\/p>\n

\u4ee5\u4e0a\u5e27\u683c\u5f0f\u53ef\u7528\u4e00\u4e2a\u6570\u636e\u7ed3\u6784\u8868\u793a\uff0c\u65b9\u4fbf\u5199\u4ee3\u7801\uff1a
 
\/* PN532\u64cd\u4f5c\u547d\u4ee4\u7ed3\u6784\u5b9a\u4e49 *\/
struct Pn532Cmd{
\n
    uint8_t Preamble;             \/\/\u524d\u5e8f 
    uint8_t StartCode[2];         \/\/\u5305\u5934 
    uint8_t LEN;                   \/\/\u5305\u957f TFI+PD0...PDn
    uint8_t LCS;                  \/\/\u957f\u5ea6\u6821\u9a8c LEN + LCS = 0x00
    uint8_t TFI;                  \/\/\u547d\u4ee4\u5e27\u8bc6\u522b\u4f4d (0xD4:input) (0xD5:output)
    uint8_t *data;                \/\/\u6570\u636e\u57df
    uint8_t DCS;                  \/\/\u6570\u636e\u6821\u9a8c [TFI + PD0 + PD1 + ... + PDn + DCS] = 0x00
    uint8_t Postamble;            \/\/\u540e\u5e8f 
};
 <\/p>\n

\"\u7269\u8054\u7f51\u4e4bRFID\u4e09\uff08NFC\uff09<\/p>\n

struct Pn532Cmd cmd ={
\n
    .Preamble = 0x00,
    .StartCode[0] = 0x00,
    .StartCode[1] = 0xff,
    .TFI = 0xd4,                  \/\/\u4f20\u8f93\u65b9\u5411\uff0c0xd4\u4f20\u5230\u5361\u7247\uff0c0xd5\u5361\u7247\u8fd4\u56de
    .Postamble = 0x00,
};
 
\/*******************************************************************************
* Function Name      : GetCmd
* Description        : \u62ff\u5230\u547d\u4ee4\u5305\uff0c\u5728buf\u4e2d\u5b58\u653e\u4e00\u4e2a\u5b8c\u6574\u7684\u6570\u636e\u5305
* Input              : \u547d\u4ee4\uff0c\u547d\u4ee4\u957f\u5ea6
* Output             : none
* Return             : none
* date            : 
* modify        :
*******************************************************************************\/
void GetCmd(uint8_t *data, uint8_t l)
{
\n
    uint8_t temp=0;
    len = 0;
    memset(buf,0,100);
    cmd.LEN = l+1;        \/\/\u8ba1\u7b97\u957f\u5ea6\uff0c\u5305\u62ec\u6570\u636e\u957f\u5ea6\u548c\u4f20\u8f93\u6807\u5fd7
    cmd.LCS = 0-cmd.LEN;    \/\/\u957f\u5ea6\u6821\u9a8c\u548c
    cmd.data = data;
    for(int i=0; i<l; i++)    \/\/\u62ff\u5230\u6570\u636e
        temp += data[i];
    temp += cmd.TFI;
    cmd.DCS = 0-temp;        \/\/\u6570\u636e\u6821\u9a8c\u548c
    len = 1+2+1+1+cmd.LEN+1+1;
    
    buf[0] = 0x00;        \/\/\u5305\u524d\u5e8f
    buf[1] = 0x00;        \/\/\u5305\u5934
    buf[2] = 0xff;
    buf[3] = cmd.LEN;    \/\/\u957f\u5ea6
    buf[4] = cmd.LCS;    \/\/\u6821\u9a8c\u548c
    buf[5] = 0xd4;        \/\/\u8f93\u51fa
    memcpy(&buf[6], cmd.data, l);    \/\/\u547d\u4ee4\uff0c\u6ce8\u610f\u8fd9\u91cc\u662f\u5c06l\u4e2a\uff08\u4e0d\u662f1\u4e2a\uff09\u5b57\u8282\u6570\u636e\u4ecebuf[6]\u5f00\u59cb\u5f80\u540e\u9762\u586b\u5199\u4e00\u76f4\u586b\u5199\u5230buf[6+l-1]
    buf[6+l] = cmd.DCS;    \/\/\u6821\u9a8c\u548c
    buf[7+l] = cmd.Postamble;    \/\/\u540e\u5e8f
}
PN532\u5e94\u7b54(P9)\uff1a<\/p>\n

0x00, \u524d\u5e8f<\/p>\n

0x00, 0xff, \u5305\u5934<\/p>\n

00, \u6570\u636e\u957f\u5ea6, \u8fd9\u91cc\u6ca1\u6709\u4efb\u4f55\u6570\u636e<\/p>\n

ff, \u957f\u5ea6\u6821\u9a8c\u548c\uff0cLEN + LCS = 0x00;<\/p>\n

\u4f20\u8f93\u65b9\u5411\uff0c0xd4\u4f20\u5230\u5361\u7247\uff0c0xd5\u5361\u7247\u8fd4\u56de<\/p>\n

\u6570\u636e<\/p>\n

\u6570\u636e<\/p>\n

\u2026<\/p>\n

PDn, \u6570\u636e<\/p>\n

DCS, \u6570\u636e\u6821\u9a8c\u548c\uff0cDCS+TFI+PD0+\u2026+PDn = 0x00;<\/p>\n

00\uff0c \u5c3e\u5e8f<\/p>\n

\u5185\u5bb9\u63d0\u7eb2
1\u3001\u5524\u9192-\u638c\u63e1<\/span><\/h4>\n

2\u3001\u626b\u5361-\u638c\u63e1<\/span><\/h4>\n

3\u3001\u8ba4\u8bc1-\u638c\u63e1<\/span><\/h4>\n

4\u3001\u8bfb\u5199-\u638c\u63e1<\/span><\/h4>\n

\u5524\u9192\u82af\u7247(P23,P99) \uff1a<\/p>\n

0x55,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\uff08\u8fd9\u4e9b\u5b57\u7b26\u5c31\u662f\u5524\u9192\u5934\uff09<\/p>\n

0x00,0x00,0xFF,0x03,0xFD,0xD4,0x14,0x01,0x17,0x00\uff08\u5728\u5524\u9192\u5934\u540e\u9762\u52a0\u4e0a\u4e86\u4e00\u4e2a\u666e\u901a\u5e27\uff09<\/p>\n

\u4ece\u624b\u518c\u53ef\u4ee5\u770b\u51fa\uff0c\u5524\u9192\u547d\u4ee4\u8981\u5728\u539f\u6709\u7684\u6570\u636e\u5305\u4e4b\u524d\u52a0\u5165\u5524\u9192\u5934\uff0c\u8fd9\u4e2a\u6bd4\u8f83\u7279\u6b8a\u4e00\u70b9<\/p>\n

0xd4\u4ee3\u8868\u4e3b\u673a\u5411PN532\u5199\u5165\u6570\u636e<\/p>\n

0x14,0x01\u4ee3\u8868\u9009\u62e9\u4e86\u666e\u901a\u6a21\u5f0f<\/p>\n

\"\u7269\u8054\u7f51\u4e4bRFID\u4e09\uff08NFC\uff09<\/p>\n

\u5e94\u7b54\uff1a0x00,0x00,0xff,0x02,0xfe,0xd5\uff08\u65b9\u5411\uff1a0xd5\u5361\u7247\u8fd4\u56de\u6570\u636e\u5230\u5355\u7247\u673a\uff09,0x15\uff08\u5e94\u7b54\u7801\uff0c\u5728\u53d1\u9001\u7684\u57fa\u7840\u4e0a\u52a01,\u56e0\u4e3a\u5524\u9192\u547d\u4ee4\u4e2d\u4f7f\u7528\u7684\u662f0x14\u6240\u4ee5\u8fd9\u91cc\u52a01\u53d8\u62100x15\uff09,0x16,0x00<\/p>\n

\u547d\u4ee4\u683c\u5f0f(P35) \uff1a<\/p>\n

\u2022 \u626b\u63cf\u5361\u7247<\/p>\n

    0x4a, 0x02, 0x00   \/\/\u626b\u63cf\u547d\u4ee4\uff0c\u5361\u7247\u4e2a\u6570\uff082\u4e2a\uff09\uff0c\u6ce2\u7279\u7387<\/p>\n

uint8_t SCAN[3] = {0x4a, 0x02, 0x00};     \/\/\u626b\u63cf\u6307\u4ee4\uff0c\u5361\u7247\u4e2a\u6570\uff0c\u6ce2\u7279\u7387
\u2022 \u5e94\u7b54<\/p>\n

    0x4b, \u5e94\u7b54\u7801<\/p>\n

    0x02, \u5361\u7247\u4e2a\u6570<\/p>\n

    0x01, \u7b2c\u4e00\u4e2a\u5361\u7247<\/p>\n

    0x04, 0x00, \u5361\u7247\u7c7b\u578b<\/p>\n

    0x08, \u5361\u7247\u5bb9\u91cf<\/p>\n

    0x04, id\u957f\u5ea6<\/p>\n

    0x01, 0x02, 0x03, 0x04 \u5361\u7247id\uff08\u8be5\u73af\u8282\u5df2\u7ecf\u62ff\u5230\u4e86\u5361\u7247ID\uff0c\u6240\u4ee5\u4e0d\u9700\u8981\u540cRFID\u4e00\u6837\u518d\u589e\u52a0\u4e00\u4e2a\u9632\u51b2\u7a81\u73af\u8282\uff09<\/p>\n

uint8_t WAKE[24] = {0x55,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x03,
                                      0xFD,0xD4,0x14,0x01,0x17,0x00};           \/\/\u5524\u9192\u6a21\u5757
uint8_t WAKEBACK[9]         = {0x00,0x00,0xFF,0x02,0xFE,0xD5,0x15,0x16,0x00};  \/\/\u5e94\u7b54
\u2022 \u8ba4\u8bc1\u5361\u7247<\/p>\n

    0x40, 0x01, 0x60, 0x02,  \u6570\u636e\u4ea4\u6362\u547d\u4ee4\uff0c1\u53f7\u5361\u7247\uff0cA\u8ba4\u8bc1\uff08\u8ba4\u8bc1A\u5bc6\u7801\u662f0x60\uff0c\u8ba4\u8bc1B\u5bc6\u7801\u662f0x61\uff09\uff0c2\u5730\u5740<\/p>\n

    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \u79d8\u94a5<\/p>\n

    0x01, 0x02, 0x03, 0x04 \u5361\u7247id<\/p>\n

\u2022 \u5e94\u7b54<\/p>\n

    0x41, 0x00   \u65e0\u9519<\/p>\n

uint8_t AUTHOR[14] = {0x40,0x01,0x60,0x02,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x02,0x03,0x04};\/*\u4ea4\u6362\u6570\u636e\uff0c
                                                                 1\u5361\uff0c\u8ba4\u8bc1\u547d\u4ee4\uff0c2\u5730\u5740\uff0ckey\uff0cid*\/
\/*41 0  \u5e94\u7b54\uff0c\u65e0\u63aa*\/
\u2022 \u8bfb\u5361<\/p>\n

    0x40, 0x01, 0x30, 0x02   \/\/\u4ea4\u6362\u6570\u636e\uff0c1\u53f7\u5361\uff0c\u8bfb\u53d6\u5757\uff0c2\u5730\u5740<\/p>\n

\u2022 \u5e94\u7b54<\/p>\n

    0x41, 0x00, 16bytes  \u5e94\u7b54\uff0c\u65e0\u9519\uff0c16\u4e2a\u6570\u636e<\/p>\n

uint8_t READ[4] = {0x40, 0x01, 0x30, 0x02};\/\/\u4ea4\u6362\u6570\u636e\uff0c1\u53f7\u5361\uff0c\u8bfb\u53d6\u5757\uff0c2\u5730\u5740
\/*41, 0, 16bytes  \u5e94\u7b54\uff0c\u65e0\u9519\uff0c16\u4e2a\u6570\u636e*\/
\u2022 \u5199\u5361<\/p>\n

    0x40, 0x01, 0xa0, 0x02,   \u4ea4\u6362\u6570\u636e\uff0c1\u53f7\u5361\uff0c\u5199\u5165\u5757\uff0c2\u5730\u5740<\/p>\n

    1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6 \u6570\u636e<\/p>\n

\u2022 \u5e94\u7b54<\/p>\n

    0x41, 0x00 \u5e94\u7b54\uff0c\u65e0\u9519<\/p>\n

uint8_t WRITE[20] = {0x40, 0x01, 0xa0, 0x02, 1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6};\/\/\u4ea4\u6362\u6570\u636e\uff0c1\u53f7\u5361\uff0c\u5199\u5165\u5757\uff0c2\u5730\u5740\uff0c\u6570\u636e
\/*41, 0 \u5e94\u7b54\uff0c\u65e0\u9519*\/
\u2022 \u5145\u503c<\/p>\n

    0x40, 0x01, 0xc1, 0x02, 1,0,0,0 \/\/\u4ea4\u6362\u6570\u636e\uff0c1\u53f7\u5361\uff0c\u5145\u503c\uff0c2\u5730\u5740\uff0c\u6570\u636e<\/p>\n

    0x40, 0x01, 0xB0, 0x02;\/\/\u4ea4\u6362\u6570\u636e\uff0c1\u53f7\u5361\uff0c\u4fdd\u5b58\uff0c2\u5730\u5740<\/p>\n

\u2022 \u5e94\u7b54<\/p>\n

    0x41, 0x00   \u5e94\u7b54\uff0c\u65e0\u9519<\/p>\n

uint8_t INCREMENT[8] = {0x40, 0x01, 0xc1, 0x02, 1,0,0,0};\/\/\u4ea4\u6362\u6570\u636e\uff0c1\u53f7\u5361\uff0c\u5145\u503c\uff0c2\u5730\u5740\uff0c\u6570\u636e
uint8_t TRANSFER[4] = {0x40, 0x01, 0xB0, 0x02};\/\/\u4ea4\u6362\u6570\u636e\uff0c1\u53f7\u5361\uff0c\u4fdd\u5b58\uff0c2\u5730\u5740
\/*41, 0 \u5e94\u7b54\uff0c\u65e0\u9519*\/
\u2022 \u6263\u6b3e<\/p>\n

    0x40, 0x01, 0xc0, 0x02, 1,0,0,0;\/\/\u4ea4\u6362\u6570\u636e\uff0c1\u53f7\u5361\uff0c\u6263\u6b3e\uff0c2\u5730\u5740\uff0c\u6570\u636e<\/p>\n

    0x40, 0x01, 0xB0, 0x02;\/\/\u4ea4\u6362\u6570\u636e\uff0c1\u53f7\u5361\uff0c\u4fdd\u5b58\uff0c2\u5730\u5740<\/p>\n

\u2022 \u5e94\u7b54<\/p>\n

    0x41, 0x00 \u5e94\u7b54\uff0c\u65e0\u9519<\/p>\n

uint8_t DECREMENT[8] = {0x40, 0x01, 0xc0, 0x02, 1,0,0,0};\/\/\u4ea4\u6362\u6570\u636e\uff0c1\u53f7\u5361\uff0c\u6263\u6b3e\uff0c2\u5730\u5740\uff0c\u6570\u636e
uint8_t TRANSFER[4] = {0x40, 0x01, 0xB0, 0x02};\/\/\u4ea4\u6362\u6570\u636e\uff0c1\u53f7\u5361\uff0c\u4fdd\u5b58\uff0c2\u5730\u5740
\/*41, 0 \u5e94\u7b54\uff0c\u65e0\u9519*\/
\u6ce8\u610f\uff1a\u5145\u503c\u6216\u8005\u6263\u6b3e\u64cd\u4f5c\u4e00\u5b9a\u8981\u52a0\u4e0a\u4fdd\u5b58\u52a8\u4f5c<\/p>\n

\u8bfb\u5199\u5361\u7247(P35\uff0cP33) \uff1a<\/p>\n

\u8bfb\u5199\u5361\u7247\u7684\u6bcf\u4e00\u6761\u547d\u4ee4\u90fd\u8981\u6309\u7167\u5e27\u683c\u5f0f<\/p>\n

\u2022 \u5524\u9192\u82af\u7247\uff0c\u5c06\u82af\u7247\u8bbe\u7f6e\u4e3a\u666e\u901a\u6a21\u5f0f<\/p>\n

\u2022 \u626b\u63cf\u5361\u7247\uff0c\u4e00\u6b21\u6700\u591a2\u5f20\u3002\u6210\u529f\u53ef\u4ee5\u5f97\u5230ID<\/p>\n

\u2022 \u8ba4\u8bc1\uff0c\u9700\u8981\u53d1\u9001\u79d8\u94a5\u548cID\u3002\u6ce8\u610f\u8fd9\u91cc\u6ca1\u6709\u9632\u51b2\u7a81\u73af\u8282\uff0c\u56e0\u4e3a\u5728\u626b\u63cf\u7684\u65f6\u5019\u5df2\u7ecf\u62ff\u5230\u5361\u7247\u7684ID\uff0c\u5728\u8ba4\u8bc1\u7684\u65f6\u5019\u6307\u660eID\u5c31\u53ef\u4ee5\u4e86<\/p>\n

\u2022 \u8bfb\u3001\u5199\u3001\u5145\u503c\u3001\u6263\u6b3e<\/p>\n

PN532\u8bfb\u53d6\u5361\u7247\u7684\u8fc7\u7a0b\u8981\u6bd4MFRC522\u7b80\u5355\u5f88\u591a<\/p>\n

\u4fee\u6539S50\u5361\u7247\u79d8\u94a5\uff1a\u63a7\u5236\u79d8\u94a5\u4f4d\u5171\u56db\u4e2a\u5b57\u8282\uff0c\u4f46\u662f\u53ea\u6709\u4e09\u4e2a\u5b57\u8282\u662f\u6709\u6548\u7684\uff0cByte9\u4e0d\u8d77\u4f5c\u7528\uff0c\u53ef\u4ee5\u4e0d\u7528\u7ba1<\/p>\n

\u6bcf\u4e2a\u5b57\u8282\u7684bit7\u63a7\u5236block3\uff0cBit6\u63a7\u5236block2\uff0cBit5\u63a7\u5236block1<\/p>\n

Bit4\u63a7\u5236block0\uff0cBit3~0\u5176\u5b9e\u5c31\u662fbit7~4\u53d6\u53cd\u7684\u7ed3\u679c<\/p>\n

Block3\u51fa\u5382\u9ed8\u8ba4 ff ff ff ff ff ff    ff 07 80 69    ff ff ff ff ff ff<\/p>\n

S50\u63a7\u5236\u5b57\uff1a\u6ce8\u610f_b\u7ed3\u5c3e\u7684\u4f4d\u53d6\u53cd\u4e4b\u540e\u624d\u662f\u6700\u7ec8\u7684\u63a7\u5236\u6a21\u5f0f<\/p>\n

\u6bcf\u4e2a\u5b57\u8282\u7684bit7\u63a7\u5236block3\uff0cBit6\u63a7\u5236block2\uff0cBit5\u63a7\u5236block1<\/p>\n

Bit4\u63a7\u5236block0\uff0cBit3~0\u5176\u5b9e\u5c31\u662fbit7~4\u53d6\u53cd\u7684\u7ed3\u679c<\/p>\n

Block3\u51fa\u5382\u9ed8\u8ba4 ff ff ff ff ff ff    ff 07 80 69    ff ff ff ff ff ff<\/p>\n

\u79d8\u94a5\u533a\u63a7\u5236\uff08block3\uff09<\/p>\n

Block3\u7531bit7\u63a7\u5236\uff0c\u51fa\u5382\u9ed8\u8ba4\u7684\u662f001\u63a7\u5236<\/p>\n

\u79d8\u94a5A\u6c38\u8fdc\u4e0d\u53ef\u8bfb\uff0c\u8bfb\u51fa\u6765\u7684\u662f0x00<\/p>\n

\u4fee\u6539\u79d8\u94a5A\u7684\u8fc7\u7a0b\uff1a<\/p>\n

\u7b2c6\u30017\u30018\u5b57\u8282\u6700\u9ad8\u4f4d\uff08\u7b2c7\u4f4d\uff09\u51fa\u5382\u65f6\u5206\u522b\u4e3a0 0 1\uff0c\u5219\u63a7\u5236\u6a21\u5f0f\u5982\u4e0b\u6240\u793a\uff1a\u9700\u8981\u4fee\u6539\u79d8\u94a5A\uff0c\u9700\u8981\u5148\u4f20\u5165\u6700\u521d\u7684\u79d8\u94a5A<\/p>\n

1\u3001\u5524\u9192<\/p>\n

2\u3001\u626b\u63cf\u5361\u7247<\/p>\n

3\u3001\u8ba4\u8bc1\uff08\u6b64\u65f6\u5fc5\u987b\u4f20\u5165\u79d8\u94a5A\uff0c\u624d\u80fd\u4fee\u6539\u79d8\u94a5A\uff09<\/p>\n

4\u3001\u4fee\u6539\u79d8\u94a5A\uff0816bytes\uff0c\u6ce8\u610f\uff0c\u4e0d\u8981\u4fee\u6539\u672c\u5bc6\u7801\u4ee5\u5916\u7684\u5176\u4ed6\u5730\u65b9\uff09<\/p>\n

5\u3001\u4fdd\u5b58\u4fee\u6539<\/p>\n

6\u3001\u91cd\u65b0\u8ba4\u8bc1<\/p>\n

7\u3001\u6570\u636e\u7684\u8bfb\u5199<\/p>\n

\u5185\u5bb9\u63d0\u7eb2
1\u3001\u8bfb\u5199\u5361\u6d41\u7a0b-\u638c\u63e1<\/p>\n

2\u3001\u8bfb\u5361(BLOCK0)\u5b9e\u6218-\u638c\u63e1<\/p>\n

3\u3001\u5199\u5361(BLOCK3)\u5b9e\u6218-\u638c\u63e1<\/p>\n

\u547d\u4ee4\u683c\u5f0f(P35\uff0cP33) \uff1a<\/p>\n

\u2022 \u5524\u9192<\/p>\n

\u2022 \u626b\u63cf<\/p>\n

\u2022 \u8ba4\u8bc1<\/p>\n

\u2022 \u8bfb\u5361<\/p>\n

\u2022 \u5524\u9192<\/p>\n

\u2022 \u626b\u63cf<\/p>\n

\u2022 \u8ba4\u8bc1<\/p>\n

\u2022 \u5199\u5361<\/p>\n

\u5524\u9192\u82af\u7247(P23,P99) \uff1a<\/p>\n

0x55,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<\/p>\n

0x00,0x00,0xFF,0x03,0xFD,0xD4,0x14,0x01,0x17,0x00<\/p>\n

\u4ece\u624b\u518c\u53ef\u4ee5\u770b\u51fa\uff0c\u5524\u9192\u547d\u4ee4\u8981\u5728\u539f\u6709\u7684\u6570\u636e\u5305\u4e4b\u524d\u52a0\u5165\u5524\u9192\u5934\uff0c\u8fd9\u4e2a\u6bd4\u8f83\u7279\u6b8a\u4e00\u70b9<\/p>\n

0xd4\u4ee3\u8868\u4e3b\u673a\u5411PN532\u5199\u5165\u6570\u636e<\/p>\n

0x14,0x01\u4ee3\u8868\u9009\u62e9\u4e86\u666e\u901a\u6a21\u5f0f<\/p>\n

\u547d\u4ee4\u683c\u5f0f(P35) \uff1a<\/p>\n

\u2022 \u626b\u63cf\u5361\u7247<\/p>\n

    0x4a, 0x02, 0x00   \/\/\u626b\u63cf\u547d\u4ee4\uff0c\u5361\u7247\u4e2a\u6570\uff0c\u6ce2\u7279\u7387<\/p>\n

\u2022 \u5e94\u7b54<\/p>\n

    0x4b, \u5e94\u7b54\u7801<\/p>\n

    0x02, \u5361\u7247\u4e2a\u6570<\/p>\n

    0x01, \u7b2c\u4e00\u4e2a\u5361\u7247<\/p>\n

    0x04, 0x00, \u5361\u7247\u7c7b\u578b<\/p>\n

    0x08, \u5361\u7247\u5bb9\u91cf<\/p>\n

    0x04, id\u957f\u5ea6<\/p>\n

    0x01, 0x02, 0x03, 0x04 \u5361\u7247id<\/p>\n

\u2022 \u8ba4\u8bc1\u5361\u7247<\/p>\n

    0x40, 0x01, 0x60, 0x02,  \u6570\u636e\u4ea4\u6362\u547d\u4ee4\uff0c1\u53f7\u5361\u7247\uff0cA\u8ba4\u8bc1\uff0c2\u5730\u5740<\/p>\n

    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \u79d8\u94a5<\/p>\n

    0x01, 0x02, 0x03, 0x04 \u5361\u7247id<\/p>\n

\u2022 \u5e94\u7b54<\/p>\n

    0x41, 0x00   \u65e0\u9519<\/p>\n

\u2022 \u8bfb\u5361<\/p>\n

    0x40, 0x01, 0x30, 0x02   \/\/\u4ea4\u6362\u6570\u636e\uff0c1\u53f7\u5361\uff0c\u8bfb\u53d6\u5757\uff0c2\u5730\u5740<\/p>\n

\u2022 \u5e94\u7b54<\/p>\n

    0x41, 0x00, 16bytes  \u5e94\u7b54\uff0c\u65e0\u9519\uff0c16\u4e2a\u6570\u636e<\/p>\n

\u2022 \u5199\u5361<\/p>\n

    0x40, 0x01, 0xa0, 0x02,   \u4ea4\u6362\u6570\u636e\uff0c1\u53f7\u5361\uff0c\u5199\u5165\u5757\uff0c2\u5730\u5740<\/p>\n

    1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6 \u6570\u636e<\/p>\n

\u2022 \u5e94\u7b54<\/p>\n

    0x41, 0x00 \u5e94\u7b54\uff0c\u65e0\u9519<\/p>\n

\u8bfb\u5199\u5361\u7247(P35\uff0cP33)  \uff1a<\/p>\n

\u8bfb\u5199\u5361\u7247\u7684\u6bcf\u4e00\u6761\u547d\u4ee4\u90fd\u8981\u6309\u7167\u5e27\u683c\u5f0f<\/p>\n

\u2022 \u5524\u9192\u82af\u7247\uff0c\u5c06\u82af\u7247\u8bbe\u7f6e\u4e3a\u666e\u901a\u6a21\u5f0f<\/p>\n

\u2022 \u626b\u63cf\u5361\u7247\uff0c\u4e00\u6b21\u6700\u591a2\u5f20\u3002\u6210\u529f\u53ef\u4ee5\u5f97\u5230ID<\/p>\n

\u2022 \u8ba4\u8bc1\uff0c\u9700\u8981\u53d1\u9001\u79d8\u94a5\u548cID\u3002\u6ce8\u610f\u8fd9\u91cc\u6ca1\u6709\u9632\u51b2\u7a81\u73af\u8282\uff0c\u56e0\u4e3a\u5728\u626b\u63cf\u7684\u65f6\u5019\u5df2\u7ecf\u62ff\u5230\u5361\u7247\u7684ID\uff0c\u5728\u8ba4\u8bc1\u7684\u65f6\u5019\u6307\u660eID\u5c31\u53ef\u4ee5\u4e86<\/p>\n

\u2022 \u8bfb\u3001\u5199\u3001\u5145\u503c\u3001\u6263\u6b3e<\/p>\n

\u2022 PN532\u8bfb\u53d6\u5361\u7247\u7684\u8fc7\u7a0b\u8981\u6bd4MFRC522\u7b80\u5355\u5f88\u591a<\/p>\n

\u4fee\u6539S50\u5361\u7247\u79d8\u94a5\uff1a<\/strong>\u63a7\u5236\u79d8\u94a5\u4f4d\u5171\u56db\u4e2a\u5b57\u8282\uff0c\u4f46\u662f\u53ea\u6709\u4e09\u4e2a\u5b57\u8282\u662f\u6709\u6548\u7684\uff0cByte9\u4e0d\u8d77\u4f5c\u7528\uff0c\u53ef\u4ee5\u4e0d\u7528\u7ba1<\/p>\n

\"\u7269\u8054\u7f51\u4e4bRFID\u4e09\uff08NFC\uff09<\/p>\n

\u6bcf\u4e2a\u5b57\u8282\u7684bit7\u63a7\u5236block3\uff0cBit6\u63a7\u5236block2\uff0cBit5\u63a7\u5236block1<\/p>\n

Bit4\u63a7\u5236block0\uff0cBit3~0\u5176\u5b9e\u5c31\u662fbit7~4\u53d6\u53cd\u7684\u7ed3\u679c<\/p>\n

Block3\u51fa\u5382\u9ed8\u8ba4 ff ff ff ff ff ff    ff 07 80 69    ff ff ff ff ff ff<\/p>\n

S50\u63a7\u5236\u5b57\uff1a\u6ce8\u610f_b\u7ed3\u5c3e\u7684\u4f4d\u53d6\u53cd\u4e4b\u540e\u624d\u662f\u6700\u7ec8\u7684\u63a7\u5236\u6a21\u5f0f<\/p>\n

\"\u7269\u8054\u7f51\u4e4bRFID\u4e09\uff08NFC\uff09<\/p>\n

\u6bcf\u4e2a\u5b57\u8282\u7684bit7\u63a7\u5236block3\uff0cBit6\u63a7\u5236block2\uff0cBit5\u63a7\u5236block1<\/p>\n

Bit4\u63a7\u5236block0\uff0cBit3~0\u5176\u5b9e\u5c31\u662fbit7~4\u53d6\u53cd\u7684\u7ed3\u679c<\/p>\n

Block3\u51fa\u5382\u9ed8\u8ba4 ff ff ff ff ff ff    ff 07 80 69    ff ff ff ff ff ff<\/p>\n

\u79d8\u94a5\u533a\u63a7\u5236\uff08block3\uff09
\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014
 <\/p>\n

\"\u7269\u8054\u7f51\u4e4bRFID\u4e09\uff08NFC\uff09<\/p>\n

 <\/p>\n

Block3\u7531bit7\u63a7\u5236\uff0c\u51fa\u5382\u9ed8\u8ba4\u7684\u662f001\u63a7\u5236<\/p>\n

\u79d8\u94a5A\u6c38\u8fdc\u4e0d\u53ef\u8bfb\uff0c\u8bfb\u51fa\u6765\u7684\u662f0x00<\/p>\n

\u4fee\u6539\u79d8\u94a5A\u7684\u8fc7\u7a0b\uff1a<\/strong><\/p>\n

\u7b2c6\u30017\u30018\u5b57\u8282\u6700\u9ad8\u4f4d\uff08\u7b2c7\u4f4d\uff09\u51fa\u5382\u65f6\u5206\u522b\u4e3a0 0 1\uff0c\u5219\u63a7\u5236\u6a21\u5f0f\u5982\u4e0b\u6240\u793a\uff1a\u9700\u8981\u4fee\u6539\u79d8\u94a5A\uff0c\u9700\u8981\u5148\u4f20\u5165\u6700\u521d\u7684\u79d8\u94a5A<\/strong><\/p>\n

\"\u7269\u8054\u7f51\u4e4bRFID\u4e09\uff08NFC\uff09<\/p>\n

1\u3001\u5524\u9192<\/strong><\/p>\n

2\u3001\u626b\u63cf\u5361\u7247<\/strong><\/p>\n

3\u3001\u8ba4\u8bc1\uff08\u6b64\u65f6\u5fc5\u987b\u4f20\u5165\u79d8\u94a5A\uff0c\u624d\u80fd\u4fee\u6539\u79d8\u94a5A\uff09<\/strong><\/p>\n

4\u3001\u4fee\u6539\u79d8\u94a5A\uff08<\/strong>16bytes\uff0c\u6ce8\u610f\uff0c\u4e0d\u8981\u4fee\u6539\u672c\u5bc6\u7801\u4ee5\u5916\u7684\u5176\u4ed6\u5730\u65b9\uff09<\/strong><\/p>\n

5\u3001\u4fdd\u5b58\u4fee\u6539<\/strong><\/p>\n

6\u3001\u91cd\u65b0\u8ba4\u8bc1<\/strong><\/p>\n

7\u3001\u6570\u636e\u7684\u8bfb\u5199<\/strong><\/p>\n

1\u3001\u8bfb\u5199\u5361\u6d41\u7a0b-\u638c\u63e1<\/p>\n

2\u3001\u8bfb\u5361(BLOCK0)\u5b9e\u6218-\u638c\u63e1<\/p>\n

3\u3001\u5199\u5361(BLOCK3)\u5b9e\u6218-\u638c\u63e1<\/p>\n

\u547d\u4ee4\u683c\u5f0f(P35\uff0cP33) \uff1a<\/p>\n

\u2022 \u5524\u9192<\/p>\n

\u2022 \u626b\u63cf<\/p>\n

\u2022 \u8ba4\u8bc1<\/p>\n

\u2022 \u8bfb\u5361<\/p>\n

\u2022 \u5524\u9192<\/p>\n

\u2022 \u626b\u63cf<\/p>\n

\u2022 \u8ba4\u8bc1<\/p>\n

\u2022 \u5199\u5361<\/p>\n

\u5524\u9192\u82af\u7247(P23,P99) \uff1a<\/p>\n

0x55,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<\/p>\n

0x00,0x00,0xFF,0x03,0xFD,0xD4,0x14,0x01,0x17,0x00<\/p>\n

\u4ece\u624b\u518c\u53ef\u4ee5\u770b\u51fa\uff0c\u5524\u9192\u547d\u4ee4\u8981\u5728\u539f\u6709\u7684\u6570\u636e\u5305\u4e4b\u524d\u52a0\u5165\u5524\u9192\u5934\uff0c\u8fd9\u4e2a\u6bd4\u8f83\u7279\u6b8a\u4e00\u70b9<\/p>\n

0xd4\u4ee3\u8868\u4e3b\u673a\u5411PN532\u5199\u5165\u6570\u636e<\/p>\n

0x14,0x01\u4ee3\u8868\u9009\u62e9\u4e86\u666e\u901a\u6a21\u5f0f<\/p>\n

\"\u7269\u8054\u7f51\u4e4bRFID\u4e09\uff08NFC\uff09<\/p>\n

\u547d\u4ee4\u683c\u5f0f(P35) \uff1a<\/p>\n

\u2022 \u626b\u63cf\u5361\u7247<\/p>\n

    0x4a, 0x02, 0x00   \/\/\u626b\u63cf\u547d\u4ee4\uff0c\u5361\u7247\u4e2a\u6570\uff0c\u6ce2\u7279\u7387<\/p>\n

\u2022 \u5e94\u7b54<\/p>\n

    0x4b, \u5e94\u7b54\u7801<\/p>\n

    0x02, \u5361\u7247\u4e2a\u6570<\/p>\n

    0x01, \u7b2c\u4e00\u4e2a\u5361\u7247<\/p>\n

    0x04, 0x00, \u5361\u7247\u7c7b\u578b<\/p>\n

    0x08, \u5361\u7247\u5bb9\u91cf<\/p>\n

    0x04, id\u957f\u5ea6<\/p>\n

    0x01, 0x02, 0x03, 0x04 \u5361\u7247id<\/p>\n

\u2022 \u8ba4\u8bc1\u5361\u7247<\/p>\n

    0x40, 0x01, 0x60, 0x02,  \u6570\u636e\u4ea4\u6362\u547d\u4ee4\uff0c1\u53f7\u5361\u7247\uff0cA\u8ba4\u8bc1\uff0c2\u5730\u5740<\/p>\n

    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \u79d8\u94a5<\/p>\n

    0x01, 0x02, 0x03, 0x04 \u5361\u7247id<\/p>\n

\u2022 \u5e94\u7b54<\/p>\n

    0x41, 0x00   \u65e0\u9519<\/p>\n

\u2022 \u8bfb\u5361<\/p>\n

    0x40, 0x01, 0x30, 0x02   \/\/\u4ea4\u6362\u6570\u636e\uff0c1\u53f7\u5361\uff0c\u8bfb\u53d6\u5757\uff0c2\u5730\u5740<\/p>\n

\u2022 \u5e94\u7b54<\/p>\n

    0x41, 0x00, 16bytes  \u5e94\u7b54\uff0c\u65e0\u9519\uff0c16\u4e2a\u6570\u636e<\/p>\n

\u2022 \u5199\u5361<\/p>\n

    0x40, 0x01, 0xa0, 0x02,   \u4ea4\u6362\u6570\u636e\uff0c1\u53f7\u5361\uff0c\u5199\u5165\u5757\uff0c2\u5730\u5740<\/p>\n

    1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6 \u6570\u636e<\/p>\n

\u2022 \u5e94\u7b54<\/p>\n

    0x41, 0x00 \u5e94\u7b54\uff0c\u65e0\u9519
\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014
 <\/p>\n

\u503c\u6bb5\u53ef\u4ee5\u5b9e\u73b0\u7535\u5b50\u94b1\u5305\u7684\u529f\u80fd \u6709\u6548\u7684\u547d\u4ee4\u6709 \u8bfb \u5199 \u589e \u51cf \u6062\u590d \u53d1\u9001
\u503c\u6bb5\u6709\u4e00\u4e2a\u56fa\u5b9a\u7684\u6570\u636e\u683c\u5f0f \u53ef\u4ee5\u8fdb\u884c\u9519\u8bef\u68c0\u6d4b\u548c\u7ea0\u6b63\u5e76\u5907\u4efd\u7ba1\u7406
\u503c\u6bb5\u53ea\u80fd\u5728\u503c\u6bb5\u683c\u5f0f\u7684\u5199\u64cd\u4f5c\u65f6\u4ea7\u751f <\/p>\n

\u2022 \u503c \u8868\u793a\u4e00\u4e2a\u5e26\u7b26\u53f7 4 \u5b57\u8282\u503c \u8fd9\u4e2a\u503c\u7684\u6700\u4f4e\u4e00\u4e2a\u5b57\u8282\u4fdd\u5b58\u5728\u6700\u4f4e\u7684\u5730\u5740\u4e2d \u53d6\u53cd\u7684\u5b57\u8282\u4ee5\u6807\u51c62 \u7684\u683c\u5f0f\u4fdd\u5b58 \u4e3a\u4e86\u4fdd\u8bc1\u6570\u636e\u7684\u6b63\u786e\u6027\u548c\u4fdd\u5bc6\u6027 \u503c\u88ab\u4fdd\u5b58\u4e86 3 \u6b21 \u4e24\u6b21\u4e0d\u53d6\u53cd\u4fdd\u5b58 \u4e00\u6b21\u53d6\u53cd\u4fdd\u5b58 <\/p>\n

\u2022 Adr \u8868\u793a\u4e00\u4e2a 1 \u5b57\u8282\u5730\u5740 \u5f53\u6267\u884c\u5f3a\u5927\u7684\u5907\u4efd\u7ba1\u7406\u65f6\u7528\u4e8e\u4fdd\u5b58\u5b58\u50a8\u6bb5\u7684\u5730\u5740 \u5730\u5740\u5b57\u8282\u4fdd\u5b58\u4e86 4\u6b21 \u53d6\u53cd\u548c\u4e0d\u53d6\u53cd\u5404\u4fdd\u5b58\u4e24\u6b21 \u5728\u6267\u884c\u589e \u51cf \u6062\u590d \u4f20\u9001\u64cd\u4f5c\u65f6 \u5730\u5740\u4fdd\u6301\u4e0d\u53d8 \u5b83\u53ea\u80fd\u901a\u8fc7\u5199\u547d\u4ee4\u6539\u53d8 <\/p>\n

\u2022 \u521d\u59cb\u5316\u4e3a\u56fa\u5b9a\u7684\u683c\u5f0f\uff08\u4f7f\u7528Write_Card\u51fd\u6570\u521d\u59cb\u5316\uff09<\/p>\n

   \u4ee5 block1\uff08\u5730\u5740\u4e3a1\uff09\u4e3a\u4f8b\uff1a        00,00,00,00,           ff,ff,ff,ff,    00,00,00,00,                1,fe,1,fe
                                                      \u503c\uff1a\u521d\u59cb\u5316\u4e3a0           \u503c\u53d6\u53cd           \u503c             \u4e24\u6b21\u5199\u5730\u5740\uff0c\u4e24\u6b21\u5730\u5740\u53d6\u53cd<\/p>\n

\u2022 \u5524\u9192<\/p>\n

\u2022 \u626b\u63cf<\/p>\n

\u2022 \u8ba4\u8bc1<\/p>\n

\u547d\u4ee4\u683c\u5f0f(P35\uff0cP33) \uff1a<\/p>\n

\u2022 \u5145\u503c<\/p>\n

    0x40, 0x01, 0xc1, 0x02, 1,0,0,0 \/\/\u4ea4\u6362\u6570\u636e\uff0c1\u53f7\u5361\uff0c\u5145\u503c\uff0c2\u5730\u5740\uff0c\u6570\u636e<\/p>\n

    0x40, 0x01, 0xB0, 0x02;\/\/\u4ea4\u6362\u6570\u636e\uff0c1\u53f7\u5361\uff0c\u4fdd\u5b58\uff0c2\u5730\u5740<\/p>\n

\u2022 \u5e94\u7b54<\/p>\n

    0x41, 0x00   \u5e94\u7b54\uff0c\u65e0\u9519<\/p>\n

\u2022 \u6263\u6b3e<\/p>\n

    0x40, 0x01, 0xc0, 0x02, 1,0,0,0;\/\/\u4ea4\u6362\u6570\u636e\uff0c1\u53f7\u5361\uff0c\u6263\u6b3e\uff0c2\u5730\u5740\uff0c\u6570\u636e<\/p>\n

    0x40, 0x01, 0xB0, 0x02;\/\/\u4ea4\u6362\u6570\u636e\uff0c1\u53f7\u5361\uff0c\u4fdd\u5b58\uff0c2\u5730\u5740<\/p>\n

\u2022 \u5e94\u7b54<\/p>\n

    0x41, 0x00 \u5e94\u7b54\uff0c\u65e0\u9519<\/p>\n

\u6ce8\u610f\uff1a\u5145\u503c\u6216\u8005\u6263\u6b3e\u64cd\u4f5c\u4e00\u5b9a\u8981\u52a0\u4e0a\u4fdd\u5b58\u52a8\u4f5c<\/p>\n

  \u5145\u503c\u6846\u67b6\uff08\u6263\u6b3e\u7c7b\u4f3c\u64cd\u4f5c\uff09\uff1a
 
  \/\/while(1)
  uint8_ t value[4]= {0xff, 0x00, 0x00, 0x00};
  uint8_ t data[16]= {0x0a, 0x00, 0x00, 0x00, 0xf5, 0xff,0xff, 0xff, 0x0a, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x0l, 0xfe};
  uint8_ t key[6]= {0xff, 0xff,0xff, 0xff, 0xff,0xff};
  HAL_Delay(l000) ; 
  Wake_Card();\/\/\u5524\u9192
  Scan_Card();  \/\/\u626b\u63cf
  author(1, key) ; \/\/\u5730\u57401\u8ba4\u8bc1
  write(1, data) ;  \/\/\u5730\u57401\u521d\u59cb\u5316\u4e3a\u5145\u503c\u4ed8\u6b3e\u7684\u56fa\u5b9a\u683c\u5f0f
  increment(1, value);  \/\/\u5730\u57401\u5145\u503c
  transfer(1);   \/\/\u5730\u57401\u4fdd\u5b58
  read(1) ;  \/\/\u8bfb\u53d6\u5730\u57401\u7684\u6570\u636e
\u5982\u4e0b\u4e3a\u5168\u90e8\u76f8\u5173\u53c2\u8003\u4ee3\u7801\uff1a 
532.c  \u529f\u80fd\uff1a\u638c\u63e1NFC\u7684\u64cd\u4f5c\u6d41\u7a0b\u548c\u76f8\u5173\u529f\u80fd\u51fd\u6570
 
#include \"PN532.h\"
#include \"stm32f0xx_hal.h\"
#include \"dma.h\"
#include \"i2c.h\"
#include \"tim.h\"
#include \"usart.h\"
#include \"gpio.h\"
#include \"lcd.h\"
#include \"string.h\"
#include \"logo.h\"
 
#include \"stdlib.h\"
#include \"stdio.h\"
 
#define BUFFER_SIZE 128
 
uint8_t buf[100];
uint8_t len = 0;
uint8_t write_data[16];
uint8_t write_value[4];
uint8_t ID[4];
uint8_t KEY_A[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
extern uint8_t rx_buffer[128];
 
uint8_t WAKE[24] = {0x55,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x03,0xFD,0xD4,0x14,0x01,0x17,0x00};           \/\/\u5524\u9192\u6a21\u5757
uint8_t WAKEBACK[9]         = {0x00,0x00,0xFF,0x02,0xFE,0xD5,0x15,0x16,0x00};
\/* PN532\u64cd\u4f5c\u547d\u4ee4\u7ed3\u6784\u5b9a\u4e49 *\/
struct Pn532Cmd{
\n
    uint8_t Preamble;               \/\/\u524d\u5e8f 
    uint8_t StartCode[2];         \/\/\u5305\u5934 
    uint8_t LEN;                             \/\/\u5305\u957f TFI+PD0...PDn
    uint8_t LCS;                  \/\/\u957f\u5ea6\u6821\u9a8c LEN + LCS = 0x00
    uint8_t TFI;                  \/\/\u547d\u4ee4\u5e27\u8bc6\u522b\u4f4d (0xD4:input) (0xD5:output)
    uint8_t *data;                \/\/\u6570\u636e\u57df
    uint8_t DCS;                  \/\/\u6570\u636e\u6821\u9a8c [TFI + PD0 + PD1 + ... + PDn + DCS] = 0x00
    uint8_t Postamble;            \/\/\u540e\u5e8f 
};
 
struct Pn532Cmd cmd ={
\n
    .Preamble = 0x00,
    .StartCode[0] = 0x00,
    .StartCode[1] = 0xff,
    .TFI = 0xd4,
    .Postamble = 0x00,
};
 
uint8_t SCAN[3] = {0x4a, 0x02, 0x00};     \/\/\u626b\u63cf\u6307\u4ee4\uff0c\u5361\u7247\u4e2a\u6570\uff0c\u6ce2\u7279\u7387
\/*
4B \u5e94\u7b54
02 \u76ee\u6807\u4e2a\u6570
01 \u7b2c\u4e00\u4e2a\u76ee\u6807
04 00 \u9009\u5361\u5e94\u7b54
08    \u9632\u51b2\u7a81\u5e94\u7b54
04    id\u957f\u5ea6
12 67 58 32  id
02  
44 00
00
08
88 04 B6 E4 00 00 00 00
*\/
uint8_t AUTHOR[14] = {0x40,0x01,0x60,0x02,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x02,0x03,0x04};\/\/\u4ea4\u6362\u6570\u636e\uff0c1\u5361\uff0c\u8ba4\u8bc1\u547d\u4ee4\uff0c2\u5730\u5740\uff0ckey\uff0cid
\/*41 0  \u5e94\u7b54\uff0c\u65e0\u63aa*\/
uint8_t READ[4] = {0x40, 0x01, 0x30, 0x02};\/\/\u4ea4\u6362\u6570\u636e\uff0c1\u53f7\u5361\uff0c\u8bfb\u53d6\u5757\uff0c2\u5730\u5740
\/*41, 0, 16bytes  \u5e94\u7b54\uff0c\u65e0\u9519\uff0c16\u4e2a\u6570\u636e*\/
uint8_t WRITE[20] = {0x40, 0x01, 0xa0, 0x02, 1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6};\/\/\u4ea4\u6362\u6570\u636e\uff0c1\u53f7\u5361\uff0c\u5199\u5165\u5757\uff0c2\u5730\u5740\uff0c\u6570\u636e
\/*41, 0 \u5e94\u7b54\uff0c\u65e0\u9519*\/
uint8_t INCREMENT[8] = {0x40, 0x01, 0xc1, 0x02, 1,0,0,0};\/\/\u4ea4\u6362\u6570\u636e\uff0c1\u53f7\u5361\uff0c\u5145\u503c\uff0c2\u5730\u5740\uff0c\u6570\u636e
uint8_t DECREMENT[8] = {0x40, 0x01, 0xc0, 0x02, 1,0,0,0};\/\/\u4ea4\u6362\u6570\u636e\uff0c1\u53f7\u5361\uff0c\u6263\u6b3e\uff0c2\u5730\u5740\uff0c\u6570\u636e
uint8_t TRANSFER[4] = {0x40, 0x01, 0xB0, 0x02};\/\/\u4ea4\u6362\u6570\u636e\uff0c1\u53f7\u5361\uff0c\u4fdd\u5b58\uff0c2\u5730\u5740
\/*******************************************************************************
* Function Name      : GetCmd
* Description        : \u62ff\u5230\u547d\u4ee4\u5305\uff0c\u5728buf\u4e2d\u5b58\u653e\u4e00\u4e2a\u5b8c\u6574\u7684\u6570\u636e\u5305
* Input              : \u547d\u4ee4\uff0c\u547d\u4ee4\u957f\u5ea6
* Output             : none
* Return             : none
* date                : 2016.12.28
* modify            :
*******************************************************************************\/
void GetCmd(uint8_t *data, uint8_t l)
{
\n
    uint8_t temp=0;
    len = 0;
    memset(buf,0,100);
    cmd.LEN = l+1;            \/\/\u8ba1\u7b97\u957f\u5ea6\uff0c\u5305\u62ec\u6570\u636e\u957f\u5ea6\u548c\u4f20\u8f93\u6807\u5fd7
    cmd.LCS = 0-cmd.LEN;    \/\/\u957f\u5ea6\u6821\u9a8c\u548c
    cmd.data = data;
    for(int i=0; i<l; i++)    \/\/\u62ff\u5230\u6570\u636e
        temp += data[i];
    temp += cmd.TFI;
    cmd.DCS = 0-temp;        \/\/\u6570\u636e\u6821\u9a8c\u548c
    len = 1+2+1+1+cmd.LEN+1+1;
    
    buf[0] = 0x00;        \/\/\u5305\u524d\u5e8f
    buf[1] = 0x00;        \/\/\u5305\u5934
    buf[2] = 0xff;
    buf[3] = cmd.LEN;    \/\/\u957f\u5ea6
    buf[4] = cmd.LCS;    \/\/\u6821\u9a8c\u548c
    buf[5] = 0xd4;        \/\/\u8f93\u51fa
    memcpy(&buf[6], cmd.data, l);    \/\/\u547d\u4ee4
    buf[6+l] = cmd.DCS;    \/\/\u6821\u9a8c\u548c
    buf[7+l] = cmd.Postamble;    \/\/\u540e\u5e8f
}
\/*******************************************************************************
* Function Name      : SendCmd
* Description        : \u4e32\u53e3\u53d1\u9001\u547d\u4ee4\uff0c\u6a21\u5757\u4f7f\u7528\u9ad8\u901f\u4e32\u53e3\u548c\u4e3b\u673a\u901a\u4fe1
* Input              : none
* Output             : none
* Return             : none
* date                : 2016.12.28
* modify            :
*******************************************************************************\/
void SendCmd(uint8_t *command, uint8_t num)
{
\n
    while(HAL_UART_Transmit(&huart2, command, num, 100));
}
\/*******************************************************************************
* Function Name      : Wake_Card
* Description        : \u5524\u9192\u5361\u7247\uff0c\u8fd9\u4e2a\u547d\u4ee4\u7279\u6b8a
* Input              : none
* Output             : none
* Return             : \u6210\u529f0\uff0c\u5931\u8d251
* date                : 2016,12,28
* modify            :
*******************************************************************************\/
uint8_t Wake_Card()
{
\n
    memset(rx_buffer,0,sizeof(rx_buffer));
    SendCmd(WAKE, 24);
    HAL_Delay(50);
    if(!memcmp(WAKEBACK, rx_buffer, 9))
    {
\n
        printf(\"wake success\\n\");
        return 0;
    }
    printf(\"wake failed\\n\");
    return 1;
}
 
\/*******************************************************************************
* Function Name      : Scan_Card()
* Description        : \u626b\u63cf\u5361\u7247\uff0c\u53ef\u4ee5\u62ff\u5230\u5361\u7247\u7684ID
* Input              : none
* Output             : none
* Return             : \u6210\u529f\u8fd4\u56de0\uff0c\u5931\u8d25\u8fd4\u56de1
* date                : 2016.12.28
* modify            :
*******************************************************************************\/
uint8_t Scan_Card()
{
\n
    memset(rx_buffer,0,sizeof(rx_buffer));
    GetCmd(SCAN, 3);
    SendCmd(buf, len);
    HAL_Delay(100);
    if(rx_buffer[5]==0xd5 && rx_buffer[6]==0x4b)
    {
\n
        printf(\"scan success\\n\");
        memcpy(ID, &rx_buffer[13], 4);    \/\/\u62ff\u5230\u5361\u7247ID
\/\/        for(int i=0; i<32; i++)
\/\/            printf(\"0x%x,\", rx_buffer[i]);
\/\/        printf(\"\\n\");
        return 0;
    }
    printf(\"scan failed\\n\");
    return 1;
}
\/*******************************************************************************
* Function Name      : Author_Card
* Description        : \u8ba4\u8bc1\u5361\u7247\u79d8\u94a5A\uff0c\u9700\u8981\u79d8\u94a5\u548cid
* Input              : none
* Output             : none
* Return             : none
* date                : 2016.12.28
* modify            :
*******************************************************************************\/
uint8_t Author_Card()
{
\n
    memset(rx_buffer,0,sizeof(rx_buffer));
    memcpy(&AUTHOR[10], ID, 4);        \/\/\u4f20\u5165id
    memcpy(&AUTHOR[4], KEY_A, 6);    \/\/\u4f20\u5165key A
    GetCmd(AUTHOR, 14);
    SendCmd(buf, len);
    HAL_Delay(100);
    if(rx_buffer[5]==0xd5 && rx_buffer[6]==0x41 && rx_buffer[7]==0x00)
    {
\n
        printf(\"author success\\n\");    \/\/\u8ba4\u8bc1\u6210\u529f
        return 0;
    }
    printf(\"author failed\\n\");
    return 1;
}
\/*******************************************************************************
* Function Name      : Read_Card()
* Description        : \u8bfb\u53d6\u5361\u7247\u5185\u5bb9
* Input              : none
* Output             : none
* Return             : \u6210\u529f\u8fd4\u56de0\uff0c\u5931\u8d25\u8fd4\u56de1
* date                :
* modify            :
*******************************************************************************\/
uint8_t Read_Card()
{
\n
    memset(rx_buffer,0,sizeof(rx_buffer));
    READ[3] = cmd_addr;    \/\/\u8bbe\u7f6e\u5730\u5740
    GetCmd(READ, 4);
    SendCmd(buf, len);
    HAL_Delay(100);
    if(rx_buffer[5]==0xd5 && rx_buffer[6]==0x41 && rx_buffer[7]==0x00)
    {
\n
        printf(\"read success\\n\");    \/\/\u8bfb\u53d6\u6210\u529f
        for(int i=0; i<16; i++)
            printf(\"0x%x,\", rx_buffer[8+i]);
        printf(\"\\n\");
        return 0;
    }
    return 1;
}
\/*******************************************************************************
* Function Name      : Write_Card
* Description        : \u5411\u5361\u7247\u5199\u5165\u5185\u5bb9
* Input              : none
* Output             : none
* Return             : \u6210\u529f\u8fd4\u56de0\uff0c\u5931\u8d25\u8fd4\u56de1
* date                :
* modify            :
*******************************************************************************\/
uint8_t Write_Card()
{
\n
    memset(rx_buffer,0,sizeof(rx_buffer));
    WRITE[3] = cmd_addr;    \/\/\u8bbe\u7f6e\u5730\u5740
    memcpy(&WRITE[4], write_data, 16);    \/\/\u8bbe\u7f6e\u8981\u5199\u5165\u7684\u6570\u636e
    GetCmd(WRITE, 20);
    SendCmd(buf, len);
    HAL_Delay(100);
    if(rx_buffer[5]==0xd5 && rx_buffer[6]==0x41 && rx_buffer[7]==0x00)
    {
\n
        printf(\"write success\\n\");    \/\/\u5199\u5165\u6210\u529f
        Read_Card();
        return 0;
    }
    return 1;
}
\/*******************************************************************************
* Function Name      : Increment_Value
* Description        : \u5145\u503c
* Input              : none
* Output             : none
* Return             : \u6210\u529f\u8fd4\u56de0\uff0c\u5931\u8d25\u8fd4\u56de1
* date                :
* modify            :
*******************************************************************************\/
uint8_t Increment_Value()
{
\n
    memset(rx_buffer,0,sizeof(rx_buffer));
    INCREMENT[3] = cmd_addr;    \/\/\u5145\u503c\u5730\u5740
    memcpy(&INCREMENT[4], write_value, 4);    \/\/\u5145\u503c\u91d1\u989d
    GetCmd(INCREMENT, 8);
    SendCmd(buf, len);
    HAL_Delay(100);
    if(rx_buffer[5]==0xd5 && rx_buffer[6]==0x41 && rx_buffer[7]==0x00)
    {
\n
        printf(\"increment success\\n\");
        return 0;
    }
    return 1;
}
\/*******************************************************************************
* Function Name      : Decrement_Value
* Description        : \u6263\u6b3e
* Input              : none
* Output             : none
* Return             : \u6210\u529f\u8fd4\u56de0\uff0c\u5931\u8d25\u8fd4\u56de1
* date                :
* modify            :
*******************************************************************************\/
uint8_t Decrement_Value()
{
\n
    memset(rx_buffer,0,sizeof(rx_buffer));
    INCREMENT[3] = cmd_addr;    \/\/\u6263\u6b3e\u5730\u5740
    memcpy(&DECREMENT[4], write_value, 4);    \/\/\u6263\u6b3e\u91d1\u989d
    GetCmd(DECREMENT, 8);
    HAL_Delay(100);
    if(rx_buffer[5]==0xd5 && rx_buffer[6]==0x41 && rx_buffer[7]==0x00)
    {
\n
        printf(\"decrement success\\n\");
        return 0;
    }
    return 1;
}
\/*******************************************************************************
* Function Name      : Transfer_Value()
* Description        : \u5c06\u7f13\u5b58\u533a\u6570\u636e\u4fdd\u5b58
* Input              : none
* Output             : none
* Return             : none
* date                :
* modify            :
*******************************************************************************\/
uint8_t Transfer_Value()
{
\n
    memset(rx_buffer,0,sizeof(rx_buffer));
    TRANSFER[3] = cmd_addr;    \/\/\u4fdd\u5b58\u5730\u5740
    GetCmd(TRANSFER, 4);
    HAL_Delay(100);
    if(rx_buffer[5]==0xd5 && rx_buffer[6]==0x41 && rx_buffer[7]==0x00)
    {
\n
        printf(\"Transfer success\\n\");
        Read_Card();
        return 0;
    }
    return 1;
}
\/*******************************************************************************
* Function Name      : PN532_Read()
* Description        : \u4ece\u5361\u7247\u8bfb\u5185\u5bb9
* Input              : none
* Output             : none
* Return             : none
* date                : 2016.12.28
* modify            :
*******************************************************************************\/
void PN532_Read()
{
\n
    if(!Wake_Card())  \/\/\u5524\u9192\u5361\u7247
    {
\n
        if(!Scan_Card())  \/\/\u626b\u63cf\u5361\u7247
        {
\n
            if(!Author_Card())  \/\/\u8ba4\u8bc1\u5361\u7247
            {
\n
                Read_Card();   \/\/\u8bfb\u53d6\u5361\u7247\u7684\u6570\u636e
            }
        }
    }
}
\/*******************************************************************************
* Function Name      : PN532_Write()
* Description        : \u5411\u5361\u7247\u5199\u5165\u5185\u5bb9
* Input              : none
* Output             : none
* Return             : none
* date                : 2016.12.28
* modify            :
*******************************************************************************\/
void PN532_Write()
{
\n
    if(!Wake_Card())  \/\/\u5524\u9192\u5361\u7247
    {
\n
        if(!Scan_Card())   \/\/\u626b\u63cf\u5361\u7247
        {
\n
            if(!Author_Card())  \/\/\u8ba4\u8bc1\u5361\u7247
            {
\n
                Write_Card();   \/\/\u5411\u5361\u7247\u5199\u6570\u636e
            }
        }
    }
}
\/*******************************************************************************
* Function Name      : PN532_Value(uint8_t mode)
* Description        : \u5361\u7247\u94b1\u5305\u64cd\u4f5c\uff0c\u6839\u636e\u53c2\u6570\u9009\u62e9\u5145\u503c\u6216\u8005\u6263\u6b3e
* Input              : \u94b1\u5305\u6a21\u5f0f\uff0c\u5145\u503c\u6216\u8005\u6263\u6b3e
* Output             : none
* Return             : none
* date                : 2016.12.28
* modify            :
*******************************************************************************\/
void PN532_Value(uint8_t mode)
{
\n
    if(!Wake_Card())
    {
\n
        if(!Scan_Card())
        {
\n
            if(!Author_Card())
            {
\n
                if(mode==0xc0)
                    Increment_Value();
                if(mode==0xc1)
                    Decrement_Value();
                Transfer_Value();
            }
        }
    }
}
 
 
void CardData_screen_LCD_show(uint8_t *data, uint8_t num)
{
\n
    char buf1[16];
    snprintf(buf1,4*num,\"%02x%02x%02x%02x\",data[0],data[1],data[2],data[3]);
    Gui_DrawFont_GBK16(44,80,BLACK,GREEN,(uint8_t*)buf1);
    memset(buf1,0,sizeof(buf1));
}
 
\/************************
*func : \u5f00\u673a\u521d\u59cb\u5316
*************************\/
void BoardInit(void)
{
\n
    printf(\"NFC read card!\\n\");
    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);      \/\/beep off
    Lcd_Init();                                            \/\/lcd init:clear screen green, show logo, show words
    Lcd_Clear(GREEN);
    showimage_farsight(gImage_logo);
    Gui_DrawFont_GBK16(20,50,BLUE,GREEN,(uint8_t *)\"NFC\");
    Gui_DrawFont_GBK16(76,50,BLUE,GREEN,(uint8_t *)\"RFID\");
    Gui_DrawFont_GBK16(15,80,RED,GREEN,(uint8_t *)\"ID:\");    
    __HAL_I2C_ENABLE_IT(&hi2c1,I2C_IT_ADDRI);
    __HAL_UART_ENABLE_IT(&huart2, UART_IT_IDLE);
    HAL_UART_Receive_DMA(&huart2,rx_buffer,BUFFER_SIZE);    
    BeepTickDouble();
}
main.c\u6587\u4ef6  \u5bf9nfc\u505a\u5177\u4f53\u64cd\u4f5c\u5b9e\u9a8c
 
#include \"stm32f0xx_hal.h\"
#include \"dma.h\"
#include \"i2c.h\"
#include \"tim.h\"
#include \"usart.h\"
#include \"gpio.h\"
#include \"stdlib.h\"
#include \"string.h\"
#include \"stdio.h\"
 
#include \"PN532.h\"
 
void SystemClock_Config(void);
void Error_Handler(void);
 
extern uint8_t KEY2_FLAG;
extern uint8_t KEY3_FLAG;
 
unsigned char cmd_dat[16];\/\/\u5361\u7247\u8981\u5199\u7684\u6570\u636e
unsigned char aRxBuffer[2];
unsigned char cmd_buf[100];    \/\/\u4e32\u53e3\u6570\u636e\u7f13\u51b2\u533a
unsigned char count = 0;
unsigned char cmd_type;    \/\/\u547d\u4ee4\u7c7b\u578b\uff0c\u8bfb\u6216\u8005\u5199\uff0cr\/w
unsigned char cmd_addr;    \/\/\u64cd\u4f5c\u7684\u5730\u57400~63
unsigned char cmd_check;\/\/\u4e8c\u7ea7\u547d\u4ee4\uff0c0\u6b63\u5e38\u533a\u57df\uff0c1\u6539\u79d8\u94a5\uff0c2\u5145\u503c\uff0c3\u6263\u6b3e\uff0c4\u6539\u63a7\u5236\u5b57
unsigned char KEY_B[6];\/\/\u79d8\u94a5B
unsigned char CMD_OVER = 0;    
unsigned char DATA_OVER = 0;
unsigned char error = 0;
int main(void)
{
\n
    uint8_t j;
 
  HAL_Init();
 
  SystemClock_Config();
 
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_I2C1_Init();
  MX_TIM6_Init();
  MX_USART1_UART_Init();
  MX_USART2_UART_Init();
 
    BoardInit();\/\/\u5f00\u673a\u521d\u59cb\u5316
    PN532_Read();
 
\/\/\u5728\u4e2d\u65ad\u91cc\u63a5\u6536\u4e32\u53e3\u6570\u636e
    HAL_UART_Receive_IT(&huart1,aRxBuffer,1);
 
    while (1)
    {
\n
        if(error)
        {
\n
            printf(\"\u6307\u4ee4\u9519\u8bef\\n\");
            error = 0;
            continue;
        }
        if(CMD_OVER)
        {
\n
            if(cmd_type == 'r')
            {
\n
                if(cmd_addr<=63 && cmd_addr>=0)
                    PN532_Read();
                else
                    printf(\"\u5730\u5740\u4e0d\u5bf9\\n\");
                CMD_OVER = 0;
                cmd_type = 0;
            }
            else if(cmd_type == 'w')
            {
\n
                if(DATA_OVER)
                {
\n
                    printf(\"data over\\n\");
                    j = Write_Check();
                    printf(\"j = %d\\n\", j);
                    if(j==0)
                    {
\n
                        if(cmd_check==0||cmd_check==1)
                            PN532_Write();
                        else if(cmd_check==2)
                            PN532_Value(0xc1);
                        else if(cmd_check==3)
                            PN532_Value(0xc0);
                    }
                    else if(j==1)
                        printf(\"\u8981\u5199\u5165\u7684\u5730\u5740\u4e0d\u5bf9\\n\");
                    else if(j==2)
                        printf(\"\u8981\u5199\u5165\u7684\u63a7\u5236\u5b57\u4e0d\u5bf9\\n\");
                    CMD_OVER = 0;
                    DATA_OVER = 0;
                    cmd_type = 0;
                    cmd_check = 0;
                    
                }
            }
        }
    }
 
}
 
\/*******************************************************************************
* Function Name      :
* Description        : \u4e32\u53e3\u63a5\u6536\u56de\u8c03\u51fd\u6570\uff0c\u4e32\u53e3\u63a5\u6536\u4e2d\u65ad\u6700\u7ec8\u4f1a\u8c03\u7528\u8fd9\u91cc
* Input              :
* Output             : 
* Return             : 
* date                : 2016.12.27
* modify            :
*******************************************************************************\/
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
\n
\/\/    printf(\"r\");
    if (huart == &huart1)
    {
\n
        cmd_buf[count] = USART1->RDR;
        count++;
        if(cmd_buf[count-2]==0x0d && cmd_buf[count-1]==0x0a)    \/\/\u7ed3\u675f\u7b26
        {
\n
            if(cmd_buf[0]=='c' && count==18)                \/\/\u547d\u4ee4
            {
\n
                cmd_type = cmd_buf[1];        \/\/\u83b7\u53d6\u547d\u4ee4 \u8bfb\/\u5199
                cmd_check = cmd_buf[2];        \/\/\u83b7\u53d6\u547d\u4ee4\u7ea7\u522b \u5199\u666e\u901a\u533a\u8fd8\u662f\u7279\u6b8a\u533a \u6216\u8005\u662f\u5145\u503c
                cmd_addr = cmd_buf[3];        \/\/\u83b7\u53d6\u64cd\u4f5c\u5730\u5740
                memcpy(KEY_A, &cmd_buf[4], 6);\/\/\u83b7\u53d6\u79d8\u94a5A
                memcpy(KEY_B, &cmd_buf[10], 6);\/\/\u83b7\u53d6\u79d8\u94a5B
                CMD_OVER = 1;
            }
            else if(cmd_buf[0]=='d' && count==19)        \/\/\u6570\u636e
            {
\n
                memcpy(cmd_dat, &cmd_buf[1], 16);
                DATA_OVER = 1;
            }
            else if(cmd_buf[0]=='d' && count==7)        \/\/\u6570\u636e
            {
\n
                memcpy(cmd_dat, &cmd_buf[1], 4);
                DATA_OVER = 1;
            }
            else
                error = 1;        \/\/\u683c\u5f0f\u5b8c\u5168\u4e0d\u6b63\u786e
            
            count = 0;
            memset(cmd_buf, 0, 100);
        }
    }
    HAL_UART_Receive_IT(&huart1,aRxBuffer,1);
}
\/*******************************************************************************
* Function Name      : Write_Check()
* Description        : \u5361\u7247\u5199\u5165\u68c0\u6d4b\u51fd\u6570\uff0c\u76ee\u524d\u6682\u4e0d\u652f\u6301\u63a7\u5236\u5b57\u7684\u4fee\u6539
* Input              : none
* Output             : none
* Return             : \u6210\u529f0\uff0c\u5730\u5740\u9519\u8bef1\uff0c\u63a7\u5236\u5b57\u9519\u8bef2
* date                : 2016.12.27
* modify            :
*******************************************************************************\/
uint8_t Write_Check()
{
\n
    if(cmd_addr>=0 && cmd_addr<=63)
    {
\n
        if(cmd_check==0 || cmd_check==2 || cmd_check==3)    \/\/\u666e\u901a\u5199\u5165\uff0c\u4e0d\u5305\u542bblock3\uff0c\u56e0\u6b64\u8981\u68c0\u6d4b\u5730\u5740
        {
\n
            if(cmd_addr!=0 && (cmd_addr+1)%4!=0)
                return 0;
            else
                return 1;
        }
        else if(cmd_check==1)    \/\/\u4fee\u6539\u79d8\u94a5A\uff0c\u63a7\u5236\u533a\u4e0d\u53ef\u4ee5\u6539\u52a8
        {
\n
            if(cmd_addr==0 || (cmd_addr+1)%4!=0)    \/\/\u5730\u5740\u4e0d\u6b63\u786e
                return 1;
            if(cmd_dat[6]!=0xff || cmd_dat[7]!=0x07 || cmd_dat[8]!=0x80 || cmd_dat[9]!=0x69) \/\/\u63a7\u5236\u5b57\u4e0d\u6b63\u786e
                return 2;
            else 
                return 0;
        }
    }
    else
        return 1; \/\/\u5730\u5740\u4e0d\u6b63\u786e
}
 
void SystemClock_Config(void)
{
\n
    ...
}
 
int fputc(int ch, FILE *f)
{     
    while((USART1->ISR&0X40)==0);
    USART1->TDR = (uint8_t) ch;      
    return ch;
}
 
#ifdef USE_FULL_ASSERT
 
#endif
 
 <\/p>\n","protected":false},"excerpt":{"rendered":"\u7269\u8054\u7f51\u4e4bRFID\u4e09\uff08NFC\uff09\u5185\u5bb9\u63d0\u7eb21\u3001NFC\u7684\u6982\u5ff5-\u719f\u60892\u3001NFC\u548cRFID\u533a\u522b-\u638c\u63e13\u3001NFC\u7684\u5de5\u4f5c\u6a21\u5f0f-\u638c\u63e1nfc\u6982\u8ff0\uff1aNFC(NearFieldCommuni...","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"_links":{"self":[{"href":"https:\/\/mushiming.com\/wp-json\/wp\/v2\/posts\/7297"}],"collection":[{"href":"https:\/\/mushiming.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mushiming.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mushiming.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mushiming.com\/wp-json\/wp\/v2\/comments?post=7297"}],"version-history":[{"count":0,"href":"https:\/\/mushiming.com\/wp-json\/wp\/v2\/posts\/7297\/revisions"}],"wp:attachment":[{"href":"https:\/\/mushiming.com\/wp-json\/wp\/v2\/media?parent=7297"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mushiming.com\/wp-json\/wp\/v2\/categories?post=7297"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mushiming.com\/wp-json\/wp\/v2\/tags?post=7297"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}