NXP i.MX6 CPU有两个FlexCAN控制器,运行速度高达1mbps。FlexCAN是根据CAN 2.0B协议规范实现CAN协议的通信控制器。它支持标准消息帧和扩展消息帧。最大消息缓冲区为64。该驱动程序是PF_CAN协议家族的网络设备驱动程序。

CAN网络设备驱动程序接口提供了一个通用接口来设置、配置和监视CAN网络设备。例如,您可以配置can设备,设置位定时参数,通过网络链路接口使用程序知识产权iproute2实用工具套件。

FlexCAN模块包括这些独特的遗留特性:

  • 版本2.0 b

  • 标准数据和远程帧

  • 扩展数据和远程帧

  • 0到8字节的数据长度

  • 可编程比特率高达1mbps

  • 内容相关处理

  • 数据长度为8字节的灵活邮箱

内核配置

MMC支持可以通过以下内核配置选项添加:

  • 组网> CAN总线(CONFIG_CAN)

  • 组网> CAN总线子系统支持> CAN设备驱动> NXP FlexCAN(CONFIG_CAN_FLEXCAN)

CAN总线支持已作为内置在ConnectCore 6 SBC内核配置文件

内核驱动程序

i.MX6的CAN总线驱动程序位于司机/ net/can/flexcan.c

设备树绑定和自定义

i.MX6 CAN接口设备树绑定在文档/ devicetree /绑定/ net/can/fsl-flexcan.txt

CAN接口定义在i.MX6 CPU、ConnectCore 6和ConnectCore 6 SBC设备树文件中。

例如:Can1

设备定义

i.MX6设备树
Can1: flexcan@02090000 {compatible = "fsl,imx6q-flexcan";Reg = <0x02090000 0x4000>;中断= <0 110 IRQ_TYPE_LEVEL_HIGH>;时钟= <&clks IMX6QDL_CLK_CAN1_IPG>, <&clks IMX6QDL_CLK_CAN1_SERIAL>;Clock-names = "ipg", "per";Stop-mode = <&gpr 0x34 28 0x10 17>;Status = "disabled";};

IOMUX配置

ConnectCore 6设备树
can1 {pinctrl_flexcan1: can1 {fsl,pins = < MX6QDL_PAD_GPIO_7__FLEXCAN1_TX 0x1b0b0 MX6QDL_PAD_GPIO_8__FLEXCAN1_RX 0x1b0b0 MX6QDL_PAD_GPIO_2__GPIO1_IO02 0x1b0b0 >;};};

公共汽车使

i.MX6设备树
&can1 {pinctrl-names = "default";Pinctrl-0 = <&pinctrl_flexcan1>;stby-gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;Status = "ok ";};

用户空间使用示例

CAN设备接口

CAN网络设备驱动程序接口提供了一个通用接口来设置、配置和监视CAN网络设备。例如,您可以通过设置位定时参数来配置can设备netlink使用程序接口知识产权iproute2实用工具套件。

设置比特率

在启动can网络设备之前,您必须配置它将通信的比特率,例如:

ip链路设置canX up类型可以比特率125000

在这个例子中,X是要配置的CAN节点的索引。

启动和停止CAN网络设备

与其他网络接口类似,可以使用命令启动或停止can网络设备ifconfig命令。在下面的例子中,X是要向上或向下移的CAN节点的索引。

开始:

ifconfig canX up

停止:

ifconfig canX down

有关更多信息,请参阅Linux内核文档:文档/网络/ can.txt

CAN设备测试应用程序

CAN支持是基于SocketCAN栈的。有关此项目的更多信息和源代码,请参阅http://elinux.org/CAN_Bus而且https://github.com/linux-can/

构建包dey-examples-can在Yocto项目中安装测试应用程序can_test。

语法

查询应用程序的语法。

can_test——帮助

例子

向节点发送8位CAN消息can0与ID0 x12数据模式0 x65

Can_test -l 1 -b 8 -d can0 -i 0x12 -p 0x65 -m .使用实例

收到类似的信息:

Can_test -l 1 -b 8 -d can0 -i 0x12 -p 0x65 .使用实例