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.
当我尝试在循环中读取 TCAN4550器件 ID 时、第一次没有得到响应。
这个请求后、我读取状态寄存器(0x000C)、它为我提供0x0031000A 作为响应。 这意味着会设置"SPI_END_ERROR"、"Invalid _command"、"read_undersfow"、"Internal_access_active"和"SPI_ERROR_INTERRUPT"位。 我不确定这些错误为什么会发生。
下面是一些示波器屏幕截图:
(为清楚起见、CLK 为黄色、nCS 为粉色、MISO 为蓝色、MOSI 为绿色)
这显示了两个请求;器件 ID (第一个块)和状态寄存器(第二个块)。
这显示了器件 ID 寄存器(地址0x0000)的请求、但 MISO 上没有数据。
这些消息位于循环中。 下次 MCU 输入该代码时、TCAN 会发送响应:
尽管状态寄存器仍设置为0x0031000A (与之前相同)。
是什么导致设置这些错误位? 如何修复这些错误?
你好、Laura。
我在第二个示波器图中注意到您分享了当 NCS 信号在 SPI 读取开始时转换为低电平时 SCLK 为高电平。 这种情况不正确、可能是导致 SPI 错误的原因。
TCAN4550计算 NCS 转换为低电平和高电平之间的时钟周期。 如果时钟周期的数量不正确(即32的倍数或基于长度字段的正确数字)、则会标记 SPI 错误。 因此、大多数 SPI 错误是由错误的时钟周期/边沿数量或错误的长度字段引起的。
此图显示长度字段为0x02、它需要96个时钟周期、这是正确的、因为每次突发中都有16个时钟周期。 这是正确的、但初始下降时钟沿可能会导致问题。
其他显示数据在 MISO 时返回的图在 nCS 转换为低电平时将 SCLK 从低电平启动。 在启动 SPI 序列之前尝试纠正 SCLK 值、使其具有初始低电平值、看看这是否可以解决问题。
此致、
乔纳森
Jonathan、您好!
感谢您的解释! 我向 CLK 添加了软件下拉、这样 CLK 的初始状态就为低电平。
我现在收到了第一次阅读请求的答复! 所以这确实解决了我的问题!
再次感谢!