大家好,
我们遇到了一个问题,没有解决办法,想请求大家帮忙看看。
经示波器量出供给时钟约为7.3MHz,SPI的速率为2.4MHz。
这些是我们的寄存器配置,其他所有设置均为默认值:
-模式= 0x0510
-时钟= 0x070E
发送复位指令后,正常回复FF24。
配置时回复的也是FF24,这与数据手册上的回复不一致,请问是什么原因呢?
接着发送读取寄存器指令A200,还是回复FF24,请问这是正确的吗?
后面我们全部使用默认配置,还是一样的情况。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好,
可能您发reset命令后帧不完整,设备并没有复位。reset 命令由设备在帧的末尾锁定。锁定命令后立即重置。主机必须在重置后等待tREGACQ,然后才能与设备通信,以确保寄存器已采用其默认设置。当ADC正确复位时,设备会发送FF24H确认。如果发送了命令字,设备会响应,但若帧未完成,因此设备不会重置。注意查看下面reset命令时序截图。
在ADS131M04产品首页提供了example code,您可下载下来参考,不知您是否已经下载:
我的意思是reset命令后需等待整个帧完成,且等待tREGACQ后,主机才能与设备通信。您发送完reset命令后,在进行读写寄存器时不知是否遵循了以上时序?看您的reset命令波形,在收到FF24响应后并没有继续发送时钟信号以完成整个帧使设备锁定该命令。
通信的帧格式如上截图所示,主机在DIN上发送的输入帧始终以命令开头。设备在DOUT上传输的输出帧上的第一个字word始终对前一个输入帧上写入的命令的响应开头,和四个ADC通道的四个ADC数据字和一个CRC字。命令的响应相当于滞后一个帧。
只有上电后第一次才能读取回寄存器的值,
这里是指读回所有寄存器的值吗?还是哪一个寄存器的值?
“之后都只能读到错误的值”,这与可以正确读回寄存器的值之间还做了哪些操作?建议您用示波器分别看下可以正确读取寄存器值与读到错误的值的通信时序波形,看是时序问题还是通信波形上有干扰导致的?
readSingleRegister(CLOCK_ADDRESS);
for(int i=0;i<15;i++)
{
SPI_ReadWrite(0);
}
readSingleRegister(CLOCK_ADDRESS);
for(int i=0;i<15;i++)
{
SPI_ReadWrite(0);
}
readSingleRegister(CLOCK_ADDRESS);
for(int i=0;i<15;i++)
{
SPI_ReadWrite(0);
}
这是我现在的程序。
目前连续读取寄存器的问题暂时解决了,其必须严格遵循读取的时序,如下图我连续读取CLOCK寄存器
但是还是有上面的问题,只有在上电后才能读取到正确的值,我在不重新上电的情况下,用编译器重新仿真,读取同一寄存器的值不一样,请问这是哪里出了问题?