李可做的网站,网站平台建设哪家公司好,网站幕布拍照什么样子的,wordpress菜单教程Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 Linux的学习笔记今天更新到了第42天。鉴于国往笔记内容整理中出现的问题#xff0c;我尽量按照平时学习时笔记的要求进行优化。尽量不再大段大段的贴代码。而是…Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 Linux的学习笔记今天更新到了第42天。鉴于国往笔记内容整理中出现的问题我尽量按照平时学习时笔记的要求进行优化。尽量不再大段大段的贴代码。而是从我自身学习的角度按照我个人的理解去整理优化教程中的内容。因为如果都是大段的贴代码贴内容而没有自己的思考总结学习的过程仅仅是机械的复制粘贴将是没有任何意义的。因为我文章的定位是学习笔记而不是教程不能面面俱到。整理重点、难点加之自己的理解消化后形成的文章才是我所需要的。 本次笔记将学习开发板通过GPS模块接收卫星信息题目中提到的天外来客就是卫星。接收以后模块通过串口232发送给开发板解码以后显示在minicom界面中。 本章的思维导图如下 串口分为TTL和RS232不管什么接口电平驱动程序都是一样的。
一、Linux下UART驱动框架
1、uart_driver注册与注销 串口驱动没有主机端和设备端区分就只有一个串口驱动。
295 struct uart_driver {
296 struct module *owner; /* 模块所属者 */
297 const char *driver_name; /* 驱动名字 */
298 const char *dev_name; /* 设备名字 */
299 int major; /* 主设备号 */
300 int minor; /* 次设备号 */
301 int nr; /* 设备数 */
302 struct console *cons; /* 控制台 */
303
304 /*
305 * these are private; the low level driver should not
306 * touch these; they should be initialised to NULL
307 */
308 struct uart_state *state;
309 struct tty_driver *tty_driver;
310 }; 每个串口驱动都需要定义一个 uart_driver加载驱动的时候通过 uart_register_driver 函数向 系统注册这个 uart_driver此函数原型如下
int uart_register_driver(struct uart_driver *drv) 同理注销驱动需要
void uart_unregister_driver(struct uart_driver *drv)
2、uart_port的添加与移除 uart_port 表示一个具体的 portuart_port 中最主要的就是第 235 行的 ops ops 包含了串口的具体驱动函数。 uart_port 是怎么和 uart_driver 结合起来的呢这里要用到 uart_add_one_port 函数
int uart_add_one_port(struct uart_driver *drv,
struct uart_port *uport) 卸载函数
int uart_remove_one_port(struct uart_driver *drv, struct uart_port *uport)
3、uart_ops实现 Linux收发数据都是通过ops函数实现的。 ops是uart_ops类型的结构体指针变量。是和寄存器打交道的。
二、I.MX6U UART驱动分析
1、UART的platform驱动框架 imx_uart_devtype为传统匹配表。 static const struct of_device_id imx_uart_dt_ids[]为设备树所使用的匹配表。 platform 驱动框架结构体 serial_imx_driver。
2、uart_driver初始化 在 imx_serial_init 函数中向 Linux 内核注册了 imx_reg imx_reg 就是 uart_driver 类型的结 构体变量。
3、uart_port初始化与添加 当 UART 设备和驱动匹配成功以后 serial_imx_probe 函数就会执行此函数的重点工作就 是初始化 uart_port然后将其添加到对应的 uart_driver 中。
4、imx_pops结构体变量 imx_pops 就是 uart_ops 类型的结构体变量保存了 I.MX6ULL 串口最底层的操作函数.都是和寄存器打交道的。
三、硬件原理图分析 1、RS232原理图 2、RS485原理图 RO 为数据输出端 RI 为数据输入端 RE 是接收使能信号(低电平有效) DE 是发送使能信号(高电平有效)。
3、GPS原理图 四、RS232驱动编写 NXP已经将驱动写好了开发者只需要添加对应的uart3节点即可。
1、UART IO节点创建 参考已有的uart1节点创建uart3节点
1 pinctrl_uart3: uart3grp {
2 fsl,pins
3 MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX 0X1b0b1
4 MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX 0X1b0b1
5 ;
6 };
2、添加uart3节点
1 uart3 {
2 pinctrl-names default;
3 pinctrl-0 pinctrl_uart3;
4 status okay;
5 };
五、移植minicom minicom类似于串口调试助手是Linux下很常用的一个串口工具。
1、移植ncurses 移植minicom前需要先移植ncurses。因为minicom会用到ncurses.
2、移植minicom 移植minicom完成后输入minicom -s命令如果打开失败的话。新建/etc/passwd 文件然后在 passwd 文件里面输入如下所示内容
1 root:x:0:0:root:/root:/bin/sh 之后一定记得重启开发板。
六、RS232驱动测试
1、RS232连接设置 JP1跳线帽 USB转串口线连接
2、minicom设置 回显功能配置项为“ local Echo on/off..E”按键E打开或关闭回显功能。
3、RS232收发测试
1、发送测试 minicom输入需要传输信息内容在电脑端的SecureCRT会收到该信息内容。前提是需要打开minicom的回显功能。
2、接收测试 同样通过Secure CRT发送信息内容在minicom界面能收到该信息内容。同样需要提前打开Secure CRT的回显功能。
七、RS485测试
1、RS485连接设置 一个设备是不能测试通信功能的需要另外一个设备才行。 三合一串口转换器
2、RS485收发测试 485的测试和232一样。
1、RS485发送测试
2、RS485接收测试
八、GPS测试
1、GPS连接设置 minicom设置如下 ①、波特率设置为 38400因为正点原子的 ATK1218-BD 模块默认波特率就是 38400。 ②、 8 位数据位 1 位停止位。 ③、关闭硬件和软件流控。
2、GPS数据接收测试 minicom界面显示接收数据。 本文为参考正点原子开发板配套教程整理而得仅用于学习交流使用不得用于商业用途。