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

Linux学习第42天:Linux RS232/485/GPS 驱动实验:天外来客

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 表示一个具体的 port,uart_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界面显示接收数据。


本文为参考正点原子开发板配套教程整理而得,仅用于学习交流使用,不得用于商业用途。

相关文章:

Linux学习第42天:Linux RS232/485/GPS 驱动实验:天外来客

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 Linux的学习笔记今天更新到了第42天。鉴于国往笔记内容整理中出现的问题&#xff0c;我尽量按照平时学习时笔记的要求进行优化。尽量不再大段大段的贴代码。而是…...

CSDN每日一题学习训练——Python版(输入起始和结束的正整数,求其两个正整数之间的偶数和、两数相加)

版本说明 当前版本号[20231115]。 版本修改说明20231115初版 目录 文章目录 版本说明目录输入起始和结束的正整数&#xff0c;求其两个正整数之间的偶数和。题目解题思路代码思路参考代码 两数相加题目解题思路代码思路参考代码 输入起始和结束的正整数&#xff0c;求其两个…...

【论文】基于Hadoop的铁路货运大数据平台设计与应用

点我完整下载&#xff1a;基于Hadoop的铁路货运大数据平台设计与应用.docx 基于Hadoop的铁路货运大数据平台设计与应用 Design and Application of Railway Freight Big Data Platform based on Hadoop 目录 目录 2 摘要 3 关键词 4 第一章 绪论 4 1.1 研究背景 4 1.2 研究目的…...

GoF之代理模式

2023.11.12 代理模式是GoF23种设计模式之一&#xff0c;其作用是&#xff1a;为其他对象提供一种代理以控制对这个对象的访问。在某些情况下&#xff0c;一个客户不想或者不能直接引用一个对象&#xff0c;此时可以通过一个称之为“代理”的第三者来实现间接引用。代理对象可以…...

post 和get参数 请求

