嵌入式Linux下串口调试

2023-05-16

By Toradex秦海

1). 简介

UART串口是嵌入式设备最为常用的调试和通讯接口之一,无论是RS232还是RS422/485都有着非常广泛的应用,因此本文就基于嵌入式Linux演示在User Space进行串口调试。

 

本文所演示的平台来自于Toradex Colibri iMX6DL ARM嵌入式平台,这是一个基于NXP iMX6DL ARM处理器,支持双核Cortex-A9。

 

2. 准备

a).Colibri iMX6DL ARM核心版配合Colibri Eva Board载板,连接调试串口UART1到开发主机方便调试,同时配置好Ubuntu开发主机开发环境,具体操作方法可以参考这里。

b).Colibri iMX6DL系统使用Toradex Linux Release V2.6.1,下载和更新方法请参考这里。

 

3). RS232串口通讯测试

a). Colibri iMX6S核心版默认定义提供了三个串口,如下所示,其中UART1为默认的调试串口,当然可以通过uboot设置关闭调试串口或者指定另外一个串口作为调试串口。


 

b). Colibri Eva Board X25 Top DB9连接器默认为UART2接口,连接到Ubuntu开发主机进行UART2串口测试。另外,通过载板跳线测试也可以将UART3串口路由到X25 bottom DB9连接器上面,具体说明可以参考这里。

 

c). User Space下直接操作UART2串口设备进行测试

---------------------------------

//设置串口bandrate

root@colibri-imx6# stty -F /dev/ttymxc1 115200

//发送数据

root@colibri-imx6# echo Test > /dev/ttymxc1

//接收数据

root@colibri-imx6# cat /dev/ttymxc1

--------------------------------

 

d). User Space下通过C程序测试UART2串口

./ uart相关基本操作头文件和子程序

//打开和关闭uart设备

uart_open

uart_close

//配置uart baudrate以及其他参数并生效

uart_config

//利用write函数发送数据

uart_send

//利用select函数侦测事件发生,然后用read函数读取数据

uart_read

 

具体代码请见这里:

uartconfig.h - https://github.com/simonqin09/uarttest/blob/master/uartconfig.h

uartconfig.c - https://github.com/simonqin09/uarttest/blob/master/uartconfig.c

 

./ main主程序,打开并配置串口baud rate 115200,发送数据然后接收数据来测试串口。

具体代码如下:

https://github.com/simonqin09/uarttest/blob/master/uarttest.c

 

./执行情况,可见收发都正常

--------------------------------

//Colibri iMX6调试串口输出

root@colibri-imx6:~# ./uarttest /dev/ttymxc1                                   

send successflly                                                                

send sucessfully                                                               

test!

//PC主机RS-232接口测试端口输出,收到message后,键盘键入”test!”后回车。

Welcome to minicom 2.7

……

 

this is a test program

--------------------------------

 

4). RS485串口通讯测试

a). Colibri iMX6 UART除了RS232模式,也支持RS422/485模式,这里还是利用UART2来测试RS485半双工模式通讯,基于Colibri Eva Board的硬件连接如下:

./ 将Colibri Eva Board连接器X2 bottom DB9 管脚4(RXD+),管脚5(RXD-)以及管脚1(GND)和PC主机485接口设备对接

./ 将Colibri Eva Board下面几个跳线做如下设置:

   JP11 短接 – 让485接口可以发送以及接收收据,如果断开,则只能发送数据

   JP12,JP14断开 – 用于插入120ohm终端电阻,针对RS-422模式

   JP13,JP15短接 – 设置为半双工模式,如果断开,则为全双工模式

   JP16短接 – UART2到RS232的功能关闭,切换到RS485功能;断开则反之。

 

b). 然后需要使能UART2 RS485功能,有两种方式,一种是在device tree中使能,另外一种是利用ioctrl TIOCSRS485在User Space中使能。

./ 在device tree中使能

//参考这里下载Toradex Linux kernel V2.6版本源代码,根据如下patch文件修改arch/arm/boot/dts/imx6dl-colibri-eval-v3.dts文件,并参考这里编译新的dtb文件后部署到Colibri iMX6模块上。

https://github.com/simonqin09/uarttest/blob/master/485.patch

然后可以和上面第三章节完全一样的两种方式操作UART2设备进行测试通信,无需任何改动。

 

./ 利用ioctrl TIOCSRS485 在C程序中使能并通信

//在上面uartconfig.h和uartconfig.c文件中添加485使能函数,同时可以配置RTS在发送中和发送后的电平以及时间延迟设置。

