《树莓派实战秘籍》——1.16 技巧16添加USB串行控制台

1.16 技巧16添加USB串行控制台

按理来说访问类似树莓派这样的嵌入式设备的最常用方式应该是通过内置的串行设备访问。这个简单的技巧可以让你从树莓派中得到一个USB串行控制台。

今天几乎所有可用的通用嵌入式计算机和微控制器都有内置的通用异步接收/发送器(UARTs)。UART对接收和发送串行数据提供了一个机制,同一时间只发送一个bit,串行通信的这种方法有时被称作晶体管-晶体管逻辑(TTL,transistor-transistor logic)序列。其数据速率因设备而异,但测量单位都是比特每秒。树莓派有一个内置的UART,连接到BCM引脚14(TXD)和15(RXD),数据速率为115200bps(或波特率)。

嗨,这不是真正的波特率!

OK,从语义的角度来看波特率是信号速率的单位,其并不总是和总bit速率(bps)相同。维基百科说波特率是“在一个数字调制信号或一个行编码上由传输介质造成的每秒显著的符号变化(信令事件)的数量”,然后它又花了好几页描述波特率的数学上的差异,这可能对你来说很迷人,也可能把你弄睡着。

关键之处是这样的:在计算机和电子行业泛滥成灾的术语波特率被使用已经有大约40年了,其结果是大量的软件和硬件不加区分的互换使用bps和波特率。对于树莓派上的USB串行控制台的具体情况来说,在数据速率方面使用bps和波特率是相同的,在这里单位对我们并不重要,我们需要尽可能保证你有一个功能正常的串行控制台,为此,你需要知道数据速率是115200。比特、波特率还是末日的大仓鼠,你愿意用哪个就用哪个,但是115200是树莓派UART串行设备的真正有魔法的数字。
如果你使用计算机已经有几年了,你也许还记得几乎每一台计算机都带有一个RS-232串口的时候。但在过去的几年中,这些端口已经消失了,大多数笔记本电脑中已经不再包括它们(或者它们只在可选的笔记本电脑底座中才存在)。不管你信不信,对于用于连接到树莓派的UART串口来说,这实际上是件好事。树莓派采用的Broadcom芯片使用0和3.3V的逻辑电平,而不是PC机的RS-232串口所使用的+/- 3到15V范围的电平。这意味着如果你的计算机有了一个RS-232串行端口,你将需要有一个转换板或适配器,以在它可以工作之前先转换信号电平。

RS-232或转换

这里有一个关于如何建立3.3V到RS-232电平转换器1的相当不错的教程。
好消息是有更好的方法连接树莓派的UART串口到你的计算机:USB!Adafruit出售一种绝佳的USB-to-ttl串行线2,它可以直接连接到树莓派的GPIO引脚上,并在另一端提供一个USB串行设备。这根线在一端(不具有USB接口的一端)有四个母头跳线连接器,这些跳线具有颜色编码:红色是5V电源,黑色是地线(GND),绿色用于树莓派接收数据(RXD),白色用于树莓派发送数据(TXD)。你可能也注意到了USB连接器这端比正常的要大,这是因为它里面有一个USB到串口的转换芯片。

要进行物理连接,只需要简单地将三个母头跳线连接器直接连接到树莓派的GPIO相应引脚即可。白色的发送线连接到TXD端口(BCM引脚14(P1-08)),而绿色的接收线连接到RXD端口(BCM引脚15(P1-10)),最后黑色的底线可以接到任何一个GND引脚,不过为了简单起见,我们建议你把它立刻连到TXD端口的左侧GND引脚(P1-06)。你可以通过比较图1-10来确认接线。

红线的技巧

你可能已经注意到我们没有要求你连接红线,这是因为USB串行设备将直接通过USB端口的5V 500mA启动自己。你可能也注意到我们曾经说过树莓派的UART使用3.3V逻辑电平,而不是5V。这千真万确,而接收和发送线已经转换成3.3V。现在一切正常,让我们放下这些并继续前进。

不过,你可以用这根红色电源线完成一个很酷的小技巧。因为红线能传输5V电压,因此你可以用它来驱动树莓派,而不是用正常的mini B型USB连接器。只需要将红线连接到5V引脚(P1-04),然后不需要连接任何其他电源,将USB-to-TTL串口线插上你的笔记本电脑,树莓派就可以启动了!

这其实只是个小把戏,因为从红线供电并不是启动树莓派的理想方式,这有好几个原因,我们已经在1.9.1小节“使用GPIO供电Pi之前请三思”中讨论过。
现在继续前进,将USB连接器连接到你的计算机上。