json参数 post请求格式 RestController public class HelloController { //json参数 post 请求RequestMapping("/jsonParam")public String jsonParam(RequestBody User user){System.out.println(user);return "OK";} } postman 接口测试工具…...

RabbitMQ多线程配置和异常解决办法

&#xff08;1&#xff09;RabbitMQ多线程配置 RabbitMqConfig.java Bean("customContainerFactory") public SimpleRabbitListenerContainerFactory containerFactory(SimpleRabbitListenerContainerFactoryConfigurer configurer, ConnectionFactory conn…...

【原创】java+swing+mysql车辆维修管理系统设计与实现

摘要&#xff1a; 车辆维修管理系统是一个用于管理和追踪车辆维修过程的系统&#xff0c;它能够提高效率&#xff0c;减少错误&#xff0c;并提供详细的车辆历史记录&#xff0c;可以帮助车辆维修企业实现信息化管理&#xff0c;提高工作效率和客户满意度&#xff0c;降低运营…...

无法在 DLL“SQLite.Interop.dll”中找到名为”sIb4c632894b76cc1d“

做项目,碰到这个问题,网上的解决办法都是 更换sqlite版本去解决 在我这里不适用 我这里的项目是一个主项目 下面挂载了很多其子项目 解决办法是 把子项目 和 主项目 更换为统一的sqlite版本 , 如果统一更换后还不可以 就把主项目下生成的 (一定要确保主项目下的sqlite版本一定是…...

linux高级篇基础理论一(详细文档、Apache,网站,MySQL、MySQL备份工具)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️不能因为人生的道路坎坷,就使自己的身躯变得弯曲;不能因为生活的历程漫长,就使求索的 脚步迟缓。 ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xff1a;云计算技…...

周赛370(模拟、树形DP(正难则反)、树状数组优化DP)

文章目录 周赛370[2923. 找到冠军 I](https://leetcode.cn/problems/find-champion-i/)模拟 [2924. 找到冠军 II](https://leetcode.cn/problems/find-champion-ii/)统计入度 [2925. 在树上执行操作以后得到的最大分数](https://leetcode.cn/problems/maximum-score-after-appl…...

python实现一个简单的桌面倒计时小程序

本章内容主要是利用python制作一个简单的桌面倒计时程序&#xff0c;包含开始、重置 、设置功能。 目录 一、效果演示 二、程序代码 一、效果演示 二、程序代码 #!/usr/bin/python # -*- coding: UTF-8 -*- """ author: Roc-xb """import tkin…...

解决STM32F429烧录程序后还需复位才能植入程序的bug

1.打开魔术棒&#xff0c;打开debug 2.打开setting 3.打开Flas Download 4.开启Reset and Run 5.点进去Pack选项页面&#xff0c;去掉enable...

使用Golang调用摄像头

近年来&#xff0c;摄像头成为了我们生活中不可或缺的设备之一。从智能手机到安全监控系统&#xff0c;无处不在的摄像头给我们带来了便利和安全。在开发摄像头相关的应用程序时&#xff0c;选择一种高效和易用的编程语言是非常重要的。本文将介绍如何使用Golang调用摄像头并进…...

【Linux网络】1分钟使用shell脚本完成DNS主从解析服务器部署(适用于centos主机)

DNS正向解析主从解析服务器脚本 1、脚本内容 主服务器脚本 #!/bin/bash ##先修改本地DNS缓存服务器 read -p "请输入主服务器ip地址&#xff1a;" masterIP sed -i /DNS/d /etc/sysconfig/network-scripts/ifcfg-ens33 echo "DNS$masterIP" >> /e…...

基于SSM的校园停车场管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…...

块设备 I/O 请求送达到外部设备

对于 ext4 文件系统&#xff0c;最后调用的是 ext4_file_write_iter&#xff0c;它将 I/O 的调用分成两种情况&#xff1a; 第一是直接 I/O。最终我们调用的是 generic_file_direct_write&#xff0c;这里调用的是 mapping->a_ops->direct_IO&#xff0c;实际调用的是 e…...

【ArcGIS Pro二次开发】(76):面积平差工具

之前做过一个【三调土地利用现状分类面积汇总】的工具&#xff0c;在流程中使用了面积平差的方法。 考虑了在其它场合可能也需要进行面积平差&#xff0c;因此单独提取出来作为一个工具。 平差实现的方法如下图&#xff1a; 主要的计算过程如上图所示&#xff0c;算出总面积差…...

4、智能家居框架设计和代码文件工程建立

目录 一、智能家居项目框架 二、智能家居工厂模式示意 三、代码文件工程建立 SourceInsight创建新工程步骤 一、智能家居项目框架 二、智能家居工厂模式示意 三、代码文件工程建立 创建一个名为si的文件夹用于保存SourceInsight生成的文件信息&#xff0c;然后在SourceInsig…...

网络编程TCP/UDP

1 网络通信概述 1.1 IP 和端口 所有的数据传输&#xff0c;都有三个要素 &#xff1a;源、目的、长度。 怎么表示源或者目的呢&#xff1f;请看图 所以&#xff0c;在网络传输中需要使用“IP 和端口”来表示源或目的。 1.2 网络传输中的 2 个对象&#xff1a;server 和 clie…...

移远EC600U-CN开发板 11.15

制作一个简单UI: 1."端口设置"模块 *效果图 *代码 def backEvent(evt): #返回主界面code evt.get_code() if code lv.EVENT.CLICKED:lv.scr_load(mainInterface)def popUpEvent(evt): #弹窗提醒code evt.get_code()if code lv.EVENT.CL…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

消息队列系统设计与实践全解析

文章目录 &#x1f680; 消息队列系统设计与实践全解析&#x1f50d; 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡&#x1f4a1; 权衡决策框架 1.3 运维复杂度评估&#x1f527; 运维成本降低策略 &#x1f3d7;️ 二、典型架构设计2.1 分布式事务最终一致…...

在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7

在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤&#xff1a; 第一步&#xff1a; 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为&#xff1a; // 改为 v…...

前端调试HTTP状态码

1xx&#xff08;信息类状态码&#xff09; 这类状态码表示临时响应&#xff0c;需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分&#xff0c;客户端应继续发送剩余部分。 2xx&#xff08;成功类状态码&#xff09; 表示请求已成功被服务器接收、理解并处…...

大模型——基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程

基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程 下载安装Docker Docker官网:https://www.docker.com/ 自定义Docker安装路径 Docker默认安装在C盘,大小大概2.9G,做这行最忌讳的就是安装软件全装C盘,所以我调整了下安装路径。 新建安装目录:E:\MyS…...