uart_485

//在uarttest.c中添加下面485使能,其他和上面RS232都一致。

--------------------------------

if(uart_485(fd) < 0)

{

         printf("failed enable RS485 mode\n");

         return -1;

}

else

         printf("RS485 mode enabled\n");

--------------------------------

完整代码同样可以参考上面第3章节里面的这三个文件链接

 

//程序部署后执行情况,可见收发都正常

--------------------------------

//Colibri iMX6调试串口输出

root@colibri-imx6:~# ./uarttest /dev/ttymxc1                                   

RS485 mode enabled                                                             

send successflly                                                               

send sucessfully                                                                

test!

//PC主机RS485接口测试端口输出,收到message后,键盘键入”test!”后回车。

Welcome to minicom 2.7

……

 

this is a test program

--------------------------------

 

5). 总结

本文基于NXP iMX6嵌入式平台在嵌入式linux系统下测试了UART相关通信,希望给大家有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式Linux下串口调试 的相关文章

  • win11旗舰版安装WSL子系统和环境-17Xshell连接wsl子系统的ssh

    https blog csdn net w4187402 article details 85992013 那么问题找到了 出现这样的问题只能是ip冲突 xff0c 其他同事的服务器占用了我当前服务器的ip地址 xff0c 我现在连接的服务
  • 超好用的word插件-工作和科研

    Word精灵7 0版 可以很好地处理图片 xff0c 转换 xff0c 以及各种批量处理操作 GrammarlyAddInSetup 可以很好地校对英文错误 xff0c 单词以及语法错误 xff0c 但被动语态不太行 链接 xff1a ht
  • Adobe Premiere Pro 2023 SP(未完成)

    需要添加
  • 一个程序员所应该具备的精神

    所谓障碍都是主观上的 如果你想研发什么新的技术 xff0c 只需要在冰箱里放满食物和饮料 xff0c 再有一台便宜的计算机 xff0c 和以之献身的决心 xff0c 你即可拥有任何你想拥有的编程深度 xff01 John Carmack
  • ROS中的多线程

    ROS中的多线程 ROS多线程消息回调处理函数多线程MultiThreadedSpinnerAsyncSpinner callback传参timertimer加参数 C 43 43 中的多线程Python中的多线程 ROS使用master管
  • Linux系统下磁盘分区

    计算机的磁盘分区信息是计算机引导操作系统必须的信息 xff0c 根据引导方式的不同 xff0c 一般分别保存在MBR或者GPT中 其中 xff0c BIOS引导会读取MBR xff08 Main Boot Record xff09 中的磁盘
  • ROS中的tf发布读取转换

    ROS tf 基础使用查看tf信息1 创建link关系图2 在rqt中查看link关系图3 终端中输出tf变换关系4 rviz中查看 程序中使用TransformerTransformBroadcasterTransformListener
  • linux下shell脚本启动其他可执行程序

    linux下shell脚本启动其他可执行程序 零 前言一 C 43 43 代码二 shell脚本三 shell运行效果 零 前言 linux下的项目中经常需要使用shell脚本去启动其他程序的操作 xff0c 下面是自己编写的测试程序 xf
  • 嵌入式面试常见问题

    1 什么是嵌入式 以应用为中心 xff0c 以计算机技术为基础 xff0c 软硬件可裁剪 xff0c 适用于应用系统对功能 可靠性 成本 体积 功耗有严格要求的专用计算机系统 2 字符设备和块设备的区别 xff1f Linux里设备类型分
  • 步进电机和伺服电机的区别你知道吗?

    在许多领域都需要各种电机 xff0c 包括知名的步进电机和伺服电机 但是 xff0c 对于许多用户而言 xff0c 他们不了解这两种电机的主要区别 xff0c 因此他们始终不知道如何选择 那么 xff0c 步进电机和伺服电机之间的主要区别是
  • 独轮车成功站立

    真是废了不少力 卡了这么久首要原因就是过于青睐串级PID 串级PID可以自主寻找机械中位的特性实在是太优雅了 但动量轮这种对即使性要求极高的系统似乎不能用串级PID实现 昨天沉下心把串级PID推掉换成并联 xff0c 波形一下就朝着正常的方
  • 字节序:大端字节序(Big Endian) & 小端字节序(Little Endian)

    一 什么是字节序 xff1f 多字节数据存储在存储器中的顺序就叫做字节序 字节序又分为俩种 xff0c 一种叫做小端字节序 xff1b 另外一种叫做大端字节序 二 大端字节序 xff08 Big Endian xff09 amp 小端字节序
  • Google doc

    https docs google com spreadsheets d 1lOtc072A0QaJAXormoUeiaqZu5 20BR1ikh0YZe65PI edit gid 61 0
  • Boot Loader启动过程分析

    一 Boot Loader的概念和功能 1 嵌入式Linux软件结构与分布在一般情况下嵌入式Linux系统中的软件主要分为以下及部分 xff1a xff08 1 xff09 引导加载程序 xff1a 其中包括内部ROM中的固化启动代码和Bo
  • eclipse:解决Ctrl+S 无法保存问题

    解决Ctrl 43 S 无法保存问题 工作中有一个同事的eclipse中无法使用Ctrl 43 S保存文件 xff0c 尝试了各种方法 xff0c 禁用了所有其他软件的快捷键 xff0c 依然无法解决 xff0c 最终发现是eclipse自
  • windbg学习笔记 FOR 内核调试(三) --进程句柄表HANDLE_TABLE

    windbg学习笔记 FOR 内核调试 三 进程句柄表HANDLE TABLE 想当年 初学核编 阅读第三章的内核对象的时候跟看天书没什么感觉 死命在想到底内核对象 句柄是个什么东西 干嘛用的 于是我们工作室的老大就对我说 这篇看过就过了
  • tx2 上 安装nvidia Isaac安装记录

    Isaac的功能挺多 xff0c 但是只支持最新的版本 xff0c 所以没办法 xff0c 只能装最新的了 下面就记录一下这个过程 安装环境真是很麻烦 xff0c 不是下载失败就是下载慢 一天基本安装不完 第一步安装1804 因为只支持18
  • 关于进程间的访问权限等进程间控制资料收集

    http www vckbase com DUPLICATEHANDLE函数可以实现将同步内核对象被拷贝并且将原内核对象关闭 xff0c 从而达到可以自由控制内核对象的目的 xff0c 这可以实现使得只能单一启用的进程成为多启用的进程的目的
  • IIC总线基础知识

    IIC总线基础知识 一 简介 IIC xff08 Inter Integrated Circuit xff09 是一个多主从的串行总线 xff0c 又叫I2C xff0c 是由飞利浦公司发明的通讯总线 xff0c 属于半双工同步传输类型总线
  • 常见RISC-V介绍

    当前一颗新出的CPU xff1a RISC V简直火透了半边天 xff0c 无论是财大气粗的阿里系的平头哥 xff0c 还是新创企业 xff0c 似乎只要和RISC V挂上钩就足可以实现赶英超美 那事实上RISC V是什么 xff1f 除了