要连接UART串行设备,你首先需要知道它的设备名。当USB串行驱动加载成功(在你插入线缆的USB端时,应该已经完成了加载)后,内核会为设备分配一个设备名,因此你只需去翻看dmesg的输出即可。

具体来说,我们知道设备名可能是ttyUSB#,这里#是一个数字,可能是ttyUSB0,但是我们还是要确认看看。如果你有多个USB串行设备在你的系统上(你真是个淘气的超级黑客啊),你要找的是带有pl2303 converter这样的输出。如果你有一个以上的pl2303 converter类型的USB串行设备存在,请一次拔出一个反复尝试,直到你找到了合适的设备名。总而言之,下面就是关于你如何检查的:

不出所料,我们的设备是ttyUSB0。这意味着完整的设备节点名是/dev/ttyUSB0。未经授权的用户不能正常访问到/dev/ttyUSB#设备,你需要位于特别的组中。如果你拥有查看设备节点名的文件权限,你将看到它的拥有者是root,访问权被授予了dialout组中的用户:

你可以使用root账户(通过su或sudo命令)连接到/dev/ttyUSB0设备,也可以添加你的普通用户到dialout组中。要添加你的用户到dialout组,运行:

除非你重启终端会话,否则这将不会在你当前的终端会话中生效。你也可以登出并再次登录进系统,或者重启你的Linux系统。

不要使用Linux连接到串口?

你可以想象作者现在的表情一定是满脸都写着不同意。ಠ_ಠ不过,我们还是可以给出一些这方面的提示。

据供应商称,Windows 8不支持此设备。如果你是一个Windows 8用户,也许这是一个很好的时机可以考虑安装一个双系统并启动到Linux?

至于老生常谈的终端软件,如果你使用的是Windows XP或更老的版本,其会自带一个名为超级终端的程序,你可以使用它连接到串行控制台。
现在是时候连接树莓派的UART串行设备了。你需要使用一个支持串行连接的客户端,关于客户端有许多许多的工具,不过最常见的两个是minicom和screen。

1.16.1 Minicom
Minicom被设计成看上去很像Telix,一个流行的MS-DOS终端程序,它很可能是在你出生之前编写的,我们现在觉得自己都够老了(呃)。它具有MS-DOS的外观和感觉,换句话说,它的风格是旧式的、不清晰且让人困惑的,不过它确实可以工作。如果你要在Fedora中安装它:

或者在Debian/Ubuntu中:

安装好之后,使用minicom连接树莓派UART串行设备,运行:

为了测试效果,重新启动树莓派,当它连接上时,你应该可以看到Linux内核信息向下卷过屏幕,看上去类似于如图1-11所示。

你可以使用Control-A X退出minicom,或者使用Control-A Z进入帮助菜单获得某些有用的帮助。如果你要结束手工配置的mincom,只要保持奇偶校验、数据位为8N1,并禁用软件流控这些设置不变即可,你并不需要进入设置。

1.16.2 Screen

Screen是一个强大的工具,通常用于复用多个虚拟控制台。如果这是一本Linux介绍,我们就会用一整章来介绍如何使用screen。由于这是一本其他类型的书,我们只关注如何将之作为一个串行终端的客户端来使用。

要在Fedora中安装screen,运行:

或者在Debian/Ubuntu中:

安装好之后,使用screen连接树莓派UART串行设备,运行:

要退出屏幕会话,按Control-A K。

1.16.3 使用串行设备作为登录控制台
Raspbian预配置了UART串行设备作为一个登录功能的控制台,不过Pidora没有这么做。要想在Pidora中将UART串口设备作为一个登录控制台会话,可以运行:

这会立刻将会话打开。如果你已经连接了一个串行线缆,你应该会看到登录提示出现。如果想要让这个登录提示一直出现(且在启动时自动加载),只需要简单地运行:

通过创建到systemd目录树的符号链接,你告诉systemd启动ttyAMA0设备作为一个“getty”或登录控制台。

有趣的串行控制台花絮

“getty”这个名字来自“得到电传(get teletype)”。电传打字机最初是一台使用打字机做输入及打印机做输出并用来作为电报机的设备,但当计算机出现之后,这些设备找到了一个用途,即成为给计算机输入数据的一种方法。同时电传打字机也在20世纪40年代和50年代被广泛用在新闻编辑室中,仅用于“接收数据”,“咔嗒”声响起就表示有新闻“通过线路”传了过来,这就是电传打字机。最终,这些设备成为了完全的串行控制台,这就是我们在Linux中称控制台设备为“TTYs”的原因。
Pidora和Raspbian都把UART串行设备预配置成内核消息的控制台。你可以在 /boot/cmdline.txt文件中看到这些配置:

