本文主要适用于飞凌 OKMX6ULL-S 平台 Linux4.1.15 操作系统,其他平台也可以参考,但是不同平台之间会存在差异,需客户自行修改以适应自己的使用。
FETMX6ULL-S核心板(点击查看详情)
iMX6ULL应用笔记接口篇主要适用于飞凌 OKMX6ULL-S 平台 Linux4.1.15 操作系统,主要讲解iMX6ULL系列产品接口的一些DEMO测试例程,本篇介绍SPI转CAN模块讲解相关知识点。本文使用的思路和方法仅供参考使用,其它arm开发板虽然芯片不同,但思路和方法有很多的共性,希望对您在板卡的使用中能够有所帮助,更多ARM开发板相关资讯,关注飞凌嵌入式。 如对本文讲解有不明之处,您也可以联系飞凌的技术支持团队咨询了解。《iMX6ULL应用笔记》点此索取
先了解一下这款开发板
FETMX6ULL-S核心板采用NXP的高性能、超高效、低成本处理器MCIMX6Y2开发设计,采用先进的ARM Cortex-A7内核,运行速度高达800MHz。先进的电源管理架构可以提供更低的功耗。 标配8路原生UART 、2路网口、2路CAN-bus总线、2路USB OTG等常用接口;核心板支持工业级和商业及两种配置:256MB DDR3L/512MB DDR3L,256MB NandFlash/4GB eMMC/8GB eMMC,方便用户不同的选择。为了方便用户二次开发的同时简化用户设计,为您的项目评估提供良好的评估及设计依据,飞凌为核心板提供了开发套件OKMX6ULL-S开发板,配备丰富的功能接口,满足用户多样化需求。
OKMX6ULL-C开发板(点击查看详情)
一、增加串口
1. 此处以 uart4 配置进行说明。查看
IMX6ULLRM.pdf 手册中 Chapter 4 External Signals and PinMultiplexing 有
其中第一列为接口号,第二列为功能,第三列为可以复用此功能的
引脚名称,第四列为引脚的模式。
2、修改对应的设备树文件 arch/arm/boot/dts/imx6ull-14x14-evk.dts,在&uart3 下添加&uart4 节点。
3、添加 pinctrl_uart4 引脚复用配置
4、将其它使用这两个引脚的地方去掉或者 disabled,在设备树文件下搜索
MX6UL_PAD_UART4_TX_DATA,可以看到 i2c1 使用了这两个引脚
所以把 i2c1 给 disabled 掉
5、编译生成 dtb,替换并烧写。
6、查看开发板/dev 下有生成 ttymxc3 节点,则驱动加载成功。
测试方法同其它串口的测试方法。
二、串口去掉 DMA
MX6ULL 源码中,默认除了 debug 串口 uart1 之外,其它的都是默认打开的 DMA 的,如果串口只是接了 TXD/RXD,而没有硬件流控 RTS/CTS,则使用 DMA 传输大量数据有可能报 DMA 错误,所以如果只接 TXD/RXD 可以只使用 PIO 模式,可参考 uart1 设置。
修改 arch\arm\boot\dts\imx6ull.dtsi 文件,以 uart7 为例去掉串口 DMA:屏蔽掉 dmas = <&sdma 43 4 0>, <&sdma 44 4 0>;
三、USB 转串口
出厂镜像默认配置了 PL2303 的驱动启动文件系统,插入 usb 转串口,如下:
在 dev 下产生 ttyUSB0 节点。
另外有些 USB 设备需要将配置文件中 CONFIG_USB_PRINTER=y,需要注意。
测试方法同 UART 串口测试章节。
四、UART 奇偶校验的方法
驱动中已经默认支持奇偶校验了,接下来就是应用添加标志位来实现奇偶校验,下面就介绍了应用中
如何添加校验位的支持。
我们可以看到应用中有包含<termios.h>头文件。这个头文件定义了终端控制结构体和 POSIX 控制函数。
最重要的就是这个结构体
struct termios
{
tcflag_t c_iflag; /* 输入选项 */
tcflag_t c_oflag; /* 输出选项 */
tcflag_t c_cflag; /* 控制选项 */
tcflag_t c_lflag; /* 行选项 */
其中 c_cflag 控制选项包含了波特率、数据位、校验位、停止位的设置。
设置奇偶效验位需要用到两个 termios 中的成员:c_cflag 和 c_iflag。首先要激活 c_cflag 中的校验位使
能标志 PARENB 和是否进行奇偶效验,同时还要激活 c_iflag 中的奇偶效验使能。
首先注释掉无校验的标志位:
newtio.c_cflag &= ~PARENB;
newtio.c_iflag = IGNPAR;
设置奇校验:
newtio.c_cflag |= PARENB;
newtio.c_iflag |= (INPCK | ISTRIP);
newtio.c_cflag |= PARODD;
设置偶校验:
newtio.c_cflag |= PARENB;
newtio.c_iflag |= (INPCK | ISTRIP);
newtio.c_cflag &= ~PARODD;
重新编译生成应用程序。
即可对收发数据进行校验。