Part Number:TCAN4550
我的目的:
用TCAN4550扩展出一个标准的CAN 2.0B口,,本来是要与CAN 2.0B的设备通信的,,为了避免引入其他问题,,先将demo的标准帧的收发调通,再调试别的功能。
滤波器方面,,我已经将屏蔽寄存器初始化为0,,也就是接受所有报文。
当前的问题是:TCAN4550的DEMO中的数据帧发送不到CAN总线。
步骤:
1、我将基于MSP430的TCAN4550 DEMO移植到我的M3处理器,现在M3与TCAN4550读写数据正常(都DEVICE ID正常返回设备ID);说明移植需求的调试已经完成。
2、应用层我基本没有改变,但是经过调试发现,初始化标准ID滤波器配置的时候总是与写入的值不一致,引起配置错误。如下图所示:
因为SIDFC写入的值与返回值不一致,直接退出,,引起TCAN4x5x_MCAN_CACHEITCAN中的数据不正确,,在后面写操作的时候检查该CACHE中的数据异常,,不能直接写入。
请问:为什么会出现上图所示:写入和读出不一致现象?应用层基本按照DEMO的应用层逻辑,没有改变。
3、如果我把DEMO中的CAN FD初始化当作CAN 2.0B用,,可以和CAN 2.0B的设备正常通信 ?
nicolas Kiti:
补发一张清晰的图片。
期待回复。
,
Amy Luo:
您好,
我将这个问题转给我的同事Cherry,请他帮您升级到E2E英文技术论坛上,请资深的英文论坛工程师为您提供帮助。
,
Cherry Zhou:
Hi,
nicolas Kiti said:1、我将基于MSP430的TCAN4550 DEMO移植到我的M3处理器,现在M3与TCAN4550读写数据正常(都DEVICE ID正常返回设备ID);说明移植需求的调试已经完成。
您这里说的读写数据正常,指的是 SPI 数据还是 CAN 消息数据? 如果是SPI,不能确定通信是完全没有问题的。 图片中显示的读取值"0xC8000000"表明设置了 SPI 错误(SPIERR)位,该位是寄存器0x0820的第3位。 每个 SPI 读取/写入事务将在 SPI 事务开始时返回寄存器0x0820的"Status Byte"或位7:0。 当0x000C[30:16]中的任何一个被置位时,SPIERR 位都将被置位。
能否分享下寄存器0x000C 的值,SPI 信号示波器或逻辑分析仪的捕获结果?这样以便我们能够确定发生了哪种类型的 SPI 错误?
SIDFC 错误值可能是由于 SPI 错误所致。 但 SIDFC 寄存器也是写入保护寄存器,并且寄存器0x1018的 INIT 和 CCE 位都需要设置为1才能将 SIDFC 寄存器更新为一个新的值。 在尝试用新值写入 SIDFC 寄存器时,您看下寄存器0x1018的值是否将位0和位1都设置为了1? 如果 INIT 和 CCE 位没有都设置为1,器件在写入该寄存器时不会更改 SIDFC 寄存器值。
nicolas Kiti said:3、如果我把DEMO中的CAN FD初始化当作CAN 2.0B用,,可以和CAN 2.0B的设备正常通信 ?
对的可以的,该设备可以和2.0B 器件通信。