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.

[参考译文] LINUXEZSDK-Sitara:如何在 Linux 中通过 C 代码使用 CAN 总线?

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1044901/linuxezsdk-sitara-how-to-use-the-can-bus-from-c-code-in-linux

器件型号:LINUXEZSDK-Sitara

尊敬的 TI:  

我有一个带有 AM437x 的具有 CAN 总线的系统。
我需要开发一个 C 语言代码来通过 CAN 总线发送和接收数据。

1-)使用 Linux 'ls'命令、如何验证 Linux 系统上的 CAN 接口是否可用?

2)如何使用 CAN 接口(打开、发送和接收数据...) 从 C 代码中删除。

3) 3)我需要什么库?

4) 4)是否有可用的示例?

非常感谢。  

此致。  

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

    您好!

    我可以建议的最佳示例是查看开源的 CAN utils repo。 这是 到 REPO 的链接。 此 repo 将具有显示如何访问 CAN 接口的 C 代码。 我建议查看 cansend.c 以获取一个详细示例。 CAN 接口可通过以太网等网络套接字进行访问。

    此致、

    Schuyler

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

    您好!  

    此致、非常感谢!

    关于您与我共享的链接:
    我已经检查了 cansend.c 函数的参数。
    我使用以下命令从 Linux 调用函数 cansend.c:sudo ./cansend.o CAN0 123#00
    但我得到以下响应:1:./cansend.o:语法错误:Word Unexpected (expecting ""))
    我在函数参数中有一些错误、但我不知道我做了什么错误。
    问题1:
    请、您是否对我的行为有任何疑问?

    我还尝试了以下代码示例: github.com/.../CAN-Examples
    我得到以下答复:
    CAN 插座演示
    写入:网络已关闭
    CAN 总线为开路(总线未连接任何器件)。 但我正在使用示波器检查总线、并且没有数据、我希望在示波器上看到一些东西。
    问题2:
    如果总线上没有连接设备、并且正在发送数据、那么观察总线上是否没有变化是正常的?

    我已查看此链接、该链接适用于不同的 MPU、 AM6442 CAN 端口-处理器论坛-处理器- TI E2E 支持论坛
    如果我运行命令:sudo ip -d -s link show CAN0
    我得到:
    2:CAN0: MTU 16 qdisc noop state down mode default group default qlen 10
    链接/ CAN 混杂0 minmtu 0 maxmtu 0
    CAN 状态停止(错误计数器 TX 0 Rx 0)重新启动 ms 0
    比特率1000000采样点0.750
    TQ 83传播4相位段1 4相位段2 3 SJW 1
    c_can:tseg1 2..16 tseg2 1..8 SJW 1..4 BRP 1.1024 BRP-inc 1.
    时钟24000000
    重新启动总线错误 arbit-lost error-warn error-pass bus-off
    0 0 0 0 0 0 0 numtxqueue 1 GSO_max_size 65536 GSO_max_segs 65535
    RX:字节数据包错误丢失溢出 mcast
    0 0 0 0 0 0 0
    TX:字节数据包错误丢失了载波整理
    0 0 0 0 0 0 0

    如果我运行命令:sudo IP link set CAN0 type can bitrate 1000000 dbitrate 4000000 fd on
    我得到:RTNETLINK 回答:不允许操作
    如果我运行命令:sudo ip link set CAN0 up
    我得到:RTNETLINK 回答:不允许操作
    问题3:
    这种结果是否正常?

    非常感谢。 祝你度过快乐的一天!  

    此致。  

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

    您好!

    对延迟答复表示歉意。 我认为您使用的是 TI 文件系统、sudo 命令不在 TI 文件系统中提供、因此不需要。

    要在 CANBUS 上发送数据、您需要连接 CAN 器件。 这也可以是一个 CANBUS 分析仪、它提供必要的端接、以便电信号工作、从而允许在 CANBUS 上发送消息。 SOC 的 CANBUS IP 必须认为已连接一个设备来发送消息。

    此致、

    Schuyler