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.
您好!
我正在尝试通过 SPI 将 TCAN4550连接到基于 Linux 的处理器。 这是我的器件树配置。
&spi1{ pinctrl-names = "default"; pinctrl-0 = <&spi1_pins>; rtk,spi-for-kernel = <1>; rtk,spi-slave-mode = <0>; // SPI master rtk,spi-cs-gpios = <&gpioa 2 0>; status = "okay"; tcan4x5x: can@0 { compatible = "ti,tcan4x5x"; reg = <0>; #address-cells = <1>; #size-cells = <1>; spi-max-frequency = <10000000>; bosch,mram-cfg = <0x0 0 0 32 0 0 1 1>; interrupt-parent = <&gpioa>; interrupts = <8 IRQ_TYPE_EDGE_BOTH>; device-state-gpios = <&gpioa 1 0>; device-wake-gpios = <&gpioa 6 0>; reset-gpios = <&gpioa 0 0>; }; };
设备启动后、我看到以下错误:
tcan4x5x spi1.0: Unsupported version number: 0 tcan4x5x spi1.0: TCAN: Probe failed, err=-22
我已参考 以下 链接。 但是 我没有找到关于如何将版本号设置为3.2.1或类似的解决方案。 有人能帮我解决这个问题吗?
谢谢。
Sai Kiran.
尊敬的 Sai:
您未设置版本号、这是从器件返回的只读值、指示器件中 MCAN IP 的版本应为3.2.1.1。
如果您无法读取该版本寄存器、则可能是 SPI 驱动程序出错、不符合 TCAN4550所需的格式。 您是否能够使用逻辑分析仪或示波器监控和捕获 SPI 信号?
一个常见问题是、当片选信号处于低电平状态时、单个寄存器读取或写入需要两个32位数据字(共64位)。 第一个字包含0x41或0x61的读取/写入操作码、寄存器地址以及该事务的长度或数据字数。 单个寄存器的长度将为0x01、但可以与具有更大长度值的连续寄存器一起使用、并且地址只是要读取或写入的连续寄存器字符串或存储器位置的起始地址。
第二个32位(及更高)是要写入的数据、或在读取时从器件返回的数据。
许多 SPI 驱动器将其分解为单独的32位字、并将字之间的芯片选择信号拉高。 这将导致 SPI 错误、并将终止 SPI 读取/写入事务。
您能否验证 SPI 信号是否满足 TCAN4550-Q1数据表中所述的正确格式?
此致、
乔纳森
尊敬的 Jonathan:
非常感谢您指出这一点。 正如您已提到的、我将介绍 SPI 驱动程序实现、并检查序列是否分解为单独的32位字。 您能告诉我要监测示波器上的哪些信号,以验证设备的正常运行吗?
谢谢。
西麒麟
尊敬的 Sai Kiran:
SPI 总线上应监控4个信号:nCS、SCLK、SDI、SDO。 如果您无法同时查看所有4个信号、则可以查看 nCS 和 SCLK 以确保 nCS 在确切的时钟周期数内保持低电平。 读/写操作码、地址和长度字段应该有32个时钟周期、长度字段指示的数据字的数量应该有32个额外的时钟周期。 对于单个寄存器读取/写入、在 NCS 信号为低电平时总共有64个 SCLK 周期。 但是、如果长度字段为2、则总共96个 SCLK 周期将会有32个额外的 SCLK 周期。
数据表显示了长度字段为2且您可以参考的4个 SPI 信号的外观图。
此致、
乔纳森