|
尋卡 防沖撞 選卡 驗(yàn)證密碼a 寫塊 驗(yàn)證密碼b(前面都成功) 充值 到了充值這里就失敗了 求指點(diǎn)一下哪里有錯誤 謝謝。下面附上代碼
- unsigned char code data1[16] = {0x12,0x34,0x56,0x78,0xED,0xCB,0xA9,0x87,0x12,0x34,0x56,0x78,0x01,0xFE,0x01,0xFE};
- //M1卡的某一塊寫為如下格式,則該塊為錢包,可接收扣款和充值命令
- //4字節(jié)金額(低字節(jié)在前)+4字節(jié)金額取反+4字節(jié)金額+1字節(jié)塊地址+1字節(jié)塊地址取反+1字節(jié)塊地址+1字節(jié)塊地址取反
- unsigned char code data2[4] = {0,0,0,0x16};
- unsigned char code data3[4] = {0,0,0,0x17};
- unsigned char code DefaultKey[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
- unsigned char g_ucTempbuf[20];
- void main( ) {
- unsigned char status,i;
- unsigned int temp;
- InitializeSystem( );
- PcdReset();
- PcdAntennaOff();
- PcdAntennaOn();
- while (1) {
- status = PcdRequest(PICC_REQALL, g_ucTempbuf);//尋卡
- if (status != MI_OK) {
- InitializeSystem( );
- PcdReset();
- PcdAntennaOff();
- PcdAntennaOn();
- continue;
- }
- printf("卡的類型:");
- for(i=0; i<2; i++) {
- temp=g_ucTempbuf[i];
- printf("%X",temp);
- }
- status = PcdAnticoll(g_ucTempbuf);//防沖撞
- if (status != MI_OK) {
- continue;
- }
- ////////以下為超級終端打印出的內(nèi)容////////////////////////
- printf("卡序列號:"); //超級終端顯示,
- for(i=0; i<4; i++) {
- temp=g_ucTempbuf[i];
- printf("%X",temp);
- }
- ///////////////////////////////////////////////////////////
- status = PcdSelect(g_ucTempbuf);//選定卡片
- if (status != MI_OK) {
- continue;
- }
- status = PcdAuthState(PICC_AUTHENT1A, 1, DefaultKey, g_ucTempbuf);//驗(yàn)證卡片密碼
- if (status != MI_OK) {
- continue;
- }
- status = PcdWrite(1, data1);//寫塊
- if (status != MI_OK) {
- continue;
- }
- status = PcdAuthState(PICC_AUTHENT1B, 1, DefaultKey, g_ucTempbuf);//驗(yàn)證卡片密碼
- if (status != MI_OK) {
- continue;
- }
-
- status=PcdValue(PICC_INCREMENT,1,data3); //充值
- if (status != MI_OK)
- {
- printf("充值失敗\n");
- continue;
- }
復(fù)制代碼
|
|