Linux串口驱动

news2024/11/27 20:37:34

《I.MX6ULL 参考手册》第 3561 页的“Chapter 55 Universal Asynchronous

Receiver/Transmitter(UART)

I.MX6ULL串口原理

1.1UART与USART

UART是异步通信,USART是异步/同步通信,比UART多了一条时钟线

USART 的全称是 Universal Synchronous/Asynchronous Receiver/Transmitter

通信格式如下:

1.2电平标准

常见电平标准有TTL(逻辑电平0和1)、RS-232(差分信号,-3~-15 表示逻辑1,+3~+15表示逻辑1)

I.MX6ULL串口

一共有8个串口

硬件原理

三种操作模式

2.1时钟源

由时钟配置寄存器 CCM_CSCDR1 ( CCM Serial Clock Divider Register)的UART_CLK_SEL(bit)位选择,当为 0 的时候 UART 的时钟源为 pll3_80m(80MHz),如果为 1 的时候 UART 的时钟源为 osc_clk(24M),一般选择 pll3_80m 作为 UART 的时钟源。寄存器 CCM_CSCDR1 的 UART_CLK_PODF(bit5:0)位是 UART 的时钟分频值,可设置 0~63,分别对应 1~64 分频,一般设置为 1 分频,因此最终进入 UART 的时钟80MHz。

2.2UART重要寄存器

使能

UART 的UART Control Register 1 ,即UARTx_UCR1(x=1~8)

需要关注的地方:

1.自动波特率检测使能位:

2.使能位

UARTx_UCR2寄存器(奇偶校验、停止位等设置)

UARTx_UCR3 寄存器

本章实验就用到了寄存器 UARTx_UCR3 中的位 RXDMUXSEL(bit2),这个位应该始终为 1,

寄存器 UARTx_USR2(发送和接收完成标志位设置)

寄存器 UARTx_USR2 用到的重要位如下:

TXDC(bit3)发送完成标志位,为 1 的时候表明发送缓冲(TxFIFO)和移位寄存器为空,也

就是发送完成,向 TxFIFO 写入数据此位就会自动清零。

RDR(bit0)数据接收标志位,为 1 的时候表明至少接收到一个数据,从寄存器

UARTx_URXD 读取数据接收到的数据以后此位会自动清零

分频设置

接 下 来 看 一 下 寄 存 器

UARTx_UFCR 、 UARTx_UBIR 和 UARTx_UBMR , 寄 存 器

UARTx_UFCR 中我们要用到的是位 RFDIV(bit9:7),用来设置参考时钟分频

发送数据和接收数据

最后来看一下寄存器 UARTx_URXDUARTx_UTXD,这两个寄存器分别为 UART 的

发送数据寄存器。

3.串口实验

3.1裸机步骤如下

  • 设置 UART1 的时钟源
  • 初始化 UART1
  • 使能 UART1
  • 编写 UART1 数据收发函数

  1. 板子硬件原理

3.2Linux下的串口实验

使用串口3,硬件接口如下:

RS232电平转换

RS485电平转换

RS232驱动编写

UART驱动NXP已经写好了,我们需要做的是向设备树中添加UART3对应的节点

所以

3.2.1修改设备树,添加UART3节点IO

通过寄存器IOMUXC_SW_PAD_CTL_PAD_UART3_TX_DATAIOMUXC_SW_PAD_CTL_PAD_UART3_RX_DATA 设置UART3的Rx、Tx引脚的电气属性为0x1b0b1

for example:

注意引脚不能被其它设备节点使用

pinctrl_uart3: uart3grp {
fsl,pins = <
    //这里前面的宏定义是设置IO复用,后面的数字是设置电气属性,也就是config_reg寄存器的值
    MX6UL_PAD_UART3_TX_DATA__UART3_DCE_TX 0X1b0b1 
    MX6UL_PAD_UART3_RX_DATA__UART3_DCE_RX 0X1b0b1
>;
};

pinctrl子系统 IO配置复习

其中,宏定义定义在/arch/arm/boot/dts/imx6ul-pinfunc.h文件中

#define MX6UL_PAD_UART3_CTS_B__UART3_DCE_CTS 0x00AC 0x0338 0x0000 0x0 0x0