随机推荐

  • qsort的compare函数

    qsort的compare函数 功能 xff1a 使用快速排序例程进行排序 头文件 xff1a stdlib h 用法 xff1a void qsort void base size t num size t width int cdecl
  • 深度相机(3D相机)

    二维图片 xff0c 人眼可以通过物体的相对位置关系判断物体距离的远近 xff0c 而相机则不可以 深度相机 xff08 3D相机 xff09 就是终端和机器人的眼睛 xff0c 其就是通过该相机能检测出拍摄空间的景深距离 通过深度相机获取
  • ubuntu只有一种分辨率的解决方案——4K显示屏与扩展屏幕

    4K显示屏的ubuntu系统在安装NVIDIA显卡后 xff0c 只有一个分辨率为 xff1a 3840 2160 xff0c 如图所示 xff0c 该分辨率在扩展显示器的使用时 xff0c 会出现4K主屏幕分辨率很高 xff0c 而扩展显
  • 使用RTSO-9003拓展板的TX2镜像备份与恢复

    须知 TX2进入recovery模式 在给TX2通电的时候 xff0c 马上按住板子上的recovery键 xff0c 持续3秒左右 xff0c 继续保持按住recovery键并按住reset键 xff0c 便可以进入TX2的recover
  • MATLAB学习笔记

    MATLAB学习笔记 一级目录备忘录HELP文件路径MATLAB函数定义与表达MATLAB特殊变量和常量MATLAB文件读写数组数组的创建常用操作常用操作常用操作 MATLAB画图plot函数 xff1a 改变图像中线的颜色和线条形式leg
  • ubuntu16.04 boot空间不足 no space left on device

    Linux 中 boot 是存放系统启动文件的地方 xff0c 安装 ubuntu 时单独分区给 200M 足够 xff0c 但是系统内核更新后 xff0c 老的内核依然保存在 boot 分区内 xff0c 几次升级后 xff0c 就会提示
  • 什么是死锁,产生死锁的原因及必要条件

    什么是死锁 xff1f 所谓死锁 xff0c 是指多个进程在运行过程中因争夺资源而造成的一种僵局 xff0c 当进程处于这种僵持状态时 xff0c 若无外力作用 xff0c 它们都将无法再向前推进 因此我们举个例子来描述 xff0c 如果此
  • nvidia jetson TX2 踩坑解决记录

    最近拿着一张多年前实验室买的Jetson想刷个软路由玩 xff0c 奈何折腾了一周才把clash meta内核装好 xff0c 记录一下自己踩的坑 xff0c 整理一下以免其他玩jetson TX2的兄弟掉大坑 已经过去一周了很多都记不太清
  • 接收灵敏度

    接收灵敏度是检验基站接收机接收微弱信号的能力 xff0c 它是制约基站上行作用距离的决定性技术指标 xff0c 也是RCR STD 28协议中 xff0c 空中接口标准要求测试的技术指标之一 合理地确定接收灵敏度直接地决定了大基站射频收发信
  • 16行,使用Python制作简易版QQ自动回复机器人(windows版)

    目录 1 安装go cqhttp 2 使用go cqhttp 2 1 发送信息 2 1 1发送 你好 2 1 2 在群里 64 人 2 2获取群成员列表 2 3 实现QQ机器人 1 安装go cqhttp 点此安装go cqhttp xff
  • FPGA在线升级实战应用篇

    FPGA在线升级实战应用篇 1 摘要 项目在运营过程中可能需要根据应用需求更改固件 xff0c 或者对现有产品进行升级及在产品使用过程出现的故障进行分析 xff0c 故需要对产品进行升级维护 以往的产品出现的故障或BUG问题只能通过产品寄回
  • (xTaskNotify)- assert failed! 错误的修复

    今日在测试ESP32代码的时候 xff0c 使用xTaskNotify发生错误 xff0c 提示如下 xff1a xTaskNotify assert failed xff0c 然后系统重启 找了一下原因 xff0c 在xTaskNotif
  • kubernetes dashboard用户界面安装使用

    原文 xff1a https www toocruel net kubernetes dashboardyong hu jie mian an zhuang shi yong 1 下载kubernetes dashboard yaml文件
  • 网络通信编程学习笔记(四):在Ubuntu下创建新用户、用puTTY/VNCViewer远程登录、用ftp上传和下载、用Xming远程连接

    前言 真的用不惯VNCViewer xff0c 树莓派还是外接显示屏来的舒服 xff0c 分辨率也是1080p xff0c 只有全高清壁纸才可以慰籍学习之痛 xff01 Xming也是不如按开机键来的方便 笑哭 目录 一 用puTTY VN
  • node.js和npm离线安装

    离线安装node js和npm 1 下载官方安装包并拷贝到离线机器上 官方下载地址 xff1a https nodejs org en download 2 解压文件 xff1a tar xJf node v8 9 4 linux x64
  • Github 创建新分支

    一 clone Repository clone Github 上的Repository xff0c 如下 xff1a git clone git 64 github span class hljs preprocessor com spa
  • ARM平台基于嵌入式Linux部署ROS

    By Toradex 秦海 随着ARM平台处理能力的日益强大 xff0c 越来越多的工业智能 机器人应用在ARM平台上面实现 xff0c 在这个过程中不可避免的就涉及到将机器人应用开发框架移植到ARM平台来运行 xff0c 因此本文就着重示
  • 如何设计一款低成本的计算机载板- 第一部分

    By Toradex Peter Lischer 1 简介 在以前的博客文章中 xff0c 我们已经在一个硬件项目中使用计算机模块提出了许多讨论 xff0c 因此 xff0c 这里我们假设你已经在项目中决定采用计算机模块SoM xff0c
  • git rebase后commit id的变化

    经测试发现 xff0c 在执行完 git rebase 之后 xff0c 1 xff09 会生成的新的 commit id 2 xff09 新 commit 与旧 commit 的父节点不相同 3 xff09 旧 commit 的父节点保持
  • 嵌入式Linux下串口调试

    By Toradex秦海 1 简介 UART串口是嵌入式设备最为常用的调试和通讯接口之一 xff0c 无论是RS232还是RS422 485都有着非常广泛的应用 xff0c 因此本文就基于嵌入式Linux演示在User Space进行串口调