uint8_t MFRC522_Check(uint8_t * id) { uint8_t status; status = MFRC522_Request(PICC_REQIDL, id); // Find cards, return card type if (status == MI_OK) status = MFRC522_Anticoll(id); // Card detected. Anti-collision, return card serial number 4 bytes MFRC522_Halt(); // Command card into hibernation return status; }
static int rc522_open(struct inode *inode, struct file *file) { uint8_t str[MAX_LEN]; uint8_t writeData[16]={1, 2, 3, 4, 0}; uint8_t i; uint8_t status; uint8_t size; uint8_t blockAddr; //选择操作的块地址0~63 //扇区A密码,16个扇区,每个扇区密码6Byte uint8_t sectorKeyA[16][16] = {{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},}; printk("rc522_open\r\n"); SPI_Init(); MFRC522_Init(); while (1) { //寻卡,返回卡类型 status = MFRC522_Request(PICC_REQIDL, str); if (status == MI_OK) { printk("%d \r\n", str[0]); printk("%d \r\n", str[1]); } //防冲撞,返回卡的序列号 4字节 status = MFRC522_Anticoll(str); memcpy(serNum, str, 5); if (status == MI_OK) { printk("%d \r\n", serNum[0]); printk("%d \r\n", serNum[1]); printk("%d \r\n", serNum[2]); printk("%d \r\n", serNum[3]); printk("%d \r\n", serNum[4]); } //选卡,返回卡容量 size = MFRC522_SelectTag(serNum); if (size != 0) { printk("size is %d", size); } //写 blockAddr = 1; //数据块 status = MFRC522_Auth(PICC_AUTHENT1A, blockAddr, sectorKeyA[blockAddr/4], serNum); //认证 if (status == MI_OK) { //写数据 status = MFRC522_Write(blockAddr, writeData); } //读 blockAddr = 1; //数据块 status = MFRC522_Auth(PICC_AUTHENT1A, blockAddr, sectorKeyA[blockAddr/4], serNum); //认证 if (status == MI_OK) { //读数据 status = MFRC522_Read(blockAddr, str); if (status == MI_OK) { for (i=0; i<16; i++) { printk("%d ", str[i]); } } } MFRC522_Halt(); //命令卡片进入休眠状态*/ } }