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.
工具与软件:
Linux 平台 TCAN4550针对每个 SPI 字操作(读取/写入/数据)在 CS 和 SCLK 后返回0x88000000。
SPI 模式为零、RESET 引脚被驱动器上拉、然后下拉。
可以检查的任何内容?
尊敬的 Xing:
您是否可以使用逻辑分析仪或示波器捕获 SPI 信号的波形?
由于您提到 RST 引脚被切换、因此必须存在最低700us 的延迟、才能使器件在发生 SPI 活动之前从复位事件中恢复。 如果您在复位事件后的这个700us 时间窗口内尝试 SPI 事务、它们将会失败。
SPI 错误的常见问题是、处理器的 SPI 驱动器可能会在发送每个数据字后(而不是整个 SPI 事务)将 CS 信号拉为高电平。 请验证 CS 信号在整个 SPI 读取/写入事务中是否保持低电平、对于单个寄存器读取/写入、该事务为64位。 如果处理器将 SPI 数据分成8、16或32位数据块、则通常会在发送每个数据块后看到 CS 信号转换为高电平、并且您需要修改 SPI 驱动程序以在整个 SPI 读取/写入事务期间将 CS 保持为低电平。
其他问题可能与 SPI 地址数据本身的格式有关、例如"长度"字段中的值不正确、与要传输的数据字数不匹配。
此致、
Jonathan
谢谢、Jonathan。
我们捕获了 SPI 传输、发现它会为每个字传输将 CS 拉高。 这应该就是我们得到0x88000000的原因。
Linux 版本为4.14、内核中没有 TCAN4550驱动程序、因此我们移植了一个用于较新内核的旧驱动程序:
我们在使用 DW MMIO SPI 控制器、不确定 Linux 4.14 SPI 控制器驱动程序是否正常。
您对我们应该使用哪款 TCAN4550和 DW MMIO SPI 驱动器有什么建议吗?
谢谢
兴
尊敬的 Xing:
是的、CS 信号在事务过程中转换为高电平被视为 SPI 错误、器件将忽略任何包含错误的 SPI 写入。 调整驱动器以在整个事务中将 CS 保持为低电平、应该会解决 SPI 错误。
关于 DW MMIO SPI 驱动器的问题、我不知道。 我的专长是 TCAN4550器件、而不是 Linux。 我可以帮助解决您可能遇到的与 TCAN4550的寄存器配置、操作和物理层属性(即硬件相关)相关的任何问题。
此致、
Jonathan