完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在使用 NFC05A1 和 STMF4xx-Nucle-Polling 项目。
我想与 Mifare 经典卡 1K 进行交互。 我知道 Stm 不会提供任何处理加密的代码,这不是我要的。 我遇到的问题是关于 SELECT 之后的第一步:这是一条明文消息,从 30 开始,然后是扇区号。我期望的是用随机数回答的卡片。 我遇到的问题是我收到“框架问题”或“超时”错误消息。 这是前四个请求,我认为它们工作正常,第五个请求则没有。 * 请求 1: 对rfalISO14443ATransceiveShortFrame的回答 (使用 RFAL_14443A_SHORTFRAME_CMD_REQA 作为命令)是:04 00。 *请求 2: 然后这次有另一个r falISO14443ATransceiveShortFrame 指令和RFAL_14443A_SHORTFRAME_CMD_WUPA *请求 3: 然后设置 rfalNfcaSelReq 结构: selReq (rfalNfcaSelReq 结构体) selReq.selCmd = 93 selReq.selPar =20 rfalNfcaTxRetry( ret, rfalISO14443ATransceiveAnticollisionFrame ( (uint8_t*)&selReq, &bytesTxRx, &bitsTxRx, &bytesRx, RFAL_NFCA_FDTMIN ), ((devLimit==0)?RFAL_NFCA_N_RETRANS:0), RFAL_NFCA_T_RETRANS ); 请求答案:请求结果包括 卡 Uid D0 74 CC A4,(正确的 uid) 和密件抄送 *请求 4: 然后另一个请求是 SELECT。 selReq.selCmd =93; selReq.selPar= 70; selReq.nfcid1[0]= D0 selReq.nfcid1[1]=74; selReq.nfcid1[2]=抄送; selReq.nfcid1[3]=A4; selReq.bcc=抄送; rfalNfcaTxRetry( ret, rfalTransceiveBlockingTxRx ( (uint8_t*)&selReq, sizeof(rfalNfcaSelReq), (uint8_t*)selRes, sizeof(rfalNfcaSelRes), &bytesRx, RFAL_TXRX_FLAGS_DEFAULT, RFAL_NFCA_FDTMIN ), ((devLimit==0)?RFAL_NFCA_N_RETRANS:0), RFAL_NFCA_T_RETRANS ) ; 其结果可以在 selRes 中找到: 萨克:08 到目前为止,该设备是一个 Mifare Classic (sak 08) ,这个设备是 device[0] 并且它的 uid 是已知的。 *请求 5:这是有问题的地方。 要求卡访问扇区 00。 正如迈克尔罗兰先生在这篇文章中所建议的那样: https://stackoverflow.com/questions/56334836/is-there-any-function-for-reading-nfc-a-iso14443a-tag-with-x-nucleo-nfc05a1 lenTx = 0; bufferTx[lenTx++] = 0x30; bufferTx[lenTx++] = 0x00; // 扇区 lenRxMax = 16; lenRx = 0; status = rfalTransceiveBlockingTxRx (&bufferTx[0], lenTx, &bufferRx[0], lenRxMax, &lenRx, RFAL_TXRX_FLAGS_DEFAULT, rfalConvMsTo1fc(5)); 回答 状态值:9 另一种尝试使用不同的标志。 status = rfalTransceiveBlockingTxRx (&bufferTx[0], lenTx, &bufferRx[0], lenRxMax, &lenRx, RFAL_TXRX_FLAGS_CRC_TX_AUTO | RFAL_TXRX_FLAGS_CRC_RX_REMV | RFAL_TXRX_FLAGS_NFCIP1_OFF | RFAL_TXRX_FLAGS_AGC_ON | RFAL_TXRX_FLAGS_PAR_RX_REMV | RFAL_TXRX_FLAGS_PAR_TX_AUTO | RFAL_TXRX_FLAGS_NFCV_FLAG_AUTO , RFAL_NFCA_T_RETRANS); 相同的答案 状态值:9 ERR_FRAMING = 9, /*!< 成帧错误 */ 我在rfalTransceiveBlockingRx中添加了一些日志来查看状态: platformLog("gRFAL.state %drn", gRFAL.state); 做{ rfalWorker(); platformLog("gRFAL.TxRx.state %drn", gRFAL.TxRx.state); } 成功请求(REQA、SEL)的日志是: gRFAL.状态 3 gRFAL.TxRx.state 83 ( RFAL_TXRX_STATE_RX_WAIT_RXS) gRFAL.TxRx.state 90 ( RFAL_TXRX_STATE_RX_FAIL) gRFAL.TxRx.state 0 ( RFAL_TXRX_STATE_IDLE) 状态为 0 ERR_NONE 最后一次读取请求的日志是: gRFAL.状态 3 gRFAL.TxRx.state 83(RFAL_TXRX_STATE_RX_WAIT_RXS) gRFAL.TxRx.state 84 ( RFAL_TXRX_STATE_RX_WAIT_RXE) gRFAL.TxRx.状态 84 gRFAL.TxRx.状态 84 gRFAL.TxRx.状态 84 gRFAL.TxRx.状态 84 gRFAL.TxRx.状态 84 gRFAL.TxRx.state 90(RFAL_TXRX_STATE_RX_FAIL) gRFAL.TxRx.state 0( RFAL_TXRX_STATE_IDLE) 状态为 9 ERR_FRAMING /*!< 帧错误 */ |
|
相关推荐
1个回答
|
|
我浏览了您的模板并设法了解您是如何从“ a2 0f ”……到“ a2 1e ”……
尽管我不在“编写”阶段,但仍在“身份验证”过程中,但我想基本原理是相似的,如果是这样,您发送的模板肯定会有很大帮助。 读卡器应发送回卡以进行身份验证的答案由以下内容组成: 8 个字节 + 每个字节上的 1 个奇偶校验位 + 2 个字节的 CRC(在这 8 个字节上)+ CRC 字节上的 1 个奇偶校验位(正如您所说的“CRC 字节也将具有奇偶校验”。)。 一旦按照模板的方式重新移动,大小将保持不变:它使 8 * 8 位 + 8 * 1 位 + 2 * 8 位 + 1 位 = 89 位。 这就是你用 36 位示例描述的情况,它需要以原始模式发送,不是吗? |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2509 浏览 1 评论
3177 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1739 浏览 1 评论
3560 浏览 6 评论
5939 浏览 21 评论
903浏览 4评论
1275浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
543浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
1263浏览 3评论
1320浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-18 21:19 , Processed in 1.444165 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号