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

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1408108/tcan4550-tcan4550

器件型号:TCAN4550

工具与软件:

您好!

我们使用的是集成在 IMX8DXL 处理器中的 TCAN4450模块。 TCAN 模块已成功初始化、但无法发送数据(TX)、并且 RX 正确发生。
当我们尝试从处理器发送消息(TX)时、观察到 TCAN 紧急情况。

下面是 DTS 配置。

&lpspi3 {
pinctrl-names ="默认值";
pinctrl-0 =<&pinctrl_lpspi3>;
fsl、spi-num-chipselect =<1>;
spi-max-Frequency =<6000000>;
CS-GPIO =<&lsi_GPIO0 16 GPIO_ACTIVE_HIGH>;
状态="正常";


tcan4x5x1:tcan4x5x@0{
兼容="ti、tcan4x5x";
REG =<0>;
pinctrl-names ="默认值";
#address-cells =<1>;
#size-cells =<1>;
spi-max-frequency =<4000000>;
Bosch、MRAM-cfg =<0x0 3 2 28 10 0 20 12>;  
Clocks =<&hclk>、<&cclk>;
时钟名称="hclk"、"cclk";
interrupt-parent =<&lsio_GPIO3>;
中断=<18 IRQ_TYPE_EDGE_FALLING>;
数据就绪-GPIO =<&lsi_GPIO3 18 GPIO_ACTIVE_HIGH>;
RESET-GPIO =<&EXP2 11 GPIO_ACTIVE_HIGH>;
iw-tcan-prop;
唤醒源;
状态="正常";

};
};

以下是尝试发送数据时的紧急情况

