hbw_819 发表于 2014-1-29 13:13:09

【求助】本人刚开始玩RC522模块,发现寄存器不可改变

本人刚接触RFID,入手了一块RC522的模块,这个模块是用SPI驱动的~
刚写好了SPI的协议,想尝试对RC522的寄存器进行操作,却发现无法修改寄存器的值,求助一下,可能出现了什么问题?

举个例子:
我打算操作地址为0x14的寄存器(TxControlReg):
在手册上,他是一个可读可写的寄存器,复位的值为0x80

我打算读取他的值,然后写一个0x83给他,修改一下,然后再读一下~
SPI_DAT=RC522_read(TxControlReg);
RC522_write(TxControlReg,0x83);
SPI_DAT=RC522_read(TxControlReg);
通过逻辑分析仪我们可以看到他的时序逻辑:

发现我读出来的这个寄存器的值是0x80,是他复位的值,但是我写进去以后读出来的还是0x80,没有被改变?有谁知道是为什么吗?求解答?

PS:读的时候,寄存器地址(0x14<<1)|0x80=0xA8
       写的时候,寄存器地址 (0x14<<1)&0x7f=0x28

z350126876 发表于 2014-1-29 15:08:18

好复杂的样子                     

hbw_819 发表于 2014-1-29 16:30:29

解决了~
没有注意看在手册的后面还有这么一段话:
在一整个数据流中,NSS也就是片选必须一直保持低,以便连续发送多个字节~
再看我之前的时序:

我发送完一个字节NSS就拉高了,导致我在一个数据流中的两次读写SPI别识别成了两次独立的操作。也许在SPI读操作的时候,发送完地址字节,所需要读出的数已经放到了SPI的BUF上,所以再一次操作就会把数据读出,所以在读操作的时候没有发生问题;但是在写操作的时候,由于要求连续的字节读写,所以当我将写操作的地址字节写完拉高NSS的时候,RC522认为写操作完成了,故没有将我后面的数据写入~
因此将一个操作(数据流)中NSS一直保持低,就解决了上述的问题:
新的时序如下:


可以发现我的我所写入的数据0x83已经成功的写入了寄存器~
这个问题到此结束~~

sonbai 发表于 2014-3-7 20:17:20

大神,膜拜!请问一下你这个逻辑分析仪是设备还是软件,求软件

hbw_819 发表于 2014-3-7 23:27:43

sonbai 发表于 2014-3-7 20:17
大神,膜拜!请问一下你这个逻辑分析仪是设备还是软件,求软件

是类似于虚拟仪器的一种东西,要配合硬件使用的一套软件~淘宝上很多你搜一下就好,这里我就不给链接了,不然有打广告的嫌疑了,呵呵~

散装805 发表于 2014-3-18 16:26:40

谢谢楼主,解决了我的大问题!

hbw_819 发表于 2014-3-20 14:46:01

散装805 发表于 2014-3-18 16:26
谢谢楼主,解决了我的大问题!

大家互相讨论嘛~呵呵~
页: [1]
查看完整版本: 【求助】本人刚开始玩RC522模块,发现寄存器不可改变