我是基于 examples\peripherals\spi_master 例程修改的,
用的是硬件SPI
离线
先确定spi硬件有没有问题,具体方法可以读rc522 chip id寄存器
离线
先确定spi硬件有没有问题,具体方法可以读rc522 chip id寄存器
请问是哪个寄存器, 我找了半天也没有找到.
离线
我翻半天也没有翻到,
不过还是有一个版本寄存器
VersionReg,
将就着用吧。
离线
我翻半天也没有翻到,
不过还是有一个版本寄存器
VersionReg,
将就着用吧。
https://www.nxp.com/docs/en/data-sheet/MFRC522.pdf
果然有,谢谢大神,
MFRC522 version 1.0 software version is: 91h.
MFRC522 version 2.0 software version is: 92h.
离线
最近一直在搞RC522的移植,准备把RC522移植到ESP32上进行开发。
关于version 的问题,我也读取了数值,但是读取的值很奇怪!
所以,我现在怀疑我的ESP32中的SPI 驱动程序有问题,因此向楼上各位兄弟请教。
请问,各位有没有移植成功的代码,我参考学习下。最好是基于C 的 ,我现在遇到很多问题,特地跟各位请教。
希望各位大神不吝赐教,谢谢。
离线
果然有,谢谢大神,
MFRC522 version 1.0 software version is: 91h.
MFRC522 version 2.0 software version is: 92h.
大神,请问你实现了吗??
离线
离线
examples/peripherals/spi_master/main/spi_master_example_main.c
我烧录这个程序,用逻辑分析仪抓spi数据,
发现发出的数据,和逻辑分析仪分析出来的数据不一致,
实在纳闷,明天继续。。。
现在不知道是逻辑分析仪有问题,或者软件设置不正确,
还是其他问题?
而且spi 的 clk 占空比居然不是一半一半,设置之后也没有改变。
离线
离线
强势插入前排围观...
离线
uint8_t PCD_ReadRegister(spi_device_handle_t spi, uint8_t reg)
{
uint8_t value;
esp_err_t ret;
spi_transaction_t t;
memset(&t, 0, sizeof(t)); //Zero out the transaction
reg = 0x80 | reg;
t.length=8; //Command is 8 bits
t.tx_buffer=® //The data is the cmd itself
t.user=(void*)0; //D/C needs to be set to 0
ret=spi_device_transmit(spi, &t); //Transmit!
uint8_t zero = 0;
uint8_t kkk = 0;
t.tx_buffer = &zero;
t.rx_buffer = &kkk;
t.length=8*1;
t.flags = SPI_TRANS_USE_RXDATA;
ret = spi_device_transmit(spi, &t);
assert( ret == ESP_OK );
return *(uint8_t*)t.rx_data;;
}
昨晚测试一会, 没读出寄存器值, 真想去撞南墙...
离线
uint8_t PCD_ReadRegister(spi_device_handle_t spi, uint8_t reg)
{
uint8_t value;
esp_err_t ret;
spi_transaction_t t;
memset(&t, 0, sizeof(t)); //Zero out the transaction
reg = 0x80 | reg;
t.length=8; //Command is 8 bits
t.tx_buffer=® //The data is the cmd itself
t.user=(void*)0; //D/C needs to be set to 0
ret=spi_device_transmit(spi, &t); //Transmit!
uint8_t zero = 0;
uint8_t kkk = 0;
t.tx_buffer = &zero;
t.rx_buffer = &kkk;
t.length=8*1;
t.flags = SPI_TRANS_USE_RXDATA;
ret = spi_device_transmit(spi, &t);
assert( ret == ESP_OK );
return *(uint8_t*)t.rx_data;;
}昨晚测试一会, 没读出寄存器值, 真想去撞南墙...
RC522读寄存器,貌似要左移,不能直接写寄存器地址, 你看下手册
离线
晕哥 说:uint8_t PCD_ReadRegister(spi_device_handle_t spi, uint8_t reg)
{
uint8_t value;
esp_err_t ret;
spi_transaction_t t;
memset(&t, 0, sizeof(t)); //Zero out the transaction
reg = 0x80 | reg;
t.length=8; //Command is 8 bits
t.tx_buffer=® //The data is the cmd itself
t.user=(void*)0; //D/C needs to be set to 0
ret=spi_device_transmit(spi, &t); //Transmit!
uint8_t zero = 0;
uint8_t kkk = 0;
t.tx_buffer = &zero;
t.rx_buffer = &kkk;
t.length=8*1;
t.flags = SPI_TRANS_USE_RXDATA;
ret = spi_device_transmit(spi, &t);
assert( ret == ESP_OK );
return *(uint8_t*)t.rx_data;;
}昨晚测试一会, 没读出寄存器值, 真想去撞南墙...
RC522读寄存器,貌似要左移,不能直接写寄存器地址, 你看下手册
果然是啊, 谢谢陆大神, 喝水不忘挖坑人。
晚上回家试一试.
离线
陆闻天 说:晕哥 说:昨晚测试一会, 没读出寄存器值, 真想去撞南墙...
RC522读寄存器,貌似要左移,不能直接写寄存器地址, 你看下手册
https://whycan.cn/files/201710/13/20171013113805.png
果然是啊, 谢谢陆大神, 喝水不忘挖坑人。
晚上回家试一试.
别客气, 那是因为我刚刚做完RC522项目
最近编辑记录 陆闻天 (2017-10-13 11:59:55)
离线
我也刚做完,确实要左移!
晕哥 说:陆闻天 说:RC522读寄存器,貌似要左移,不能直接写寄存器地址, 你看下手册
https://whycan.cn/files/201710/13/20171013113805.png
果然是啊, 谢谢陆大神, 喝水不忘挖坑人。
晚上回家试一试.别客气, 那是因为我刚刚做完RC522项目
离线
我也刚做完,确实要左移!
陆闻天 说:晕哥 说:https://whycan.cn/files/201710/13/20171013113805.png
果然是啊, 谢谢陆大神, 喝水不忘挖坑人。
晚上回家试一试.别客气, 那是因为我刚刚做完RC522项目
别人挖的坑,含泪也要填上,不知道为什么nxp要这么弄
离线
厉害了,我的站长.
离线
离线