console值告诉Linux内核启动时往哪里输出消息,kgdboc值在控制台上启动了内核调试。

如果你现在正在进行的项目想要访问UART串行设备,你可能想要从/boot/cmdline.txt文件中移除console=ttyAMA0,115200和kgdboc=ttyAMA0,115200项,并重新启动树莓派。如果你不这样做,你可能会从Linux内核收到串行线路上的意想不到的输出行噪音,而你的程序/项目可能并不准备处理这些输出行。

如果你已经启用了串行设备作为登录控制台,你也可能会希望禁用它。要在Raspbian中禁用,在 /etc/inittab文件中注释掉下列行(通过在行的开头处添加一个#号)

在Pidora上,你只需要简单地删除掉ttyAMA0设备的systemd getty service符号链接,通过运行如下命令即可:

无论是哪个Linux发行版,在做了以上改变后,都需要重新启动让改动生效。

1.16.4 串行连接上的奇怪噪音(或信号丢失)

无论是Ubuntu还是Fedora都包括了一个名叫ModemManager的软件,它处理所有种类的调制解调器(modem)设备的设置,这些设备涵盖了从老式的拨号调制解调器到更现代的3G/4G设备。不幸的是,现在有相当多的调制解调器都采用了和我们的USB串行接口线路相同的通用转换芯片(pl2303),从而成为了调制解调器前面的陷阱。

其结果是,ModemManager会尝试访问它(并不断尝试,不断尝试……)。因为它没有办法知道在 /dev/ttyUSB0后面的设备是调制解调器还是盲文终端,或者在我们的例子中,它只是一个树莓派。这可能会造成你无法打开 /dev/ttyUSB0,也可能仅仅造成控制台上出现了噪音。

因为我们知道正在连上的USB设备究竟是什么,所以我们可以告诉ModemManager不用管它,并使用udev规则明确地将我们连上的设备列入黑名单。

以root用户编辑/lib/udev/rules.d/77-mm-usb-device-blacklist.rules文件,在文件底部LABEL="mm_usb_device_blacklist_end"这一行之前添加如下行:

如果你使用的USB串行线与Adafruit线不同,而你正想修复这个问题。你应该可以运行lsusb应用程序(从usbutils软件包)来确定idVendor(供应商id)和idProduct(产品id)字符串(它们在输出中按照XXXX:YYYY这样的语法,这里XXXX是idVendor,而YYYY是idProduct)。

例如,Adafruit USB串行线的lsusb值看起来像这样:

Udev自动检测规则文件的变化,因此更改立即生效,无需udev重新启动。这就是说,有时候你需要重新启动Linux系统来让udev重新读取其规则。无论哪种方式,只要udev读取了它的新规则,USB串口转换设备就进入了它的黑名单,ModemManager自此就会忽略这个设备。

时间: 2024-11-02 10:40:55

《树莓派实战秘籍》——1.16 技巧16添加USB串行控制台的相关文章

《树莓派实战秘籍》——导读

前 言 树莓派的灵感诞生于埃本·厄普顿在剑桥大学负责计算机科学专业学生工作期间(参见前言中的描述),他发现准大学生需要有更多的机会获得编程经验才可以达到大学水平.如我们现在所知的,关于什么将会成为Pi的第一个概念设计诞生于2006年,阿尔法版在2011年年底通过验证,最初的10块板在2012年年初被拍卖,价格高达16 000英镑. 首批10 000台树莓派于开始销售,截至2011年年底,它的SD卡映像文件已经被下载超过了50000次,暗示其普及时代即将来临.当时两家英国的销售商Premier F

《树莓派实战秘籍》——2.2 技巧22构建一个定制内核

2.2 技巧22构建一个定制内核 树莓派实战秘籍 对于很多技巧来说,标准的预购建Linux内核映像已经足够了,不过有些需要的选项或驱动并没有被标准内核启用.这个技巧打开了一些额外的选项,并将对本书中其他的技巧有用. Linux内核是因为以下几个原因而成为一个奇妙的操作系统核心的:首先是它的多功能性,而且它原生支持了大量的架构和设备:然后是其开源代码库,树莓派基金会提供了预购建的专为支持树莓派硬件的客制化的Linux内核映像及相应的源代码树,让你可以建立你自己定制的可以工作在树莓派上的内核映像.这

《树莓派实战秘籍》——1.8 技巧08获取更多的USB端口

1.8 技巧08获取更多的USB端口 树莓派实战秘籍B型树莓派有两个专用的USB连接器端口,不过实际上,对于非常多的案例来说这确实不太够用,这里是如何获得更多USB端口的技巧. 通用标准总线(USB,Universal Standard Bus)已经成为计算机配件事实上的标准连接器.键盘.鼠标.硬盘驱动器.操纵杆.手电筒甚至泡沫导弹发射器都通过USB连接.树莓派(B型)配备了两个专用的USB 2.0端口让你去访问这个广阔世界的精品外设,但这些端口却一眨眼就用完了.在正常使用的情况下,键盘和鼠标会

《树莓派实战秘籍》——1.20 技巧20使用Swap添加额外的内存

1.20 技巧20使用Swap添加额外的内存 你的树莓派需要更多一点的内存吗?Swap可以让你交换磁盘空间和内存. Linux长久以来就包含了swap的概念,其核心是在RAM和磁盘之间移动内存页的能力.在实际应用中,这种能力给操作系统提供了更多的可用内存(以磁盘空间的成本).因为B型树莓派只有512MB内存,增加swap文件(或分区)以提高可用内存的想法很吸引人. Swap的危害 在我们开始之前,你应该要了解一下这种方法的缺点.Swap的速度只是存储设备的写入速度,同时这也是一个高度写密集型操作

《树莓派实战秘籍》——1.17 技巧17添加重启按钮

1.17 技巧17添加重启按钮 树莓派实战秘籍也许你已经注意到Pi缺少了某种电子产品中很常见的东西:电源开关.版本2的B型树莓派对此做了一个小小的修补. 从你的计算机中拿走电源的on/off开关,虽不至于造成彻底的不方便,但肯定不只是造成了你的隐约不舒服这么简单,但这就是树莓派现在的情况.一个简单的修补方法是,不管你手中拿着的是什么主板,使用时都将它插入到带on/off开关的电源插板中.不过对于版本2的B型树莓派主板来说,你还有另一种选择. 这种板的一个新增功能是标记为P6的地方,它很容易被忽视

《树莓派实战秘籍》——1.14 技巧14初学GPIO

1.14 技巧14初学GPIO GPIO代表通用输入/输出(GPIO,General-Purpose Input/Output),因为有了它们,你的树莓派在本书中的许多技巧才成为可能.这个技巧将为你掀起它们的神秘面纱1. 树莓派包含了一些你可能早已熟悉的连接器(以太网.HDMI.音频,以及USB等),它还有一个26pin(两排13针)的排针用来直接连接较底层的设备.这些引脚被称为GPIO,它们是可编程的输入/输出管脚,可用于广泛的用途. 实际上,这意味着我们使用这些GPIO引脚几乎可以把任何东西

《树莓派实战秘籍》——1.2 技巧02挂载SD卡

1.2 技巧02挂载SD卡 树莓派实战秘籍 你当然可以直接从正在运行的树莓派上访问其文件,但使用SD卡读卡器将SD卡挂载到一台独立的计算机上,将会使很多任务(如添加或编辑文件)变得更容易. 虽然树莓派就是一台独立的Linux计算机,不过如果你手头有另外一台计算机的话确实可以为你提供帮助,在有的情况下,它甚至可能是不可或缺的.幸运的是,现在许多计算机都带有内置的SD卡读卡器,即使你的计算机没有内置,它们的价格也不贵并且很容易买到.所以,即使你买的是预装系统的SD卡,你也应该拥有一个SD卡读卡器以及

《树莓派实战秘籍》——1.7 技巧07使用过压获得更高的性能

1.7 技巧07使用过压获得更高的性能 树莓派实战秘籍过压,也被称为"动态电压缩放来增加电压",是一个从电子元器件中获取更多性能的小窍门. 树莓派的电路是由充当逻辑门和开关的晶体管组成的,在正常操作元器件时这些节点的电压会在高电压和低电压之间切换.当切换发生时,晶体管的电容和所施加的电压影响了切换输出变换的速度.使用更高的电压("过压")配置电路会让电路的反应速度更快,你可以获得比正常方法下对硬件超频的更好效果. 树莓派固件提供了一些可配置电压,在/boot/con

《树莓派实战秘籍》——2.3 技巧23更新到最新的预建内核

2.3 技巧23更新到最新的预建内核 树莓派实战秘籍 让你的树莓派使用最新的Linux内核?你当然可以这么做,而且有一种方法可以让你不必从源代码构建就能够获取它们. 树莓派基金会的好人们经常努力工作增加新的功能到Linux内核源代码树中,而且他们又进一步定期更新一份预构建的Linux内核映像文件的拷贝.这个内核专门为树莓派配置了一系列选项及模块.使用这个内核意味着你可以确定所有内置到树莓派的硬件,以及任何树莓派的特定功能都可以正确地启动. 发行版特点 一些Linux发行版可能假定某些没有在树莓派