Linux串口相关的操作及绑定

@toc

操作串口出现权限不足情况处理

sudo usermod -aG dialout 用户名 #把此用户名加入dialout用户组,可无需sudo操作串口

要查看某个串口的波特率等信息

可在控制台输入

stty -F /dev/ttyS0 -a  #ttyS0为要查看的串口

也可以用stty设置串口参数

stty -F /dev/ttyS0 ispeed 115200 ospeed 115200 cs8
  • 该命令将串口1(/dev/ttyS0)设置成115200波特率,8位数据模式。一般情况下设置这两个参数就可以了,如果显示数据乱码,可能还需要设置其它参数,使用man查看stty其它设置选项。

cat打印串口数据

使用后相当于串口回传,发什么回什么

cat /dev/ttyS0

发送数据

echo "xxx" > /dev/ttyS2

排查问题常用方法

1、查看串口是否可用

可以对串口发送数据比如对com1口

echo "x" /dev/ttyS0

2、查看串口名称使用

ls -l /dev/ttyS*

一般情况下串口的名称全部在dev下面,如果你没有外插串口卡的话默认是dev下的ttyS* ,一般ttyS0对应com1,ttyS1对应com2,当然也不一定是必然的;

3、查看串口驱动

cat /proc/tty/drivers/serial

4、查看串口设备

dmesg | grep ttyS*

5、查一下板子上的串口有没有设备

grep tty /proc/devices

如果有ttyS设备,再看/dev/有没有ttyS*,如没有就建立一个:

mknod /dev/ttyS0 c 4 64

如果板子的设备中没有标准串口设备ttyS0,也没有ttySAC0。/dev下应该有一个USB串口:/dev/ttyUSB0.

当一个串行卡或数据卡被侦测到时,它会被指定成为第一个可用的串行设备。通常是/dev/ttyS1(cua1)或/dev/ttyS2(cua2),这完成看原已内建的串口数目。ttyS*设备会被报告在/var/run/stab内。

PC上的串口一般是ttyS,板子上Linux的串口一般叫做ttySAC

6、写的串口程序不能正常接收发送数据

可能是linux下的串口设备没有打开,需要改变串口设备
的权限,或者根据文章头添加用户到组处理

chmod 777 /dev/ttyUSB0

串口号绑定

可以通过以下命令 查看 板子上的硬件端口的内核设备名

udevadm info --attribute-walk --name=/dev/ttyUSB0

该条命令会将 ttyUSB0所对应的硬件端口的kernel设备名 显现出来, 得到KERNEL== '1-5.5.4', 而不是之前的ttyUSB0

cd /etc/udev/rules.d/
vim usb1.rules
ACTION=="add",ENV{ID_BUS}=="usb",ENV{ID_PATH_TAG}=="platform-1c1d000_usb-usb-0_1_1_1_0",SYMLINK+="ttyUSBPort1"  #固定串口号

参考博客

脚本方式

  • cmd.sh是利用bash脚本获取/sys/class/tty/ttyUSB*的一些信息保存在device_usb.txt中
  • getUSB.py是通过device_usb.txt中的信息,获取到当前挂着在端口3-1.1上的是ttyUSB0还是ttyUSB1并保存在usbdev 中

cmd.sh如下:

#!/bin/bash
declare -i a=0
declare -i b=0 
while [[ ! -e "/sys/class/tty/ttyUSB0" ]]
do
sudo sleep 0.01s
a=a+1
if [ $a -eq 300 ];then  #等待一段时间没有检测ttyUSB0设备到会自动跳出while
break
fi
done

while [[ ! -e "/sys/class/tty/ttyUSB1" ]]
do
sudo sleep 0.01s
b=b+1
if [[ $b -eq 300||$a -ne 0 ]];then  #if USB0 been detected ,also get out of while
break
fi
done


if [[ ! -e /sys/class/tty/ttyUSB0&&! -e /sys/class/tty/ttyUSB1 ]]; then #如果不存在ttyUSB设备
echo "Not have ttyUSB0 or not have ttyUSB1"
else                                   #如果完美检测到了两个ttyUSB设备,则将信息log到device_usb.txt当中
tty1=$(ls -l /sys/class/tty/ttyUSB0) 
tty2=$(ls -l /sys/class/tty/ttyUSB1)

