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:TCAN4550无法读取/写入 SPI -错误88000000

Guru**** 2811915 points

Other Parts Discussed in Thread: TCAN4550

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/996352/tcan4550-tcan4550-unable-to-spi-read-write---error-88000000

器件型号:TCAN4550

您好! 我正在使用一个定制板、其中两个 TCAN4550连接到 nRF52832的同一 SPI 总线、但无法读取任何寄存器。 我已经尝试过所有最低寄存器0x0000、0x0004、0x0008和0x000C、这些寄存器即使在晶体问题上也能正常工作、但我始终得到88000000作为响应。 我尝试了从500kHz 到18MHz 的总线速度、CPOL=0和 CPHA=0的一切(但是为了进行故障排除、我尝试了所有 SPI 模式)
我看到使用逻辑分析仪(saleae pro 8)从 nRF52832发送正确的字节、但响应几乎始终为88000000 (有时为00000000)。 如果我断开12V 的连接、我将获得 FFFFFFFF、因此我怀疑 TCAN 正在响应某些情况。 这是错误代码吗? 由于消息是在8位的4次突发中发送的、88000000响应意味着位31和27被置位了? 这意味着什么错误?

分析仪的一些输出:

0x61/0x00 0x00/0x00 0x0C/0x00 0x01/0x00 0xFF/0x00 0xFF/0x00 0xFF/0x00 0xFF/0x00 0xFF/0x00
0x41/0x00 0x00/0x00 0x0C/0x00 0x01/0x00 0xFF/0x00
0x41/0x00 0x00/0x00 0x00/0x00 0x01/0x00 0xFF/0x00
0x41/0x00 0x00/0x00 0x04/0x00 0x01/0x00 0xFF/0x00
0x61/0x00 0x08/0x00 0x08/0x00 0x01/0x00 0x12/0x00 0xEF/0x00 0xCD/0x00 0xAB/0x00
0x41/0x00 0x08/0x00 0x08/0x00 0x01/0x00 0xFF/0x00
0x41/0x00 0x08/0x00 0x20/0x00 0x01/0x00 0xFF/0x00
0x41/0x00 0x00/0x00 0x00/0x00 0x02/0x00
0x61/0x00 0x00/0x00 0x0C/0x00 0x01/0x00 0xFF/0x00 0xFF/0x00 0xFF/0x00 0xFF/0x00 0xFF/0x00
0x61/0x00 0x08/0x00 0x30/0x00 0x01/0x00 0x00/0x00 0x00/0x00 0x00/0x00 0x00/0x00 0x41/0x00 0x08/0x00 0x30/0x00 0x01/0x00 0xFF/0x00
0x41/0x00 0x08/0x00 0x20/0x00 0x01/0x00 0xFF/0x00
0x61/0x00 0x08/0x00 0x20/0x00 0x01/0x00 0x00/0x00 0x00/0x00 0x00/0x00 0x00/0x00 0x00/0x00 0x00/0x00
0x41/0x00 0x10/0x00 0x18/0x00 0x01/0x00 0xFF/0x00

我将您的官方驱动程序移植到 Zephir RTOS、但在读取最低寄存器时、我专注于简单的写入/读取命令、以确定它是硬件还是软件。 但现在我被卡住了。

我们一开始就遇到了一些硬件问题。 我们首先装配了一个占用空间错误的40MHz 谐振器(OT201640MJBA4SL)、而不是我们打算使用的晶体(ABM11W40.0000MHZ81UT)。
谐振器:
1个三态2 GND 3输出4 VDD
封装尺寸:
1 OSC1 2 GND 3 OSC2 4 GND
不要认为它损坏了 TCAN4550?
我的组装人员在电路板上用正确的晶体替换了谐振器、他可以看到它振荡良好。 我们在不同的国家/地区工作、我没有晶体。 相反、我移除了谐振器和电容器、将 OSC2焊接到 GND、并使用设置为40MHz 3.2Vpp 偏移1.6V 到 OSC1的信号生成。 运气差。 但是、即使振荡器出现故障或缺失、最低寄存器也应该可以访问吗?

接下来、nRF52832的标准驱动强度导致 SCK 上升时间过慢(测量值约为40ns)。 我们增加了它、现在测量到它上升约8ns (在10ns 规格内)。 仍然没有改善。 我认为上升时间规格10ns 是在0.3*VIO (最大 L)和0.7*VIO (最小 H)之间测得的? 不管怎样,运气不好。

I 测量:

VSUP:12.26V

VCCOUT:5.05V (4分钟后降至0V、在规格范围内)

fltr:1.498V (4分钟后降至0V、在规格范围内)

INH:12.26V (未连接)

Stdby:0V

nINT:0V

我的设置是:
VIO:3.3V、100nF 至 GND。
INH:悬空。
VSUP:12V、100nF/100nF/10uF 至 GND。
fltr:330nF 至 GND。
VCCOUT:10uF 至 GND。
WAKE:到 MCU 输出、2x 10nF 到 GND (软件中 BOOT 时引脚设置为低电平)。 功能被误解、在下一个修订版本中、这将连接到没有电容器的 GND。
SCLK / SDI->MOSI / SDO->MISO:MCU 的 SPI (总线上无其他 SPI 从器件)。
CS:MCU 的两个独立输入(无上拉电阻)。
GPO1:MCU 的输入(无上拉/下拉)。
GPO2:MCU 的输入(无上拉电阻)。
INT:MCU 的输入(无上拉)。
RST:MCU 输出(无下拉电阻)
WKRQ:MCU 输入(无上拉电阻)。
CANH/L:2个60.4R 连接在一起、4.7nF 接地。
CANH/L:PESD1CAN 连接至 GND。

晶振:ABM11W40.0000MHZ81UT
C:10pF

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好。  

    从逻辑分析仪图中、我看到 SPI 使能引脚在前4个字节后切换为高电平、而不是在整个8字节 SPI 事务中保持低电平。  TCAN4550将使能信号的转换视为 SPI 事务的结束、因此您的通信没有取得任何成功。  如果无法修改使其在整个8个字节内保持低电平、则需要修改固件或像 GPIO 引脚那样控制使能引脚。

    TCAN4550之所以需要这种功能、有几个原因。  第一个是对时钟周期的数量进行计数、以确保它是32位、一个字或数据的精确倍数、并且由于 R/W 操作码、地址、 数据长度信息占用4个字节、寄存器 SPI 事务至少需要64位。  可以在单个事务中读取/写入多个连续的寄存器、允许64位、96位、128位等、但始终是32的倍数。

    第二个原因是、TCAN4550将在使能信号转换为低电平后立即在 MISO 信号上返回全局故障标志位(寄存器0x0820[7:0])。  这是为了通知 MCU 任何可能对时间要求严格的重要中断或状态标志。  SPI 错误包含在其中、可供 MCU 监控之前 SPI 事务的成功或失败。  如果 TCAN4550检测到错误、例如时钟脉冲太少或太多、它将假定有噪声或其他一些错误破坏了数据。  如果这是对器件的写命令(0x61)、则 TCAN4550将丢弃数据并保留寄存器的旧值。  如果这是一个读取命令(0x41)、MCU 应将返回的值视为可能损坏并重复该事务。  其他 SPI 错误可能是由于长度字段和实际数据之间的不匹配。  例如、如果长度字段中指示了2个字的数据、但在写入或读取单个字(寄存器)后使能引脚转变为高电平、则器件会将此视为错误。  同样、如果长度字段为1、并且写入了2个字的数据、这也会被视为错误。

    正如您所看到的、器件返回0x88000000、表示由于使能引脚在事务中间转换为高电平、因此全局错误(GLOBALERR)和 SPI 错误(SPIERR)位被置位。

    您可以在数据表的"编程"部分找到 SPI 信号图以及有关我讨论过的主题的更多信息。

    此致、

    Jonathan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢! 我没有注意到它、因为我编写了代码、明确地将芯片选择保持在低电平、直到事务完成。 问题是、Zephyr 还控制了芯片选择、并在每个单独的 SPI_write/SPI_read 之后将其拉高。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    不用客气!  如果您在开发过程中有任何其他问题、请告知我们。

    此致、

    Jonathan