root@imx8dxl-iwg46s:~# insmod /run/media/mmcblk0p1/tcan4x5x.ko
[25.051965]内探头---
[ 25.40915] tcan4x5x spi3.0:M_CAN 器件已注册(IRQ=215、版本=32)
[ 25.419456] tcan4x5x spi3.0 CAN3:TCAN4X5X 成功初始化。
root@imx8dxl-iwg46s:~#
root@imx8dxl-iwg46s:~# ip link set CAN3 up type can bitr[ 33.851928] CAN-3V3:disabling
[ 33.855019] Vref_1v8:禁用
[ 33.858219] USB_OTG1_VBUS:禁用
ATE 250000
[ 36.234793] IPv6:ADDRCONF (NETDEV_CHANGE):CAN3:链路就绪
root@imx8dxl-iwg46s:~# cansend CAN3 123#aabbccddee
[42.931517]开始----
[ 42.934202]处理程序启动了-----------
[42.938970]第11位标识符
[42.938977] else part of version---------------
[ 42.946910]错误:原子调度:cansend/447/0x00000203
[42.952990]模块链接于:tcan4x5x
[42.956893] CPU:1 PID:447 Comm:cansend not dament 5.15.52+gf266012f09d6 #129
[42.964318]硬件名称: IW-Rainbow-G46M-i.MX8DXL OSM (DT)
[42.969983]呼叫跟踪:
[ 42.972429] dump_backtrace+0x0/0x1a0
[ 42.976116] show_stack+0x1c/0x70
[ 42.979451] dump_stack_lvl+0x68/0x84
[ 42.983124] dump_stack+0x1c/0x38
[ 42.986454]_SCHEDULE_BUG+0x60/0x80
[ 42.990126]__SCHEDULE+0x658/0x710
[42.993627] SCHEDULE+0x74/0x110
[ 42.996869] schedule_timeout+0x80/0xf0
[ 43.000716] WAIT_FOR_COMPENSATION_TIMEOUT+0x80/0x10c
[ 43.005607] fsl_lpspi_transfer_one_0x4c8/0x6e0
[ 43.010153] SPI_TRANSFER_ONE_MESSAGE+0x174/0x1d0
[ 43.014868]__SPI_PUMP_MESSAGE.constprop.0+0x264/0x50c
[ 43.020195]__SPI_SYNC+0x18c/0x1c0
[ 43.023694] SPI_WRITE_THEN_READ+0xf8/0x1e0
[43.027890] tcan4x5x_regmap_read+0x3c/0x64 [tcan4x5x]
[ 43.033051]_regmap_raw_read+0xd8/0x17c
[ 43.036986]_regmap_BUS_READ+0x48/0x80
[ 43.040835]_regmap_read+0x64/0xf0
[ 43.044338] regmap_read+0x50/0x80
[ 43.047752] tcan4x5x_read_reg+0x34/0x60 [tcan4x5x]
[ 43.052652] m_can_tx_handler+0x298/0x89c
[ 43.056672] m_can_start_xmit+0xac/0x14c
[ 43.060610] DEV_hard_start_xmit+0xd8/0x160
[ 43.064803] sch_direct_xmit+0xe8/0x36c
[ 43.068652]__dev_queue_xmit+0x524/0xb6c
[ 43.072677] dev_queue_xmit+0x18/0x24
[ 43.076351] CAN_SEND+0xc0/0x260
[ 43.079592] raW_sendmsg+0x140/0x30c
[ 43.083180] SOCK_WRITE_ITE+0xa4/0x110
[ 43.087028] NEW_SYNC_WRITE+0x174/0x184
[ 43.090877] vfs_WRITE+0x230/0x29c
[ 43.094291] ksys_write+0xdc/0xf4
[ 43.097618]__ARM64_sys_WRITE+0x20/0x2C
[ 43.101554] invoke_syscall+0x48/0x114
[43.105313] el0_Svc_common.constprop.0+0xd4/0xFC
[43.110033] DO_el0_Svc+0x2C/0x94
[43.113361] el0_Svc+0x28/0x80
[ 43.116427] el0t_64_SYNC_HANDER+0xa8/0x130
[ 43.120707] el0t_64_sync+0x1a0/0x1a4
[ 43.124997] putidx 0000 0000 0000 0000 0000 0000 0000
[ 43.132847] M_CAN_TXFQS0000 0000 0000 0000 0000 1100
[ 43.139491] M_CAN_FIFO_ID、---- 0011 0010 0001 0101 0000 0011 0010 0000
[ 43.147313]后-- M_CAN_FIFO_ID、---- 0011 0010 0001 0101 0000 0011 0010 0000
[43.155643]在 FIFO 写入前----
[43.161333] FIFO 写入后即可---
[ 43.166784]内有循环 fifo write-----
[ 43.172771]内有循环 FIFO 可写------------
[43.178959]请求拖延-------
[43.184270]延迟结束-------
[43.189771]未满---
[43.193134]---- [剪切于此处]--------
[ 43.193139]警告:CPU:0 PID:447 at kernel/softirq.c:362 __local_bh_enable_ip+0xac/0xbc
[ 43.193164]已链接的模块:
[43.193168] tcan4x5x
[43.209194]
[43.209202] CPU: 0 PID: 447 Comm: cansend damed: G W 5.15.52+gf266012f09d6 #129.
[ 43.209213]硬件名称:IW-Rainbow-G46M-i.MX8DXL OSM (DT)
[ 43.209218] pstate:00000005 (nzcv daif -pan -uao -tco -dit -ssbs BTYPE=-)
[ 43.209227] PC:_LOCAL_BH_ENABLE_IP+0xac/0xbc
[ 43.209240] lr :_dev_queue_xmit+0x424/0xb6c.
[43.209250] sp : ffff80000af5bb20.
[43.209253] x29: ffff80000af5bb20 x28: ffff000005f38000 x27: 00000000000000000000
[43.209268] x26:ffff000005c59028 x25:ffff000005b91000 x24:0000000000000010
[43.209283] x23:ffff000005b91000 x22:ffff000005e99e00 x21:ff000005b90400
[43.209300] x20:0000000000000000 x19:ffff000005c59000 x18:0000000000000003
[ 43.209314] x17:00000000000000001aeb x16:0000000000000113 x15:000000b4caf04ccf
[ 43.209329] x14:0000000000000245 x13:0000000000000000 x12:0000000000000000
[43.209343] x11:0000000000000002 x10:0000000000000990 x9:ffff80000af5b7a0
[43.209359] x8 : ffffff000005f389f0 x7 : ffffff000005b90540 x6 : ffff000005b90780
[ 43.209378] x5:000000000000000a x4:000000000000000a x3:ffffff000005b904d8.
[ 43.209391] x2 : 0000000000000000 x1 : 0000000000000200 x0 : 00000000fffffe.
[43.209409]呼叫跟踪:
[ 43.209414]__LOCAL_BH_ENABLE_IP+0xac/0xbc
[ 43.209425]__dev_queue_xmit+0x424/0xb6c
[ 43.209435] dev_queue_xmit+0x18/0x24
[ 43.209445] can_send+0xc0/0x260
[ 43.209456] raW_sendmsg+0x140/0x30c
[ 43.209465] SOCK_WRITE_ITE+0xa4/0x110
[ 43.209480] NEW_SYNC_WRITE+0x174/0x184
[ 43.209494] vfs_WRITE+0x230/0x29c
[ 43.209505] ksys_write+0xdc/0xf4
[ 43.209518]__ARM64_sys_WRITE+0x20/0x2C
[ 43.209529] Invoke_syscall+0x48/0x114
[43.209540] el0_Svc_common.constprop.0+0xd4/0xFC
[43.209554] DO_el0_Svc+0x2C/0x94
[43.209567] el0_Svc+0x28/0x80
[ 43.209578] el0t_64_sync_handler+0xa8/0x130
[ 43.209586] el0t_64_SYNC+0x1a0/0x1a4
[ 43.209595][结束跟踪1101eba41d86a994 ]--
[43.209712]无法处理虚拟地址0000ffff84049df0处的内核分页请求
[ 43.209726]存储器中止信息:
[ 43.209728] ESR = 0x82000007
[ 43.209731] EC = 0x20:IABT (较低 EL)、IL = 32位
[ 43.209737]设置= 0、FNV = 0
[ 43.209741] EA = 0、S1PTW = 0
[ 43.209744] FSC = 0x07:3级转换故障
[43.209749]用户 pgtable:4K 页、48位 vas、pgdp=0000000094a20000
[ 43.209755][0000ffff84049df0] pgd=0800000085ee3003、p4d=0800000085ee3003、pud=0800000085c1d003、pmd=0800000085c25003、pte=0000000000000000
[ 43.209776]内部错误:Oops:82000007 [#1] preempty SMP
[43.209782] Modules linked in:tcan4x5x
[ 43.209790] CPU:0 PID:447 Comm:cansend 污染:G W 5.15.52+gf266012f09d6 #129
[ 43.209799]硬件名称:IW-Rainbow-G46M-i.MX8DXL OSM (DT)
[ 43.209803] pstate:20000000 (NzCv daif -pan -uaO -tco -dit -ssbs BTYPE=-)
[43.209812] PC : 0000ffff84049df0
[43.209815] LR : 0000ffff83fd06d0
[43.209817] sp : 0000fffffd6ba8250
[43.209820] x29:0000ffffd6ba8250 x28:0000ffffff8417c350 x27:0000aaaad3e13b88
[43.209834] x26:0000ffffd6ba82d0 x25:000000000000 x24:0000ffff8417aaf8.
[43.209850] x23:0000ffff8412c000 x22:0000000000000004 x21:0000ffff8412c748
[43.209864] x20:0000aaaad3e14008 x19:0000ffffff8412c728 x18:fffffffffffffffffffffffffff000
[ 43.209881] x17:0000000000000000 x16:0000000000000000 x15:0000ffff84175da0
[43.209894] x14:0000ffffff8417c000 x13:0000ffffff8417bb60 x12:0000ffff841740b0
[43.209909] x11:0000ffffd6ba82c0 x10:0000210000000000 x9:0000ffffd6ba82bf
[ 43.209924] x8 : 0000000000000020 x7 : 0000ffffff8417c930 x6 : 0000ffff8417c350
[ 43.209939] x5 : 000000000000017f x4 : 0000ffff8417bab0 x3 : 00000000000000000000
[ 43.209953] x2 : 0000ffffff8412cb60 x1 : 0000000000000001 x0 : 0000aaaad3e14008.
[43.546303]--[结束跟踪1101eba41d86a995 ]--
[ 43.546310]内核严重-未同步:哎呀:中断中出现致命异常
[43.546316] SMP:停止辅助 CPU
[ 43.546324]内核偏移:禁用
[ 43.546327] CPU 特性:0x00000,001,20000846
[43.546333]内存限制:无
[ 43.572634]--[结束内核恐慌-未同步:哎呀:中断中的致命异常]--

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

    您好、Tanushree

    如果我正确理解您、TCAN4550将正确初始化并且可以接收 CAN 消息、但在尝试传输消息时会出现问题。  是这样吗?

    我不确定"内核严重"是什么、我的专长是 TCAN4550器件、而不是 Linux、因此我可以在寄存器配置和硬件相关问题方面为您提供帮助。   

    不过、我的第一个想法是、TCAN4550的 MRAM 中可能会存在存储器分配问题。  TCAN4550中只有2KB 的 MRAM 需要为您的应用进行配置。  所有 TX 和 RX 缓冲区、SID 和 XID 过滤器以及事件 FIFO 消息必须都能放入2KB 限制内。 我不知道您为 TX 和 RX 缓冲区配置了多少字节的数据、这将决定这些元素需要多少存储器。  但是、根据您的配置中的元素数量、您几乎可以肯定地超过了2KB 的限制。  

    [报价 userid="601436" url="~/support/interface-group/interface/f/interface-forum/1408108/tcan4550-tcan4550 ]Bosch、MRAM-cfg =<0x0 3 2 28 10 0 20 12>; 

    有关此 MRAM 配置的说明、请查看 m_can.yaml (链接)。

    请注意、对 MRAM 内的存储器分配没有错误检查。  另请注意、如果您尝试访问超出最大地址的位置、存储器地址会自动环绕。  因此、您可以覆盖配置中的存储器单元、并且需要计算并验证存储器分配是否不会超过上限、从而防止和覆盖。

    MCAN 可配置为支持的元素数量超过了 TCAN4550中的物理内存、因此您将无法为每种类型分配最大元素数量。  请验证您的 MRAM 内存分配要求、并在必要时调整配置中的元素数量。

    如果您可以在初始化后从器件中读回最终的寄存器值、并且您认为 MRAM 分配正确、我可以在器件级别查看它们是否可能存在错误。

    此致、

    Jonathan

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

     Jonathan、您好!

    是的、您的理解正确。

    在相同的配置下、m_can 文件正在 IMX6ULL 中工作。 但是、在 IMX8DXL 中、它不工作。 在 m_can_xmit 函数队列工作函数中、我们正在调用 m_can_tx_handler 函数、但我们要删除队列工作函数、而是直接调用 m_can_tx_handler 函数。

    下面是 m_can.c 和 tcan4x5x.c 文件。 相同的更改在 IMX6处理器中正常工作。 此更改用于 CANFD 优化。

    e2e.ti.com/.../0410.tcan4x5x.c

    e2e.ti.com/.../m_5F00_can.c

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

    您好、Tanushree

    如果 TCAN4550在 IMX6处理器上处理您的代码、则可能不是 TCAN4550寄存器配置问题、而是与 IMX6和 IMX8DXL 处理器之间的某些差异相关。  我没有任何一项的相关经验、因此我不知道如何在处理器问题上为您提供帮助。

    如果您可以在出现问题期间监控 TCAN4550寄存器中设置了任何中断或状态位、我可以尝试在功能级别提供一些见解。  但我只能通过使用器件中的寄存器值来验证配置是否正确以及任何中断和状态位表示什么来为您提供支持。

    因为我不是 Linux 专家、而且对这两种处理器中的任何一种都不熟悉、所以我不会告诉您为什么代码在一种处理器上工作、而在另一种处理器上工作。

    此致、

    Jonathan

x 出现错误。请重试或与管理员联系。