sudo ls -l /sys/class/tty/ttyUSB0 /sys/class/tty/ttyUSB1 > ./device_usb.txt
fi

if [ ! -n "$tty1" ] ;then   # "! -n" shows blank var  #非空检测
echo "tty1 is empty"
fi
#delay 0.01s to make sure the device_usb.txt complete
sudo sleep 0.01s
#remove the old USB device shortcut

if [ ! -e "/dev/ttydata" ] ;then # 如果/dev/ttydata本身不存在
echo "-------------/dev/ttydata not found"
else                                     #如果存在,则需删除之,然后重新创建之
echo "/dev/ttydata is exist"
sudo rm /dev/ttydata
fi

./getUSB.py 调用当前路径下的getUSB.py这个Python语言,明确此次是哪个,ttyUSB0,或者ttyUSB1挂载在端口3-1.1上

usbdev=$(cat ./usbdev) #获取到这个设备
echo "the device is : "
echo $usbdev

sudo ln -s /dev/$usbdev /dev/ttydata #将这个设备软连接到/dev/ttydata以后每次打开这个ttydata即可

getUSB.py:

#!/usr/bin/python
#coding:utf-8
import re  #正在表达式
sss = open("./device_usb.txt","rb") #打开device_usb.txt设备,并读取内容
www = open("./usbdev","wb")  #当前路径下创建usbdev文件,后续会写入内容
s_read = sss.read()  usb3/3-1/3-1.1/
r = r"usb3/3-1/3-1\.1.+(ttyUSB[0-9])"
#正则中“.”需要转义,所以使用“\.”表示“.”
#这个规则是找到usb3/3-1/3-1.1/这个字符串后面紧跟的是此次上电生成的ttyUSB0或者ttyUSB1
output = re.findall(r,s_read)
www.write(output[0]) #将结果写到usbdev中
www.close()
sss.close()

完成之后 ,设置开机启动cmd.sh(在/etc/rc.local中设置)则每次开机之后,会从/dev/ttydata获取到固定端口的数据

绑定硬件序列号,查找serial(适用于相同生产商生产的相同USB串口)

方式一

lsusb #查看自己的USB串口ID。我的USB串口是0403:6001
#编辑规则文件
vim /etc/udev/rules.d/myusb.rules  #这里注意加s

写入内容如下:

KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0666", GROUP:="dialout",  SYMLINK+="485_serial" #CP210X
ls -l /dev |grep ttyUSB

方式二

udevadm info --attribute-walk --name=/dev/ttyUSB0

我的硬件序列号:ATTRS{serial}=="FTSYWCXZ"这个号是唯一的

vim /etc/udev/rules.d/usb.rules
ATTRS{serial}=="FTSYWCXZ", MODE:="0777", GROUP:="dialout", SYMLINK+="usb_0"
ls -l /dev |grep ttyUSB

可以通过/dev/usb_0打开串口设备

常用的匹配类型:

  • BUS:匹配总路类型,比如PCI USB等

  • KERNEL:- 匹配Kernel设备名,比如hda hdb.

  • DRIVER :- 匹配Kernel的驱动程序名

  • SUBSYSTEM: - 匹配子系统名。

  • ID :- 匹配总路系统的ID (e.g. PCI bus ID)。

  • PLACE :- 匹配物理位置 (对USB很有用)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容

  • 因为现在电脑基本不配备串行接口,所以,usb转串口成为硬件调试时的必然选择。目前知道的,CH340,PL2303的...
    颜水花生阅读 3,277评论 0 1
  • [toc] 因为现在电脑基本不配备串行接口,所以,usb转串口成为硬件调试时的必然选择。目前知道的,PL2303的...
    孤逐王阅读 8,510评论 0 7
  • 首先 当前的ubuntu基本的串口驱动是有集成的,确认usb串口是否连接正常,用minicom打开 /dev/tt...
    黑鼠_DEAN阅读 3,947评论 0 1
  • 大学的时候,帮朋友写的操作系统调研的作业,最近整理过去的文档时候偶然发现,遂作为博客发出来。 从串口驱动到Linu...
    free_will阅读 7,375评论 7 59
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,529评论 28 53