#define MX6UL_PAD_UART3_CTS_B__UART3_DTE_RTS 0x00AC 0x0338 0x0630 0x0 0x0

宏定义部分表示将UART3_CTS_B 这个IO复用为UART3_DCE_CTS ,后面五个值的含义如下:

<mux_reg conf_reg input_reg mux_mode input_val>

  • mux_reg:复用寄存器偏移地址
  • conf_reg:寄存器偏移地址
  • input_reg:寄存器偏移地址
  • mux_mode : mux_reg寄存器的值
  • input_val :input_val值
  1. 添加uart3节点

此处删除uart3,因为它占用了uart3的IO

完成以后重新编译设备树并使用新的设备树启动 Linux,如果设备树修改成功的话,系统

启动以后就会生成一个名为“/dev/ttymxc2”的设备文件,ttymxc2 就是 UART3 对应的设备文

件,应用程序可以通过访问 ttymxc2 来实现对 UART3 的操作。

 &uart3 {
 pinctrl-names = "default";
 pinctrl-0 = <&pinctrl_uart3>;
 status = "okay";
 };
3.2.2向开发板中移植minicom串口开发工具
  • 2.1移植依赖库ncurses

在Ubuntu中 在自己路径下eg:/home/dongdong/linux/IMX6ULL 目录下创建了一个名为“tool”的目录来存放所有的移植文件,解压文件

tar -vxzf ncurses-6.0.tar.gz

解压完成以后就会生成一个名为“ncurses-6.0”的文件夹,此文件夹就是 ncurese 的源码文件夹

在 tool 目录下新建名为“ncurses”目录,用于保存 ncurses 编译结果,一切准备就绪以后

就可以编译 ncureses 库了。进入到 ncureses 源码目录下,也就是刚刚解压出来的 ncurses-6.0 目

录中,首先是配置 ncureses,输入如下命令:

./configure  --prefix=/home/dongdong/linux/ncurses_code/ncurses   --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf --with-shared --without-profile --disable-stripping --without-progs --with-manpages --without-tests

解释:configure 就是配置脚本,--prefix 用于指定编译结果的保存目录,这里肯定将编译结果保存

到我们前面创建的“ncurses”目录中。--host 用于指定编译器前缀,这里设置为 “arm-linux-

gnueabihf”,--target 用于指定目标,这里也设置为“arm-linux-gnueabihf”。

编译make 再安装 make install(安装的意思就是将编译出来的结果拷贝到--pfefix 指定的目录里面去).此处要加权限

安装成功以后查看一下前面创建的“ncurses”文件夹,我们需要将其中 include、lib 和 share 这三个目录中存放的文件分别拷贝到开发板根文件系统中的/usr/include、/usr/lib 和/usr/share 这三个目录中,如果哪个目录不存在的话请自行创建!!拷贝命令如下:

sudo cp lib/* /home/dongdong/linux/nfs/rootfs/usr/lib/ -rfa
sudo cp share/* /home/dongdong/linux/nfs/rootfs/usr/share/ -rfa
sudo cp include/* /home/dongdong/linux/nfs/rootfs/usr/include/ -rfa

然后在开发板根目录的/etc/profile(没有的话自己创建一个)文件中添加如下所示内容:

#!/bin/sh
LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
export TERM=vt100
export TERMINFO=/usr/share/terminfo
  • 继续移植 minicom

1.将 minicom-2.7.1.tar.gz 拷贝到 ubuntu 中的/home/zuozhongkai/linux/IMX6ULL/tool 目录下

2.在 tool 目录下新建一个名为“minicom”的子目录,用于存放 minicom编译结果

3.解压 minicom tar -vxzf minicom-2.7.1.tar.gz

4.解压完成以后会生成一个叫做 minicom-2.7.1 的文件夹,这个就是 minicom 的源码,进入到

此目录中,然后配置 minicom

./configure CC=arm-linux-gnueabihf-gcc --prefix=/home/dongdong/linux/ncurses_code/minicom --host=arm-linux-gnueabihf CPPFLAGS=-I/home/dongdong/linux/ncurses_code/ncurses/include LDFLAGS=-L/home/dongdong/linux/linux/ncurses_code/ncurses/lib -enable-cfg-dir=/etc/minicom

5.配置成功以后执行如下命令编译并安装

make
make install

缺少依赖,待解决!!!

6.将 minicom 目录中 bin 子目录下的所有文件拷贝到开发板根目录中的/usr/bin 目录下

sudo cp bin/* /home/zuozhongkai/linux/nfs/rootfs/usr/bin/

完成以后在开发板中输入“minicom -v”来查看 minicom 工作是否正常,输入如下命令打开 minicom 配置界面:minicom -s

如果结果是打不开,新建/etc/passwd 文件,然后在 passwd 文件里面输入如下所示内容:

root:x:0:0:root:/root:/bin/sh

完成以后重启开发板!

minicom工具使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/952408.html

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

相关文章

【Dots之003】SystemAPI.Query相关基础笔记

1、SystemAPI.Query 注&#xff1a;SystemAPI.Query只能作为foreach中in的的子句 SystemAPI.Query<RefRO<LocalTransform>>().WithAll<Obstacle>()解析&#xff1a;对于每个具有LocalTransform和Obstacle的Entity&#xff1b;都会将LocalTransform的只读引…

VBA:对Excel单元格进行合并操作

Sub hb()Dim nn 3For i 3 To 18If Range("b" & i) <> Range("b" & i 1) ThenRange("b" & n & ":b" & i).Mergen i 1End IfNextEnd Sub

基于Java+SpringBoot+Mybaties-plus+Vue+ElementUI 高校汉服租赁网站的 设计与实现

一.项目介绍 高校汉服租赁网站分为普通用户以及管理员两类 普通用户&#xff1a; 注册、登录系统、查看汉服首页发帖公告信息、 交流论坛&#xff08;发帖、查看帖子、评论&#xff09;、 公告咨询&#xff08;查看公告以及评论&#xff09;、 汉服信息&#xff08;查…

UNIX网络编程卷一 学习笔记 第二十九章 数据链路访问

目前大多操作系统都为程序提供访问数据链路层的功能&#xff0c;此功能可提供以下能力&#xff1a; 1.能监视由数据链路层接收的分组&#xff0c;使得tcpdump之类的程序能运行&#xff0c;而无需专门的硬件设备来监视分组。如果结合使用网络接口进入混杂模式&#xff08;promis…

Mac 安装php多版本,brew安装php8.0

因为需要我要在mac上装两个php版本&#xff0c;先前我已经装过php7.4,下面我们逐步安装php8.0 开始安装8.0&#xff1a; 直接运行安装 brew install php8.0 遇到问题怀疑是仓库太老了&#xff0c;更新一下homebrew ,重新安装 brew update 安装成功了,不过看了下版本好像不能正…

海关发布限制日本水产品进口,占据我国进口多少?

在福岛发生核电站事故后&#xff0c;我国就已经暂停进口包括福岛、宫城和长野等在内的10个县的所有食品&#xff0c;以及10个县以外的蔬菜等。而在日本宣布排放核污水并且已经实施之后&#xff0c;海关在24日发布全面暂停进口原产地为日本的水产品&#xff08;含食用水生动物&a…

安装启动Stable Diffusion教程

一、下载源码 GitHub - AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UI 二、安装miniconda 参考&#xff1a;安装启动yolo5教程_苍穹之跃的博客-CSDN博客 三、安装CUDA 参考&#xff1a;安装启动yolo5教程_苍穹之跃的博客-CSDN博客 四、创建虚拟环境 co…

前端三剑客中简单的两个:HTMLCSS

HTML&CSS 1&#xff0c;HTML1.1 介绍1.2 快速入门1.3 基础标签1.3.1 标题标签1.3.2 hr标签1.3.3 字体标签 1.4 图片、音频、视频标签1.5 超链接标签1.6 列表标签1.7 表格标签1.8 布局标签1.9 表单标签1.9.1 表单标签概述1.9.2 form标签属性1.9.3 代码演示 1.10 表单项标签 …

XmlDocument.SelectNodes 不起作用

今天采用Xpath读取Xml节点&#xff0c;怎么都读不出。 问题分析&#xff1a; 错误代码如下&#xff1a; XmlDocument xmlD new XmlDocument();xmlD.PreserveWhitespace true;xmlD.LoadXml(xStr);xmlD.SelectNodes("job-scheduling-data/schedule/job");经排查 do…

SSD的基础知识介绍

固态硬盘&#xff0c;英文名Solid State Disk或Solid State Drive&#xff0c;是一种以存储器作为永久性存储器的电脑存储设备。虽然SSD已不是使用“碟盘”来记存数据&#xff0c;也没有用于“驱动”的马达&#xff0c;但是人们依照命名习惯&#xff0c;仍然称为固态硬盘或固态…

前端list列表自定义图标并设置大小

前端list列表自定义图标并设置大小 一、前端list列表基础知识回顾 前端公有两种列表&#xff0c;一种是有序列表&#xff08;ol&#xff09;&#xff0c;一种是无序列表&#xff08;ul&#xff09;&#xff0c;它们的子元素都是&#xff08;li&#xff09;。 1.1 有序列表&a…

pdf转换成图片转换器在线怎么转?pdf转换成图片具体方法介绍

很多用户们都是比较喜欢使用pdf文档的&#xff0c;由于这种文件格式的便携性非常高&#xff0c;所以广泛的应用于工作和学习领域&#xff0c;再加上pdf文档可以随意转换成为其他的文件格式&#xff0c;更是让pdf文档受到了更多用户们的欢迎&#xff0c;那么pdf转换成图片转换器…

31 - 个人博客项目-02-定义模型

前提: settings.py已经连接数据库 两张表想要互相调用 必须定义主外键约束,外键定义在多的一方 (1). 新建 apps / user / models.py 创建用户相关模型类 from datetime import datetime from ext import dbclass User(db.Model):# 用户表id db.Column(db.Integer, primary…

hadoop学习:mapreduce入门案例四:partitioner 和 combiner

先简单介绍一下partitioner 和 combiner Partitioner类 用于在Map端对key进行分区 默认使用的是HashPartitioner 获取key的哈希值使用key的哈希值对Reduce任务数求模决定每条记录应该送到哪个Reducer处理自定义Partitioner 继承抽象类Partitioner&#xff0c;重写getPartiti…

Web网站服务器

目录 一、什么是Apache? 二、虚拟目录是什么&#xff1f; 三、Apcahe相关配置文件 四、httpd.conf主配置文件的常用配置参数 五、Web网站配置案例 5.1搭建基于用户的个人主页网站 5.2、配置虚拟目录 5.3、配置虚拟主机 5.3.1搭建两个基于IP地址的虚拟主机 5.3.2搭建两个基于域…

发布自己的npm包

1.初始化npm包 npm init 输入npm init后&#xff0c;一路默认即可初始化成功&#xff0c;如下&#xff1a; 初始化成功后会生成一个package.json文件 n&#xff08;以我的文件夹demo-npm-dir为例&#xff09; package.json配置如下&#xff1a; {"name": "n…

基于Java+SpringBoot+Vue前后端分离客户关系管理系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

2023年全国职业院校技能大赛网络系统管理赛项模块A:网络构建卷II

2023年全国职业院校技能大赛 GZ073网络系统管理赛项 模块A&#xff1a;网络构建 卷II 目 录 任务清单 &#xff08;一&#xff09;基础配置 &#xff08;二&#xff09;有线网络配置 &#xff08;三&#xff09;无线网络配置 &#xff08;四&#xff09;出口网络配置 &am…

商城二维码系统_二维码生成系统源码与设计_OctShop

OctShop开源商城系统自带了二维码生成系统&#xff0c;商城所有系统要使用二维码的地方都是统一由此二维码生成系统生成的。其中包括&#xff1a;店铺收款二维码&#xff08;H5/小程序&#xff09;、店铺二维码&#xff08;H5/小程序&#xff09;、订单核销二维码、优惠券线下核…

【高性能计算】opencl语法及相关概念(二):索引,队列,核函数

目录 数据并行及任务并行异构编程语言的共性opencl的划分方式opencl上下文定义以字符串为主的程序对象同一设备&#xff0c;多个命令队列同时执行多个核函数的示例 数据并行及任务并行 数据并行是将大规模的计算任务划分为多个子任务&#xff0c;并将这些子任务同时应用于不同…