想請問使用PICC_INCREMENT時進入PcdValue(PICC_INCREMENT, uAddr, Add_Money) ,(ucComMF522Buf[0] & 0x0F) != 0x0A)一直無法順利通過
是否使用的地址錯誤
void RC522_Handel(void);
unsigned char g_uUartTxIdx = 0;
unsigned char g_uUartTxFlag = 0;
unsigned char g_uUartTxTab[30] = {0};
unsigned char g_uUartRxIdx = 0;
unsigned char g_uUartRxFlag = 0;
unsigned char g_uUartRxTab[30] = {0};
void SysMainTask(void);
unsigned char SumCheck(unsigned char len,unsigned char *buf);
void UART2_TxTask(void);
void BEE(void);
char PcdValue(unsigned char dd_mode,unsigned char addr,unsigned char *pValue);
unsigned char Add_Money[4] = {0,0,0,0}; ;
INT8U card_transaction(INT8U uAddr,INT8U *key,INT8U *data,u32 money,char action);
unsigned char RFID[16];//={0x03, 0x00 , 0x00 , 0x00 , 0xfc , 0xff , 0xff , 0xff , 0x03 , 0x00 , 0x00 , 0x00 , 0x08 , 0xf7 , 0x08 , 0xf7}; //¦s©ñRFID
unsigned char commend[16]={0x01,0x09,0x01,0x01,0x01,0x01,0xff,0x07,0x80,0x29,0xff,0xff,0xff,0xff,0xff,0xff};
unsigned char CT[2];
unsigned char SN[4];
unsigned char lxl_bit=0;
unsigned char card1_bit=0;
unsigned char card2_bit=0;
unsigned char card3_bit=0;
unsigned char card4_bit=0;
unsigned char total=0;
unsigned char lxl[4]={196,58,104,217};
unsigned char card_1[4]={83,106,11,1};
unsigned char card_2[4]={208,121,31,57};
unsigned char card_3[4]={176,177,143,165};
unsigned char card_4[4]={5,158,10,136};
u8 KEY[6]={0xff,0xff,0xff,0xff,0xff,0xff};
u8 AUDIO_OPEN[6] = {0xAA, 0x07, 0x02, 0x00, 0x09, 0xBC};
unsigned char RFID1[16]={0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x07,0x80,0x29,0xff,0xff,0xff,0xff,0xff,0xff};
unsigned char ssstatus;
unsigned char s=0x08;
int main(void)
{
uint8_t output_test=0;
uint32_t test_count=0;
// int len;
// u8 ret;
// u8 buf[16];
char strbuf[128];
u8 time_cnt=0;
// float ftmp;
// uint8_t ctmp[8];
// int i;
u8 test_count2=0; //,test_on=0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
GPIO_Configuration();
output_test=1; // LED light on
/* DeInitialize STM32 Cryptographic Library */
Crypto_DeInit();
uart_set();
RC522_uConfig();
PcdReset();
M500PcdConfigISOType('A');
/* Config SysTick */
if (SysTick_Config(SystemCoreClock / 2000)) // frank,systick
{
/* Capture error */
while (1);
}
//
// udf_ELS61_Restart(); // 4G Reset
//
// RTC_Init();
// 4463 test
// RFInit();
// RFRxMode();
udf_printf("\rStart\n\r");
//BEE();
// BuzUpdateTask();
/* Infinite loop */
while (1)
{
// SysMainTask();
if (test_count == 0)
{
// USART_SendData(USART1, 'Q');
// while(!(USART1->STS & USART_FLAG_TXE));
}
test_count++;
if (test_count >= 50000)
{
test_count=0;
func2=1;
test_count2++;
RC522_Handel();
}
void RC522_Handel(void)
{
int i;
u32 card_number_D=0;
char strbuf[32];
unsigned char uStatus,uPcd_ID[4] ={0},uLen = 0,uData[16]= {0},exID[13] = {0},uCmd = 0;
static enum {FALSE = 0, TRUE = !FALSE} uNewMark = FALSE;
unsigned long ulPcdID = 0;
unsigned char uData_title[6] = {0xAA,0xAA,0x01,0x30,0x17,0x01};
unsigned char uData_All[29] = {0xAA,0xAA,0x01,0x30,0x17,0x08,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF};
char g_uUartRxTab[]={0xAA,0xAA,0x01 ,0x30 ,0x17 ,0x08 ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0xFF ,0x01 ,0x02 ,0x03 ,0x04 ,0x01 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0xa9};
if(uCmd == 0x30)//¥[È
{
card_transaction(s,&g_uUartRxTab[6],&g_uUartRxTab[12],100,PICC_INCREMENT);
}
}
char PcdValue(unsigned char dd_mode,unsigned char addr,unsigned char *pValue)
{
char status;
unsigned int unLen;
unsigned char i,ucComMF522Buf[MAXRLEN];
ucComMF522Buf[0] = dd_mode;
ucComMF522Buf[1] = addr;
CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A))
{
status = MI_ERR;
}
if(status !=MI_OK)
{
udf_printf("wtf");
}
if (status == MI_OK)
{
// memcpy(ucComMF522Buf, pValue, 4);
for (i=0; i<16; i++)
{ ucComMF522Buf[i] = *(pValue+i); }
CalulateCRC(ucComMF522Buf,4,&ucComMF522Buf[4]);
unLen = 0;
status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,6,ucComMF522Buf,&unLen);
if (status != MI_ERR)
{ status = MI_OK; }
}
if (status == MI_OK)
{
ucComMF522Buf[0] = PICC_TRANSFER;
ucComMF522Buf[1] = addr;
CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]);
status = PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);
if ((status != MI_OK) || (unLen != 4) || ((ucComMF522Buf[0] & 0x0F) != 0x0A))
{ status = MI_ERR; }
}
return status;
}
INT8U card_transaction(INT8U uAddr,INT8U *key,INT8U *data,u32 money,char action)
{
INT8U uStatus = 0,uPcdID[4] = {0};
char strbuf[32],temp[16];
int i;
Add_Money[2] = money;
// if(uAddr > 63 || uAddr == 0 || (uAddr % 3) == 0)
// {
// udf_printf("Error Address\n\r");
// return 0x03; // µL®Äªº¶ô¦a§}
// }
if((uStatus = PcdRequest (PICC_REQALL, uPcdID)) != MI_OK)
{
do{
uStatus = PcdRequest (PICC_REQALL, uPcdID);
}while(uStatus != MI_OK && TIMEOUTADD <= 3);
}
if(uStatus == MI_OK)
{
if(MI_OK == PcdAnticoll(uPcdID))
{
if(MI_OK == PcdSelect(uPcdID))
{
if(MI_OK == PcdAuthState(PICC_AUTHENT1A,uAddr,key,uPcdID)) // ÃÜÂëÑé֤ͨ¹ý
{
if(MI_OK == PcdValue(PICC_INCREMENT, uAddr, Add_Money))
{
uStatus=MI_ERR;
uStatus=PcdRead(s,RFID);
Delay3(1);
if(uStatus==MI_OK)
{
udf_printf("=============================\n\r");
uStatus=MI_ERR;
Delay3(2);
for(i=0;i<16;i++)
{
temp[i]=RFID[i];
sprintf(strbuf,"%d ",temp[i]);
udf_printf(strbuf);
}
udf_printf("\n\r");
}
else
udf_printf ("\n\rADD success!\n\r");
udf_printf("=============================\n\r");
udf_printf("add ok\n\r");
return 0x05; // Êý¾Ýд³É¹¦
}
else
{
udf_printf("add fail\n\r");
return 0x04; // ²Ù×÷Òì³£
}
}
else
{
return 0x02; // ÃÜÂëÆ¥Åä´íÎó
}
}
}
}
return 0x01; // ÎÞ¿¨¡¢ÎÞЧ¿¨¡¢¶Á¿¨³¬Ê±
}
不知道你这个问题是否已经解决, 如果还没有解决的话: