您尚未登录。

楼主 #1 2017-10-06 15:59:52

coolesp32
会员
注册时间: 2017-09-20
已发帖子: 30
积分: 30

请教大家我用esp32操作MFRC522读卡,发现读写一个字节有问题,请问有没有做过SPI的朋友?

我是基于 examples\peripherals\spi_master 例程修改的,
用的是硬件SPI

离线

#2 2017-10-06 16:02:43

Linux初学者
会员
注册时间: 2017-09-07
已发帖子: 66
积分: 66

Re: 请教大家我用esp32操作MFRC522读卡,发现读写一个字节有问题,请问有没有做过SPI的朋友?

先确定spi硬件有没有问题,具体方法可以读rc522 chip id寄存器

离线

楼主 #3 2017-10-06 16:03:21

coolesp32
会员
注册时间: 2017-09-20
已发帖子: 30
积分: 30

Re: 请教大家我用esp32操作MFRC522读卡,发现读写一个字节有问题,请问有没有做过SPI的朋友?

Linux初学者 说:

先确定spi硬件有没有问题,具体方法可以读rc522 chip id寄存器

请问是哪个寄存器, 我找了半天也没有找到. sad

离线

#4 2017-10-06 16:04:34

Linux初学者
会员
注册时间: 2017-09-07
已发帖子: 66
积分: 66

Re: 请教大家我用esp32操作MFRC522读卡,发现读写一个字节有问题,请问有没有做过SPI的朋友?

我翻半天也没有翻到,
不过还是有一个版本寄存器
VersionReg,
将就着用吧。

离线

楼主 #5 2017-10-06 16:05:44

coolesp32
会员
注册时间: 2017-09-20
已发帖子: 30
积分: 30

Re: 请教大家我用esp32操作MFRC522读卡,发现读写一个字节有问题,请问有没有做过SPI的朋友?

Linux初学者 说:

我翻半天也没有翻到,
不过还是有一个版本寄存器
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.

离线

#6 2017-10-10 18:28:36

yang278851511
会员
注册时间: 2017-10-09
已发帖子: 3
积分: 3

Re: 请教大家我用esp32操作MFRC522读卡,发现读写一个字节有问题,请问有没有做过SPI的朋友?

最近一直在搞RC522的移植,准备把RC522移植到ESP32上进行开发。
关于version 的问题,我也读取了数值,但是读取的值很奇怪!

所以,我现在怀疑我的ESP32中的SPI 驱动程序有问题,因此向楼上各位兄弟请教。

请问,各位有没有移植成功的代码,我参考学习下。最好是基于C 的 ,我现在遇到很多问题,特地跟各位请教。

希望各位大神不吝赐教,谢谢。

离线

#7 2017-10-10 18:30:38

yang278851511
会员
注册时间: 2017-10-09
已发帖子: 3
积分: 3

Re: 请教大家我用esp32操作MFRC522读卡,发现读写一个字节有问题,请问有没有做过SPI的朋友?

果然有,谢谢大神,

MFRC522 version 1.0 software version is: 91h.
MFRC522 version 2.0 software version is: 92h.



大神,请问你实现了吗??

离线

#8 2017-10-10 23:54:25

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,348
积分: 9202

Re: 请教大家我用esp32操作MFRC522读卡,发现读写一个字节有问题,请问有没有做过SPI的朋友?

examples/peripherals/spi_master/main/spi_master_example_main.c
我烧录这个程序,用逻辑分析仪抓spi数据,
发现发出的数据,和逻辑分析仪分析出来的数据不一致,
实在纳闷,明天继续。。。





离线

#9 2017-10-10 23:57:51

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,348
积分: 9202

Re: 请教大家我用esp32操作MFRC522读卡,发现读写一个字节有问题,请问有没有做过SPI的朋友?

晕哥 说:

examples/peripherals/spi_master/main/spi_master_example_main.c
我烧录这个程序,用逻辑分析仪抓spi数据,
发现发出的数据,和逻辑分析仪分析出来的数据不一致,
实在纳闷,明天继续。。。

现在不知道是逻辑分析仪有问题,或者软件设置不正确,
还是其他问题?

而且spi 的 clk 占空比居然不是一半一半,设置之后也没有改变。





离线

#10 2017-10-11 21:05:47

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,348
积分: 9202

Re: 请教大家我用esp32操作MFRC522读卡,发现读写一个字节有问题,请问有没有做过SPI的朋友?

好消息,通过修改 esp-idf\components\driver\test\test_spi_master.c 这个测试程序,
可以正确输出设定时钟频率的SPI数据了:

for (x=0; x<num_bytes; x++)
    {
        sendbuf[x]= i&0xff;
        i++;
    }

20171011210222.png





离线

#11 2017-10-12 10:18:02

陆闻天
会员
注册时间: 2017-10-12
已发帖子: 34
积分: 34

Re: 请教大家我用esp32操作MFRC522读卡,发现读写一个字节有问题,请问有没有做过SPI的朋友?

强势插入前排围观...

离线

