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配置为控制器模式、通过 SPI 接口发送 CAN 帧、然后检查 GPO2上的输出。 您能告诉我如何配置硬件连接和软件配置来实现这一点吗?
我有一个 MSP430FR6989 Launchpad 和 TCAN4550EVM、选择 MSP430FR6989作为 MCU 板的原因是我在 TCAN4550驱动器代码中找到了该器件型号。
我做了一些工作:
用于硬件连接
TCAN4550EVM
MSP430FR6989 LaunchPad
用于软件配置
我在 Init_can ()之后添加了 TCAN4x5x_Device_EnableTestMode (TCAN4x5x_DEVICE_TEST_MODE_CONTROLLER)以尝试使 TCAN4550进入控制器模式
(笑声) (笑声) (笑声) (笑声)
/*********
*目前一切都适用于 TCAN4550 *
(小部分 /
init_cand();//运行主 MCAN 配置序列。 大部分配置都在这里!
TCAN4x5x_Device_EnableTestMode (TCAN4x5x_device_test_mode_controller);
/*定义我们要发送的 CAN 消息*/
TCAN4x5x_MCAN_TX_Header 接头={0};
(笑声) (笑声) (笑声) (笑声)
以使用以下代码检测 GPO2上的输出。
TCAN4x5x_MCAN_TransmitBufferContents (1);//请求发送 TX 缓冲区1
TCAN4x5x_MCAN_TransmitBufferContents (0);//现在我们可以发送我们之前排队但未发送的 TX FIFO 元素0数据。
您能告诉我我还需要做些什么来实现我的目标吗?
谢谢你。
王少文
shawn-wang@ti.com
您好、Shawn、
从您的描述中、您似乎在获得此设置的正确路径上。
从 J8 VSUP 引脚为 TCAN4550 EVM 供电是正确的。 您将为 VSUP 使用什么电压?
从您提供的电路板设置照片中、我注意到除了您将尝试监控 TXD 数据的接头引脚外、GPO2 LED 还连接到 GPO2。 应取消选择 S4上的 GPO2 LED DIP 开关(切换至电路板的外沿)、以提高 GPO2数据(TXD_INT_CAN)上的信号完整性。 当 GPO2用作引脚状态视觉指示的中断时、LED 很有用、但当引脚在测试模式下用作数据引脚时、LED 不会被使用。 这是 DIP 开关的用途、它允许 LED 轻松断开与网络的连接。
使用 TCAN4x5x_Device_EnableTestMode (TCAN4x5x_DEVICE_TEST_MODE_CONTROLLER);将 TCAN4550置于测试模式的函数看起来是正确的。 然而、控制器测试模式将从系统中移除集成 CAN 收发器、但是控制器仍将期待正常的 CAN 行为、例如 TXD 环回到 CAN 收发器内部出现的 RXD 引脚。 如果您没有将外部收发器连接到在控制器模式下运行的 TCAN4550、请将 TXD 数据回路到 RXD 引脚上、和/或进行任何其他配置更改、我认为 TCAN4550会将此视为错误条件、并可能会禁用自身或阻止您观察数据。
此外、如果没有额外的 CAN 节点(收发器和控制器)、例如第二个 TCAN4550 EVM 或 CAN 分析仪测试设备、可以"确认"您尝试发送的 CAN 数据包、 然后、TCAN4550控制器还会将此视为错误和传输失败、这可能会导致"总线断开"状态、并阻止您在 GPO2引脚上监控 CAN 数据包。
我没有尝试像您尝试的那样设置测试配置、我需要花一点时间来完成更详细的配置、以便为您提供需要设置哪些额外寄存器位的相关信息、 以及是否需要进行任何其他硬件连接。 我将处理此问题、并在明天或在我为您提供完整解决方案后再次发布。
此致、
Jonathan
你好、 Jonathan
感谢您的快速回复!
1、VSUP 为9V、这对于 TCAN4550EVM 电源而言应该是可以的。
外部 CAN 收发器
我在 TCAN4550EVM 上找不到连接到 GPIO1的接头、通过 GPO2和 GPIO1连接外部 CAN 收发器与 TCAN4550EVM 可能不方便。 如何使用 MSP430FR6989Launch Board + BOOSTXL-CANFD-LIN (配置为控制器模式)+ TCAN1042EVM 设置 CAN 节点?
3、用于附加 CAN 节点
如前所述、TCAN4550EVM 是一个不错的选择。 我是否需要将 MCU 板连接到 TCAN4550EVM 以实现额外的 CAN 节点?
我想提前准备一些硬件、并期待您的意见和完整的解决方案。
谢谢!
--------------------------------------------------
此外、在正常模式下、我进行了检测 TCAN4550EVM 的 CANH 或 CANL 的测试、硬件连接与上一篇文章中的图片相同。 代码如下所示。
/*********
*目前一切都适用于 TCAN4550 *
(小部分 /
init_cand();//运行主 MCAN 配置序列。 大部分配置都在这里!
/*定义我们要发送的 CAN 消息*/
TCAN4x5x_MCAN_TX_Header 接头={0};
uint8_t DATA[4]={0x55、0x66、0x77、0x88};
header.DLC = MCAN_DLC_4B;
header.ID = 0x144;//设置 ID
header.FDF = 1;// CAN FD 帧被启用
header.BRS = 1;//位速率开关被启用
header.EFC = 0;
插头.mm = 0;
header.RTR = 0;
header.XTD = 0;//本示例中未使用扩展 ID
header.ESI = 0;//错误状态指示器
TCAN4x5x_MCAN_WriteTXBuffer (0、标头、数据);
/*让我们生成不同的 CAN 消息*/
数据[0]= 0x11;
数据[1]= 0x11;
DATA[2]= 0x11;
DATA[3]= 0x11;//定义数据有效载荷
header.DLC = MCAN_DLC_4B;
header.ID = 0x123;//设置 ID
header.FDF = 1;// CAN FD 帧被启用
header.BRS = 0;//位速率开关被启用
header.EFC = 0;
插头.mm = 0;
header.RTR = 0;
header.XTD = 0;//本示例中未使用扩展 ID
header.ESI = 0;//错误状态指示器
TCAN4x5x_MCAN_WriteTXBuffer (1、标头、数据);//此行会将数据和标头写入 TX FIFO 1
TCAN4x5x_MCAN_TransmitBufferContents (1);//请求发送 TX 缓冲区1
TCAN4x5x_MCAN_TransmitBufferContents (0);//现在我们可以发送我们之前排队但未发送的 TX FIFO 元素0数据。
我有2个问题:
1) 1)执行此语句后、TCAN4x5x_MCAN_TransmitBufferContents (1);//请求发送 TX 缓冲区1、 可以在特定的时间间隔内在 CANH 和 CANL 上连续检测 CAN 帧。 下一条语句 TCAN4x5x_MCAN_TransmitBufferContents (0)的执行 将对输出没有影响。
在没有额外 CAN 节点的情况下、这是预期的行为吗?
2) 2)检测到的 CAN 帧应为 TX 缓冲器1的输出、详细位如下所示:
a:代码将 ESI 设置为0、但检测值为1。 这是否意味着检测到错误?
b.水平线的"0011"是什么意思?
您好、Shawn、
您通常会看到设置正常。 您将需要一个连接到 GPIO1和 GPO2引脚的收发器(例如 TCAN1042 EVM)或将 GPIO1和 GPO2引脚相互环回、以防止控制器在控制器测试模式下看到错误。 由于 CAN 仲裁的工作方式、当它尝试发送数据包时、它会监控 RXD 引脚以确保其与 TXD 引脚上的值相匹配。 如果这些不匹配、则控制器将停止传输、认为它丢失了仲裁。 实际上、当您尝试使用控制器测试模式时、我认为这是您的主要问题。 当您切换至正常模式时、内部收发器将 TXD 信号循环回 RXD 信号、以便您在 CANH 和 CANL 引脚上查看波形。 但是、您没有第二个节点来确认邮件、因此它会不断尝试重新发送相同的邮件、因为它在发送时未成功。
感谢您提供有关 VSUP 轨的信息。 使用9V 的 VSUP 是很好的。 有一个极性保护二极管会使引脚上的电压下降一个二极管压降、但您有足够的裕量来保持 TCAN4550引脚上的电压大于6V、因此这里没有问题。 我主要想确保您的设置中不会出现任何形式的电压问题。
您可以为此应用使用 TCAN4550 EVM 或 BOOSTXL-CANFD-LIN 板。 我将该 EVM 设计为通用板、可通过跳线与任何 MCU 板配合使用。 然后、我设计了 BoosterPack、以便更轻松地将 TCAN4550与 TI MCU LaunchPad 配合使用并进行评估。 BoosterPack 等电路板之间存在一些微小的差异、例如具有额外的 LIN 收发器、但从 TCAN4550的角度来看、它们是等效的。
GPIO1和 GPO2引脚都连接到 EVM 的底部数字 IO 接头。 我在下图中突出显示了它们。 该 EVM 旨在支持 TCAN4x5x 系列的未来器件、这些器件可支持更宽的 VIO 范围(2.5V 和1.8V)、以及可根据用于 TCAN4550的晶体提供给 MCU 的电势输出时钟。 该时钟输出功能尚不可用、但这正是在接头引脚上添加额外 SMA 和丝印标签的原因。 如果造成混乱,我表示歉意。
我建议您将第二个 TCAN4550和 MCU 组合连接到您的当前设置、以便拥有一条完整且功能齐全的 CAN FD 总线、该总线可以确认消息并相互发送和接收数据包。 这将有助于全面评估您的设置、与尝试将单个板与外部收发器配合使用相比、这将是一个更好的解决方案、因为您将收到确认错误。 一般来说、CAN 总线需要2个完整的节点才能正常工作。
关于 ESI 位、这很可能是由于缺少确认节点导致消息传输失败而产生的错误。 添加第二个节点应清除此问题。
关于4个 DLC 位之后的位、我认为您错过了额外的"0"、"1"位之间实际上应该有5个"0"位。 第一个"1"位是一个"填充位"、当它检测到5个或更多相同值的连续位时、由控制器自动插入。 当它检测到这种情况时、它将在接收节点将自动丢弃的字段中插入一个相反的值。 由于 DLC 字段为"0100"、后跟第一个"0001"数据字段、因此有一个包含5个连续"0"位的字符串、导致填充位插入到原始数据字节的"1"位之前。 我还认为、数据字节之后的 CRC 位碰巧作为另一个"0001"数据字节出现、从而产生数据"0011"神秘字节的错觉。
此致、
Jonathan
您好、Shawn、
我很高兴能够为您提供帮助!
是的、您在图片中显示的内容应该可以正常工作。 如图所示、您只需要提供 CANH 和 CANL 连接、然后在 TCAN4550 EVM 和 MCU LaunchPad 之间建立所有其他连接、正如我们已经讨论过的那样。 除了使用 TCAN1042配置 MCU 以实现控制器模式、两个节点之间的位时序和其他设置可以相同。
此致、
Jonathan
Jonathan
感谢你的帮助。
'除了使用 TCAN1042配置 MCU 以实现控制器模式之外、两个节点之间的位时序和其他设置可以相同。'
您的意思是"在将 MCU 配置为 TCAN4550用于控制器模式之外、..."
您好、Shawn、
我很抱歉造成任何混淆。 我将尝试澄清。
在您的设置中、您有两个"节点"、其中每个节点包含一个 MCU 和 TCAN4550。 其中一个节点使用 BoosterPack、其中一个节点使用 TCAN4550的通用 EVM。 如果您使用了 TCAN4550的集成 CAN FD 收发器、则可以使用相同的设置、甚至是完全相同的固件来配置这两个节点、尽管在不同类型的电路板上实现了这些节点、但它们仍能够相互通信。 我的要点是 TCAN4550位时序和其他配置设置是相同的。
但是、您正在尝试在其中一个节点上绕过 TCAN4550的内部收发器、方法是在控制器模式下使用该收发器并添加一个 TCAN1042收发器。 在此节点中、不能使用与使用内部收发器的节点完全相同的 TCAN4550寄存器配置。 您必须修改代码和寄存器设置以将其置于控制器模式。 不过、我的观点是、除了进行这种简单的控制器模式修改之外、TCAN4550的所有其他位时序、时钟和其他寄存器设置都可以与您在使用 TCAN4550内部收发器的节点中使用的设置相同。
更重要的是、为了使用外部收发器、如 TCAN1042、使用绕过 TCAN4550收发器应该是内部收发器在正常模式下使用 TCAN4550的应用程序的一个非常简单的代码修改。 这是一条简单的注释、您无需担心需要进行主要代码修改才能在控制器模式下使用 TCAN4550。
我希望这清除了我之前的帖子、但我相信您已经完全正确地了解了如何配置系统。
此致、
Jonathan
Jonathan
非常感谢!
你好、Jonathan
我仍然对 CAN FD 的速度有疑问。
我知道、将 BRS 位设置为隐性位(1)意味着数据帧的其余部分以更高的位速率(高达5Mbit/s)发送。
因此、我的问题是、使用 CAN FD 控制器时、我是否可以使用命令将 CAN FD 速度设置为特定值、或者速度仅受其他因素(例如工作温度和线长)控制、不能进行人工设置? 谢谢!
新年快乐!
您好、Shawn、
祝您新年快乐! 很抱歉、我的回复很晚、因为我对这篇帖子失去了跟踪、刚刚看到了您的最后一篇帖子。
我想你的问题答案是不、没有设置速度的"命令"、也没有、其他因素、例如温度和导线长度不会导致速度变化。 配置位时序参数(如 DTSEG1、DTSEG2、DBRP、DSJW 等)后、速度被置位(寄存器0x100C)。
当您使用标称和数据位时序配置 TCAN4550时、控制器将对所有消息使用这些设置。 总线上的所有器件应配置为具有相同时序参数的相同速度、以确保正确通信并防止节点发出错误。 控制器只为位时间的每一部分分配指定的时间量。 在这种情况下、您必须事先根据输入时钟频率(通常为20Mhz 或40MHz)确定每个位所需的时间量。 控制器没有基于预先确定的设置确定特定比特率的方法、例如500kbps、2Mbps 或5Mbps。 如果您要更改速度、只需更改各种设置的分配、这些设置将导致更快或更短的位。
但从这个意义上讲、MCU 可以通过让 MCU 写入这些寄存器来随时更改数据速率、这实际上可以被视为"命令"。 BU 没有一组简单的命令或具有预定设置的寄存器。
我希望这能回答你的问题,我再次对我的答复拖延表示歉意。
此致、
Jonathan