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:外部环回测试模式问题

Guru**** 2797795 points

Other Parts Discussed in Thread: TCAN4550

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1119143/tcan4550-external-loopback-test-mode-problem

器件型号:TCAN4550

您好、

我们尝试启用外部回送测试模式、但没有成功。 发送数据后、我们不会接收任何中断。

寄存器配置:

1.驱动程序初始化
2.在寄存器0x800中、我们设置了位[0]= 1和位[21]=1
在寄存器0x1010中、我们设置了位[4]=1
在寄存器0x1018中、我们设置了位[5]= 0
5.向 buffer0发送数据
6.在 FIFO 中接收数据

注:

在我们读取寄存器0x800并启用测试模式后、但在读取0x1010时 、位[4]未设置。 在数据表中、它还指出该寄存器受写保护。 这里可能会有一些问题吗?

谢谢、

Danijel

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

    您好 Danijel、

    TCAN4550 CAN 控制器有"写保护"位、只有当控制寄存器(h1018)的 INIT 和 CCE 位被设定为'1'时才能被置位、以确保器件在 CAN 总线上主动通信时不会改变模式、否则会导致通信错误。

    在配置这些位之前、您需要先将 INIT 和 CCE 位都设置为"1"、然后再将不同寄存器中的其他位设置为"1"。  请注意、CCE 位还要求将 INIT 位设置为"1"、然后才能将其设置为"1"、因此您可能需要向该寄存器写入两次、以便将两个位都设置为"1"。  配置完所有其他器件寄存器后、您可以将这两个位都设置回"0"并开始正常操作。  

    由于您已指示未设置受保护的位、我建议您首先尝试在配置序列开始时设置这些位。  如果您在此之后仍有困难、请告诉我。

    此致、

    Jonathan

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

    您好、Jonathan、

    我已经按照您的说明操作、但测试寄存器 b[4]在读取后仍然为0。 现在、我还看到您的 TCAN 库(TCAN4x5x_MCAN_EnableProtectedRegisters)中有一个函数负责额外处理 CSA 和 CSR 位。 读取后、CCE 和 INT 位现在被置位。

    该函数在所有其他初始化函数之前以及末尾都被调用。一切都没有成功。 还有其他想法吗?

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

    您好 Danijel、

    在写入测试寄存器0x1010位[4]之前、尝试将控制寄存器0x1018的 TEST 位[7]设置为"1"。  如果没有该位置位、则测试寄存器为只读。

    此致、

    Jonathan

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

    您已经正确了、现在测试寄存器0x1010的 b[4]已设置。 但是 FIFO 缓冲区仍然为空。

    读取时、寄存器现在具有以下值:

    REG_MCAN_CCCR (0x1018)值= 0x9b bit[0]= 1、bit[1]= 1、bit[7]= 1 -正常
    REG_MCAN_TEST (0x1010)值= 0x10、位[4]=1 -正常
    REG_DEV_MODE_AND_Pins (0x800)、值= 0xC82004A1、位[0]= 1 -正常

    所有这三个寄存器在初始化之后都被置位、因为如果它们在我看到器件正常通过收发器接收和发送数据之前、这意味着它肯定不在测试模式中。

    当它们在初始化器件停止通过 收发器发送数据后置1时、这种情况不正确、因为它应该处于外部回送测试模式、只有发送器应该工作。

    此致、Danijel

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

    您好 Danijel、

    我想我们已经接近尾声了。 但我对您的 CCCR 寄存器值0x9b 有点困惑。  如果寄存器的值为0x9b、那么位0、1和7被设置为"1"、但是位3和位4也是如此、它们对应于一个时钟停止请求和时钟停止应答。  这些位不应置位。  

    此外、您何时读回该寄存器的值?  是否在您完成所有寄存器配置并尝试发送数据之后?  在 器件能够发送/接收数据之前、INIT [0]和 CCE [1]位需要被设定回'0'。  从技术上讲、只需将 INIT 位设置回"1"、但通常情况下、两个位都被设置。  因此、这些位应该是寄存器配置开始时设置为"1"的第一个位、然后是寄存器配置序列结束时设置为"0"的最后一个位。 一旦这些位被设置回"0"、器件就会保护寄存器值不会发生变化、并允许它开始正常通信。

    我已经完成了一个测试来验证寄存器位设置、我将提供我的寄存器值和序列作为示例供您参考。  我不知道您的位时序参数是什么、这也不重要、但我启用了 FD 操作和位速率开关。  这些类型的位设置对于测试模式无关紧要、因此、如果您不使用它们、则无关紧要。

    在正常器件配置完成后、我将手动返回并对该测试配置执行以下寄存器写入操作、以确认该序列:

    M_CAN 外部回路测试模式:

    写入0x1018 = 0x3C3 (设置 INIT 位)

    写入0x1018 = 0x3C3 (现在初始位已经被置位、设置 CCE 位)

    写入0x1018 = 0x3C3 (现在 CCE 位已经被置位、测试位被置位)

    写入0x0800 = 0xC80004A8 (将 TEST_MODE_EN 设置为"0"和 TEST_MODE_CONFIG 设置为"0"、因为它们不用于 M_CAN 环回测试模式)

    写入0x1010 = 0x90 (将 LBCK 设置为"1")

    写入0x1018 = 0x3C0 (将 INIT 和 CCE 位设置回'0')

    或者、我读取 RX FIFO 以确保其为空(应该为空)

    我发送一条 CAN 消息。  我在 CANH 和 CANL 信号上有示波器探针、我在 CAN 总线上看到该消息。

    我通过 RX FIFO 读取、现在看到我刚刚发送的消息。

    M_CAN 内部回路测试模式:

    写入0x1018 = 0x3E3 (设置 INIT 位)

    写入0x1018 = 0x3E3 (现在初始位已经被置位、设置 CCE 位)

    写入0x1018 = 0x3E3 (现在 CCE 位 已经被置位、而 MON 位被置位来禁用发送器)

    写入0x0800 = 0xC80004A8 (将 TEST_MODE_EN 设置为"0"和 TEST_MODE_CONFIG 设置为"0"、因为它们不用于 M_CAN 环回测试模式)

    写入0x1010 = 0x90 (将 LBCK 设置为"1")

    写入0x1018 = 0x3E0 (将 INIT 和 CCE 位设置回'0')

    或者、我读取 RX FIFO 以确保其为空(应该为空)

    我发送一条 CAN 消息。  我在 CANH 和 CANL 信号上有示波器探针、但在 CAN 总线上看不到该消息。

    我通过 RX FIFO 读取、现在看到我刚刚发送的消息。

    您可能想知道我们为什么不设置寄存器0x0800的 test_mode_EN 位[21]和 test_mode_config 位[0]。  仅当您使用其他两种测试模式之一时、才需要这些位。

    TCAN4550在单个器件中整合了 Bosch M_CAN FD 控制器 IP 和 CAN FD 收发器。  Bosch M_CAN 控制器寄存器堆栈被复制到器件中、偏移地址为0x1000。  地址为0x1000或更高的所有寄存器都是由 Bosch 定义的 M_CAN 控制器寄存器。  器件中地址在0x00xx 范围或0x08xx 范围内的所有其他寄存器由 TI 定义、不是 M_CAN 专用寄存器、而是控制器件的其他方面。  

    有几个寄存器说明和功能在 M_CAN 和非 M_CAN 寄存器之间使用类似的语言、可能会导致混淆。  测试模式位是这些情况之一。  由于 TEST_MODE_EN 和 TEST_MODE_CONFIG 位位于寄存器0x0800中、因此它们适用于将 M_CAN 控制器连接到收发器输入的内部 TXD、RXD 和 EN 信号路由的测试模式。  这些信号通常作为 PCB 上的外部信号出现、因此需要出于合规性测试的目的进行访问、如收发器测试模式和 SPI 以及 M_CAN 内核测试模式图所示。  

    其他两种环回测试模式在 M_CAN 控制器内部、因此它们仅通过0x10xx M_CAN 寄存器空间进行配置。  

    有关 Bosch M_CAN 控制器的其他文档、请参阅 Bosh 网站上的 M_CAN 用户手册。 (链接)

    我知道这是很多信息和详细的回答、但我希望它清晰明了并能回答您的问题。

    此致、

    Jonathan

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

    最后、回送测试模式起作用。 问题是寄存 器0x1018中的 INIT 和 CCE 位 没有被设置回0。 但是、中断不会触发、但我手动读取 FIFO、这也不是问题。

    CCCR 寄存器。 根据我在 CCCR 寄存器中的数据表中的理解、如果您读取它们、位3、4将为1、但当您执行写入操作时、它们应该被屏蔽为0。 官方 C 库的评论也是这样说的:
    "取消设置 CSA 和 CSR 位、因为如果我们处于待机模式、这些位将被设置。 向这些位写入1将强制时钟停止事件并防止返回到正常模式"

    非常感谢您的详细帮助、我希望该解决方案也能帮助其他人。

    此致、Danijel