当前位置: 首页 > news >正文

串口设备驱动

文章目录

  • 一、串口简介
  • 二、Linux下串口驱动框架
    • uart_driver 结构体
    • uart_port 的添加与移除
  • 三、Linux下串口驱动工作流程
  • 四、Linux下串口应用开发
    • 终端工作模式
    • 多线程例程

一、串口简介

串口全称叫做串行接口,通常也叫做 COM 接口,串行接口指的是数据一个一个的顺序传输,通信线路简单。使用两条线即可实现双向通信,一条用于发送,一条用于接收。串口通信距离远,但是速度相对会低,串口是一种很常用的工业接口。

I.MX6U 自带的 UART 外设就是串口的一种,UART 全称是 Universal Asynchronous Receiver/Trasmitter,也就是异步串行收发器。UART 作为串口的一种,其工作原理也是将数据一位一位的进行传输,发送和接收各用一条线,因此通过 UART 接口与外界相连最少只需要三条线:TXD(发送)、RXD(接收)和 GND(地线)
在这里插入图片描述

  • 空闲位:数据线在空闲状态的时候为逻辑“1”状态,也就是高电平,表示没有数据线空闲,没有数据传输。
  • 起始位:当要传输数据的时候先传输一个逻辑“0”,也就是将数据线拉低,表示开始数据传输。
  • 数据位:数据位就是实际要传输的数据,数据位数可选择 5~8 位,我们一般都是按照字节传输数据的,一个字节 8 位,因此数据位通常是 8 位的。低位在前,先传输,高位最后传输。
  • 奇偶校验位:这是对数据中“1”的位数进行奇偶校验用的,可以不使用奇偶校验功能。
  • 停止位:数据传输完成标志位,停止位的位数可以选择 1 位、1.5 位或 2 位高电平,一般都选择 1 位停止位。
  • 波特率:波特率就是 UART 数据传输的速率,也就是每秒传输的数据位数,一般选择 9600、19200、115200 等。

二、Linux下串口驱动框架

Linux 提供了串口驱动框架,我们只需要按照相应的串口框架编写驱动程序即可。串口驱动没有什么主机端和设备端之分,就只有一个串口驱动,而且这个驱动也已经由 NXP 官方已经编写好了,我们真正要做的就是在设备树中添加所要使用的串口节点信息。当系统启动以后串口驱动和设备匹配成功,相应的串口就会被驱动起来,生成/dev/ttymxcX(X=0….n)文件。

uart_driver 结构体

uart_driver 结构体表示 UART 驱动,uart_driver 定义在 include/linux/serial_core.h 文件中

struct uart_driver 
{struct module *owner; /* 模块所属者 */const char *driver_name; /* 驱动名字 */const char *dev_name; /* 设备名字 */int major; /* 主设备号 */int minor; /* 次设备号 */int nr; /* 设备数 */struct console *cons; /* 控制台 *//** these are private; the low level driver should not* touch these; they should be initialised to NULL*/struct uart_state *state;struct tty_driver *tty_driver;
};
  1. 加载驱动的时候通过 uart_register_driver 函数向系统注册这个 uart_driver,此函数原型如下:

     int uart_register_driver(struct uart_driver *drv)
    

函数参数和返回值含义如下:

  • drv :要注册的 uart_driver。
  • 返回值:0,成功;负值,失败。
  1. 注销驱动的时候也需要注销掉前面注册的 uart_driver

http://www.lryc.cn/news/100539.html

相关文章:

  • Nginx实现反向代理和负载均衡
  • 小米手机MIUI优化的影响
  • 【图论】kruskal算法
  • Django框架:使用channels实现websocket,配置和项目实际使用
  • 基于RK3588+FPGA+AI算法定制的智慧交通与智能安防解决方案
  • AI面试官:LINQ和Lambda表达式(一)
  • FPGA学习——FPGA利用状态机实现电子锁模拟
  • Bert经典变体学习
  • uniapp checkbox radio 样式修改
  • 电脑重启后VScode快捷方式失效,找不到Code.exe
  • C语言实现扫雷游戏
  • 蓝图节点编辑器
  • MySql 知识大汇总
  • 深入浅出Pytorch函数——torch.sum
  • Git克隆文件不显示绿色勾、红色感叹号等图标
  • SOC FPGA之HPS模型设计(一)
  • 解决openstack重启swift服务后报错
  • [Linux]进程控制详解!!(创建、终止、等待、替换)
  • 全面适配 | 走近openGauss数据库+鲲鹏欧拉操作系统
  • 2023Robocom CAIP省赛 第四题 相对论大师
  • 【TypeScript】TS入门级基础学习(一)
  • jenkins执行jmeter时,报Begin size 1 is not equal to fixed size 5
  • 在 “小小容器” WasmEdge 里运行小小羊驼 llama 2
  • 【C#】async和await 续
  • 【Matlab】基于粒子群优化算法优化BP神经网络的数据回归预测(Excel可直接替换数据)
  • QPainter绘制雷达界面
  • flutter:BottomNavigationBar和TabBar
  • 【图论】Prim算法
  • 第九十二回 在Flutter中解析JSON数据
  • 银河麒麟安装mysql数据库(mariadb)-银河麒麟安装JDK-银河麒麟安装nginx(附安装包)