串口设备驱动

news2024/9/29 10:05:40

文章目录

  • 一、串口简介
  • 二、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.coloradmin.cn/o/807987.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【PCIE】completion timeout disable功能总结

在PCI Express(PCIe)总线上进行I/O数据交换时,会使用Transaction layer packets(TLP)来将数据从一个端点传输到另一个端点。当发生一些错误或异常情况时,可能会导致一个TLP包没有被正常处理,从而…

BOB_1.0.1靶机详解

BOB_1.0.1靶机详解 靶机下载地址:https://download.vulnhub.com/bob/Bob_v1.0.1.ova 这个靶机是一个相对简单的靶机,很快就打完了。 找到ip地址后对IP进行一个单独的扫描,发现ssh端口被改到25468了,等会儿登陆时候需要用到。 目…

砖墙(力扣)Map + 思维 JAVA

你的面前有一堵矩形的、由 n 行砖块组成的砖墙。这些砖块高度相同(也就是一个单位高)但是宽度不同。每一行砖块的宽度之和相等。 你现在要画一条 自顶向下 的、穿过 最少 砖块的垂线。如果你画的线只是从砖块的边缘经过,就不算穿过这块砖。你…

无涯教程-jQuery - Puff方法函数

吹气效果可以与show/hide/toggle一起使用。通过按比例放大元素并同时隐藏它,可以形成粉扑效果。 Puff - 语法 selector.hide|show|toggle( "puff", {arguments}, speed ); 这是所有参数的描述- model - 效果的模式。可以是"显…

3D Tiles官方示例资源下载链接

本文列出Cesium官方提供的 3D Tiles 1.0和1.1规范的9个示例切块集(tileset)。 有关如何使用本地服务器托管这些示例的详细信息,请参阅 INSTRUCTIONS.md。 推荐:用 NSDT设计器 快速搭建可编程3D场景。 1、Metadata Granularities …

使用 Docker 快速上手 Stability AI 的 SDXL 1.0 正式版

本篇文章,我们聊聊如何使用 Docker 来本地部署使用 Stability AI 刚刚推出的 SDXL 1.0,新一代的开源图片生成模型,以及在当前如何高效的使用显卡进行推理。 写在前面 好久没有写 Stable Diffusion 相关的内容了,趁着 SDXL 刚刚推…

k8s一站式使用笔记

前言 个人感觉比较磨心态,要坐住,因为细节太多,建议:一遍看个大概,二遍回来细品,不要当成任务,把握零碎时间 一、k8s安装 1、配置准备 硬件要求 内存:2GB或更多RAMCPU: 2核CPU或更…

Linux 之 systemctl

systemctl 可以控制软件(一般指服务)的启动、关闭、开机自启动 能被systemctl 管理的软件,一般也称 服务 系统内置服务均可被 systemctl 控制第三方软件,如果 自动注册了 可被systemctl 控制第三方软件,如果没有自动…

OS-08-事件驱动:C10M是如何实现的?

08-事件驱动:C10M是如何实现的? 你好,我是陶辉。 上一讲介绍了广播与组播这种一对多通讯方式,从这一讲开始,我们回到主流的一对一通讯方式。 早些年我们谈到高并发,总是会提到C10K,这是指服务…

golang反射获取结构体的值和修改值

功能:根据id和反射技术封装 创建和更新人的查询 一、代码二、演示 一、代码 package coryCommonimport ("context""errors""github.com/gogf/gf/v2/container/gvar""github.com/tiger1103/gfast/v3/internal/app/system/dao&qu…

Simulink仿真模块 - Data Type Conversion

Data Type Conversion将输入信号转换为指定的数据类型 在仿真库中的位置为:Simulink / 常用模块 Simulink / Signal Attributes 模型为: 说明 Data Type Conversion 模块可将任何 Simulink 数据类型的输入信号转换为您指定的数据类型。 注意 要通过指定模块参数来控…

防御第五次作业

一、结合以下问题对当天内容进行总结 1. 什么是恶意软件? 可以指代病毒、蠕虫、特洛伊木马、勒索软件、间谍软件、广告软件和其他类型的有害软件。恶意软件的主要区别在于它必须是故意为恶;任何无意间造成损害的软件均不视为恶意软件。恶意软件的总体目…

每天一个电商API分享:获取买家订单列表 API buyer_order_list

API name:buyer_order_list 功能介绍:此接口用于获取买家购买的商品订单列表,返回订单ID等数据。需要买家进行cookie授权。 请求参数: 请求参数:page1&tab_codeall 参数说明:page:页码 tab_code:all,…

教雅川学缠论03-分型

原著作者将K线走势分成四中类型,这四中类型,就叫做分型,注意,分型是K线的组合(至少3个K线),如下 下面我们以2023年7月武汉控股日K示例 四个分型用图来表示的话,还是很简单的&…

FPGA学习——查找表(LUT)

查找表又名LUT,英文全称 Look Up Table。查找表有多个输入端口,但只有一个输出端口。 查找表功能上类似于存储体,可以把输入看作地址线,地址对应的“表项”看作输出。 按照输入端口个数的不同,查找表又可具体细分为L…

【RTT驱动框架分析02】-串口驱动分析

串口驱动学习 0.串口驱动的使用方法 //定义一个时间 struct rt_event system_event; #define SYS_EVENT_UART_RX_FINISH 0x00000001 /* UART receive data finish event *//*串口接收回调函数 Receive data callback function */ static rt_err_t uart_input(rt_device_t …

centos7安装tomcat

安装tomcat 必须依赖 JDK 环境,一定要提前装好JDK保证可以使用 一、下载安装包 到官网下载 上传到linux 服务器 二、安装tomcat 创建tomcat 文件夹 mkdir -p /usr/local/tomcat设置文件夹权限 chmod 757 tomcat将安装包上传至 新建文件夹 解压安装包 tar zx…

乐划锁屏充分发挥强创新能力,打造内容业新生态

乐划锁屏作为新型内容媒体,在这一市场有着众多独特的优势,不仅能够通过多场景的联动给内容创作者带来了更多可能性,还促进了更多优质作品的诞生,为用户带来更加丰富多彩的锁屏使用体验。 作为OPPO系统原生的OS应用,乐划锁屏一直致力于打造为用户提供至美内容的内容平台,吸引了全…

Echarts入门实例

Echarts是一个基于JavaScript的开源可视化库,用于构建交互式和可定制的图表和图形。它由百度开发并维护,提供了丰富多样的图表类型和强大的功能,使开发者能够简单快速地创建各种各样的数据可视化。 Echarts支持常见的图表类型,如折…

730. 机器人跳跃问题

输入样例1: 5 3 4 3 2 4输出样例1: 4输入样例2: 3 4 4 4输出样例2: 4输入样例3: 3 1 6 4输出样例3: 3代码 //首先我们要分情况讨论 //1.后面的大:EE-(h-E)2E-h //2.后面的小:…