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.

[参考译文] TCAN4550EVM:TCAN4550数据位时序问题

Guru**** 1764025 points
Other Parts Discussed in Thread: TCAN4550EVM, TCAN4550
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/993264/tcan4550evm-tcan4550-data-bit-timing-issue

器件型号:TCAN4550EVM
主题中讨论的其他器件: TCAN4550

你好

我通过 有线连接将 TCAN4550EVM 连接到我的板。

我正在尝试 Linux 驱动程序代码(从最新版本开始... 5.12.xxx)。

Linux 代码提供了位定时计算功能( CAN_calc_bittiming()),我尝试了这种方法。

TCAN4550EVM 提供的40MHz CAN 时钟和 我测试过的 CAN 速率为500kHz、FD 数据速率为2MHz

根据 Linux 代码、位时序常量是这样计算的

static int can_get_bittiming(struct net_device *dev, struct can_bittiming *bt,
			     const struct can_bittiming_const *btc,
			     const u32 *bitrate_const,
			     const unsigned int bitrate_const_cnt)
{
	....
	if (!bt->tq && bt->bitrate && btc)
		err = can_calc_bittiming(dev, bt, btc);
	....
}

我输入了上面的"bt->bitration"值、而输入的"BTC"值则是 TI Linux 代码所输入的。

static const struct can_bittiming_const m_can_bittiming_const_31X = {
	.name = KBUILD_MODNAME,
	.tseg1_min = 2,		/* Time segment 1 = prop_seg + phase_seg1 */
	.tseg1_max = 256,
	.tseg2_min = 2,		/* Time segment 2 = phase_seg2 */
	.tseg2_max = 128,
	.sjw_max = 128,
	.brp_min = 1,
	.brp_max = 512,
	.brp_inc = 1,
};

static const struct can_bittiming_const m_can_data_bittiming_const_31X = {
	.name = KBUILD_MODNAME,
	.tseg1_min = 1,		/* Time segment 1 = prop_seg + phase_seg1 */
	.tseg1_max = 32,
	.tseg2_min = 1,		/* Time segment 2 = phase_seg2 */
	.tseg2_max = 16,
	.sjw_max = 16,
	.brp_min = 1,
	.brp_max = 32,
	.brp_inc = 1,
};

然后按如下方式进行位时序计算:

BT 计时:br:50000 BRP:1,proseg:34 SJW:1 tseg1:35 tseg2:10 sp:875 tq:25

数据 bt 时序:br:2000000 BRP:1,proseg:7 SJW:1 tseg1:7 tseg2:5 sp:750 tq:25

然后我测试了该值、正常 CAN 或 CANFD 信号正常、但 CANFD BRS 信号不工作

这意味着这些经过计算的数据双时序值不起作用。

Q1)我的方法是否正确? 在开发 TI 代码时、使用了什么方法?

Q2)这些计算值是否正确?

Q3)能否获得与这些设置类似的采样位时序值?

谢谢你

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

    您好、DH、

    您列出的比特率配置看起来不错。 每个时间份额的数量等于给定位速率下40MHz 时钟分频的数量。 可以将 TCAN4550配置为用于 CAN FD。 实际采样点是根据数据速率和软件开发人员(TI 外部)先前的项目进行选择的。  

    您能否详细说明您面临的问题? 听起来 CAN FD 通信正常、但比特率开关(BRS)位未置位。 如果是这种情况、请确保控制寄存器(寄存器 h1018、位[9])中的"比特率开关使能"位置位。  
    如果情况并非如此、并且器件无法发送 CAN 数据、则在尝试发送消息时、您能否共享器件的寄存器数据?

    此致、
    Eric Schott

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

    你(们)好 Eric。

    感谢您的回答。 我在正确设置采样点后解决了我的问题