完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
RC522与STM32F103通信
void InitRc522(void) { Spi_IO_Init(); PcdReset(); PcdAntennaOff(); delay_ms(2); PcdAntennaOn(); M500PcdConfigISOType( 'A' ); } 我使用的是SPI通信的方式与RC522进行通信,其中天线的初始化是必须的。通信成功后可以进行后续的配置。 寻卡、防冲突、完成选卡 void RC522_Config ( void ) { uint8_t ucStatusReturn; //返回状态 uint8_t flag_station = 1; //跳出函数的标志位 while ( flag_station ) { /* 寻卡(方式:范围内全部),第一次寻卡失败后再进行一次,寻卡成功时卡片序列传入数组ucArray_ID中 */ if ( ( ucStatusReturn = PcdRequest ( PICC_REQALL, ucArray_ID ) ) != MI_OK ) ucStatusReturn = PcdRequest ( PICC_REQALL, ucArray_ID ); if ( ucStatusReturn == MI_OK ) { /* 防冲突操作,被选中的卡片序列传入数组ucArray_ID中 */ if ( PcdAnticoll ( ucArray_ID ) == MI_OK ) { // sprintf ( id_cpu, "The Card ID is: %02X%02X%02X%02X", ucArray_ID [ 0 ], ucArray_ID [ 1 ], ucArray_ID [ 2 ], ucArray_ID [ 3 ] ); // printf ("%srn", id_cpu ); if ( PcdSelect ( ucArray_ID ) == MI_OK ) { printf ("nRC522 is Ready!n"); flag_station = 0; } } } } } 这里完成后就已经完成对复旦CPU卡的通信了,后面可以通过命令进行操作,接下来的发卡流程可以参考复旦微电子CPU卡发卡流程 这里博主已经写的很详细,我简略提一下其中我碰到的问题。 DES算法进行随机数加密 在进行外部认证进行随机数加密的时候,我发现开发手册里是没有给出DES加密的指令,因此当时是自己找了一个可以用的DES加密算法对随机数进行加密,然后将加密后的八字节数送入外部认证命令当中。 //取随机数 res = FM1208_GetChallenge(ran_number_long, ran_number); if (res == 0x9000) { printf("random number generated: rn"); for(int i = 0; i < 8; i++) printf ( "%x " , ran_number); printf("rn"); } else printf ( "random get failed!, error code: %xrn", res); memset(des_encrypted_code, 0x00, 8); //清0 //其中newkey是我自己写入的密钥,卡的初始密钥为八字节的FFFFFFFF。 DES_Encrypt(ran_number, new_key, des_encrypted_code); printf("des encrypted code: rn"); for(int i = 0; i < 8; i++) printf ( "%x " , des_encrypted_code); printf("rn"); //外部认证 res = FM1208_External_Authenticate(0x00, des_encrypted_code, g_cReceBuf); if (res == 0x9000) { printf("card authenticated.rn"); } else { printf("Authenticate failed, error code: %xrn", res); } 二进制文件的读写问题 当我外部认证完成,创建完二进制文件后,发现当外部认证失败的时候,二进制文件也同样可以进行读写,经过一段时间的研究后,发现可以通过PIN加密,来实现对读写操作的权限设置。这里可以先看明白手册中的FMCOS 独特的安全体系,然后可以进行相应的指令配置,就可以设置PIN进行安全认证了。 |
|
|
|
只有小组成员才能发言,加入小组>>
3323 浏览 9 评论
3000 浏览 16 评论
3498 浏览 1 评论
9073 浏览 16 评论
4093 浏览 18 评论
1198浏览 3评论
614浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
603浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2343浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1902浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-31 00:57 , Processed in 0.984786 second(s), Total 50, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号