#12 2017-10-13 11:45:18

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,348
积分: 9202

Re: 请教大家我用esp32操作MFRC522读卡,发现读写一个字节有问题,请问有没有做过SPI的朋友?

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=&reg;               //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;;
}

昨晚测试一会, 没读出寄存器值, 真想去撞南墙...





离线

#13 2017-10-13 11:46:50

陆闻天
会员
注册时间: 2017-10-12
已发帖子: 34
积分: 34

Re: 请教大家我用esp32操作MFRC522读卡,发现读写一个字节有问题,请问有没有做过SPI的朋友?

晕哥 说:

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=&reg;               //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读寄存器,貌似要左移,不能直接写寄存器地址, 你看下手册

离线

#14 2017-10-13 11:48:08

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,348
积分: 9202

Re: 请教大家我用esp32操作MFRC522读卡,发现读写一个字节有问题,请问有没有做过SPI的朋友?

陆闻天 说:
晕哥 说:

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=&reg;               //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读寄存器,貌似要左移,不能直接写寄存器地址, 你看下手册

20171013113805.png
果然是啊, 谢谢陆大神, 喝水不忘挖坑人。
晚上回家试一试.





离线

#15 2017-10-13 11:49:54

陆闻天
会员
注册时间: 2017-10-12
已发帖子: 34
积分: 34

Re: 请教大家我用esp32操作MFRC522读卡,发现读写一个字节有问题,请问有没有做过SPI的朋友?

晕哥 说:
陆闻天 说:
晕哥 说:

昨晚测试一会, 没读出寄存器值, 真想去撞南墙...

RC522读寄存器,貌似要左移,不能直接写寄存器地址, 你看下手册

https://whycan.cn/files/201710/13/20171013113805.png
果然是啊, 谢谢陆大神, 喝水不忘挖坑人。
晚上回家试一试.


别客气, 那是因为我刚刚做完RC522项目 big_smile

最近编辑记录 陆闻天 (2017-10-13 11:59:55)

离线

#16 2017-10-13 14:13:01

yang278851511
会员
注册时间: 2017-10-09
已发帖子: 3
积分: 3

Re: 请教大家我用esp32操作MFRC522读卡,发现读写一个字节有问题,请问有没有做过SPI的朋友?

我也刚做完,确实要左移!

陆闻天 说:
晕哥 说:
陆闻天 说:

RC522读寄存器,貌似要左移,不能直接写寄存器地址, 你看下手册

https://whycan.cn/files/201710/13/20171013113805.png
果然是啊, 谢谢陆大神, 喝水不忘挖坑人。
晚上回家试一试.


别客气, 那是因为我刚刚做完RC522项目 big_smile

离线

#17 2017-10-13 14:20:33

陆闻天
会员
注册时间: 2017-10-12
已发帖子: 34
积分: 34

Re: 请教大家我用esp32操作MFRC522读卡,发现读写一个字节有问题,请问有没有做过SPI的朋友?

yang278851511 说:

我也刚做完,确实要左移!

陆闻天 说:
晕哥 说:

https://whycan.cn/files/201710/13/20171013113805.png
果然是啊, 谢谢陆大神, 喝水不忘挖坑人。
晚上回家试一试.


别客气, 那是因为我刚刚做完RC522项目 big_smile

别人挖的坑,含泪也要填上,不知道为什么nxp要这么弄

离线

#18 2017-10-13 19:51:35

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,348
积分: 9202

Re: 请教大家我用esp32操作MFRC522读卡,发现读写一个字节有问题,请问有没有做过SPI的朋友?

终于搞定了, 读VersionReg寄存器正常了。

20171013194741.png





离线

#19 2017-10-13 21:00:13

沉鱼
管理员
注册时间: 2017-09-06
已发帖子: 161
积分: 161

Re: 请教大家我用esp32操作MFRC522读卡,发现读写一个字节有问题,请问有没有做过SPI的朋友?

厉害了,我的站长.

离线

#20 2017-10-18 17:09:29

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,348
积分: 9202

Re: 请教大家我用esp32操作MFRC522读卡,发现读写一个字节有问题,请问有没有做过SPI的朋友?

又折腾两天,
掉入一个深坑,
读不到卡, 但是可以读到VersionReg寄存器, 也可以读其他寄存器,
但是就是读不到卡,
按照网上的STM32+MFRC522的Demo,怎么也没检查出问题来,
先写寄存器地址(向左偏移一位),再写数据.
死活都读不到卡 ...





离线

#21 2017-10-18 17:18:40

晕哥
管理员
注册时间: 2017-09-06
已发帖子: 9,348
积分: 9202

Re: 请教大家我用esp32操作MFRC522读卡,发现读写一个字节有问题,请问有没有做过SPI的朋友?

后来请出了STM32 + RC522 + 逻辑分析仪大法,
终于找到问题所在了,

20171018171429.jpg

20171018084855.png

原来发完寄存器地址之后不能马上拉高spi cs引脚, 要继续发数据,发完这两个才能拉高。





离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn