全志A40i或者T3的CPU中无CAN控制器,而在实际使用过程中,会用到CAN,一般会采用SPI转CAN的方式。CAN控制器一般有两种选择,一种是MCP2515,一种是MCP2518,考虑到目MCP2518成本偏贵,我们目前采取的是接口MCP2515的方案。
产品特性:
采用Allwinner公司Cortex-A7四核A40i处理器,运行最高速度为1.2GHZ;
- 支持Mali-400MP2 GPU,支持OpenGL ES 2.0 / OpenVG 1.1 standard
- 支持1080P 视频编码,支持H.264,VP8;多格式1080P 60fps视频解码 (H.265,H.264,VC-1, MPEG-1/2/4, VP8)
- 支持双屏异显;支持RGB888/LVDS/MIPI-DSI,分辨率最高1920x1080;
- 支持512-2G Bytes DDR3 SDRAM;
- 支持EMMC 4G-64G大容量电子盘,可启动;
- 支持SDIO3.0,USB2.0 HOST&OTG,2路I2C,6路UART,2路SPI,2路PWM
- 支持双路以太网,一路10/100M;一路10/100/1000M;
- 可定制宽温产品,替换AM335X
- 稳定的操作系统的支持,可预装Android7.0或者LINUX 3.10;
- 超小体积,邮票孔设计160pins, 尺寸为:45*45MM
产品参数:
FUNCTION | CoM-X40I | |
主要参数 | 主控制器 | Allwinner,A40i,4核Cortex-A7,1.2GHZ(Max) |
内存 | 512MB DDR3(最大可到2GB) | |
闪存 | EMMC(最大到64GMB) | |
视频编码 | 支持1080P 视频编码,支持H.264,VP8;多格式1080P 60fps视频解码 (H.265,H.264,VC-1, MPEG-1/2/4, VP8) | |
电源管理 | AXP221S (本审计不可支持电池供电) | |
RTC | AXP221S内置 | |
看门狗 | 有 | |
I/O | 串口 | 串口6个,LVTTL电平 |
以太网 | X2,一路10/100Mbps,一路10/100/100Mbps; | |
USB OTG | X1,高速 | |
USB HOST | X2,高速 | |
SD/MMC卡 | 四线 | |
电阻式触摸屏 | 四线 | |
系统总线 | 无 | |
IIC接口 | 2 | |
SPI接口 | 2 | |
GPIO | 多个3.3V LVTTL电平 | |
音频 | A40I内置 | |
多媒体 | Graphic Chip | 支持Mali-400MP2 GPU,支持OpenGL ES 2.0 / OpenVG 1.1 standard |
分辨率 | 最大1920×1080 | |
LCD接口 | 支持RGB888/LVDS/MIPI-DSI,分辨率最高1920x1080; | |
电源 | 电源 | 5.0 V (+-5%) |
Power Consumption | TBD | |
尺寸 & 环境 | 尺寸 | 45MM*45MM*3.2MM |
工作温度 | 0 ~ 70° C (可定制-30-70°C) | |
工作湿度 | 5 ~ 95 % ,冷凝结 | |
其他 | RoHS | YES |
认证 | CE | |
软件支持 | Linux 3.10 /Android7.0/Ubuntu 16.04 |
在CoM-X40I核心板(以全志A40i为处理器的核心板)的接口上,我们分配一路 SPI接口MCP2515, MCP2515的io电平是 3.3V,我们务必注意A40I核心板上能够接口的SPI也要电平匹配,CoM-X40I本身是工业类处理器,盈鹏飞嵌入式已经考虑了这个3.3V的电平兼容性,连接见下图:
根据CPU手册第三章描述,可以将PB14-17复用为SPI2,采用PH0作为中断。
这些需要注意的是:
在选择复用引脚时,需要给SPI转CAN模块选择一个中断引脚,而CoM-X40I核心板并非每个引脚都具有中断功能,需要在《引脚复用对照表》中进行筛选,选择带有中断功能的GPIO。首先需要确定哪些引脚具有中断功能,表格中引脚可复用功能中具有EINT*的引脚是具有中断功能的。我们可以从这些引脚中选择一个作为SPI转CAN模块的中断引脚,选择时注意这些引脚原本是什么功能,选择一个不需要的功能引脚作为SPI转CAN模块的中断引脚,比如下图是我们的方案中选用的PH0这个引脚。
A40i/T3采用sys_config.fex或者dts 配置引脚复用功能,下面我们采用dts 进行配置。
01-打开SPI2
修改sys_config.fex,打开SPI2的配置。
同时修改设备树:
02-修改defconfig
采用通过其他平台验证,且适配设备树的驱动mcp251x.c,
修改defconfig 配置文件:
Networking support ---> CAN bus subsystem support --->CAN Device Drivers --->Microchip MCP251x SPI CAN controllers选中。
同时选中SPI配置,默认已支持,此处不再说明。
03-配置iproute
文件系统:
buildroot-201611/configs/sun8iw11p1_hf_defconfig
需要配置上BR2_PACKAGE_IPROUTE2=y.
重新编译,并打包镜像,烧录。
04-测试can0节点
启动之后,ifconfig 查看出现can0节点。使用以下命令进行测试:
ifconfig can0 down
ip link set can0 up type can bitrate 125000 triple-sampling on
ifconfig can0 up
cansend can0 123#12345678
candump can0
如果有必要请联系盈鹏飞嵌入式技术服务人员,提供patch文件。
注意事项
- 在设备树中,用作中断时, A40i/T3不是每个gpio都可以做为中断,其中PH/PI组的引脚可作为中断,本例以PH0为例,
,在设备树中设置中断时的如下:
interrupt-parent = <&pio>;
interrupts = <0 0>; - 另外,需要注意驱动中的中断触发方式。
- 通过SPI转CAN实现的CAN功能,相对于原生CAN的性能有一定的不足,在500K波特率下外部设备单次发送多帧数据,接收数据时可能出现丢帧现象,频繁收发数据可能出现丢帧现象,为解决这一问题,需要取消CPUIdle Driver for Sunxiprocessors选项,在盈鹏飞嵌入式提供的最新的资料源码中已经做了重新配置!如果您使用的不是最新资料,可以在源码中linux-3.10目录下执行makemenuconfig ARCH=arm将[] CPU Idle Driver for Sunxi processors的编译去掉
- CPU Power Management --->
- [ ] CPU Idle Driver for Sunxi processors