: 为什么需要串口调试?
: 因为显示器直连Respberry Pi的HDMI的启动信息无法向上滚动, 无法查看完整的启动信息, 非常不方便硬件调试.

如何使用串口连接到目标板

默认 iex 控制台显示在连接到HDMI端口的显示器上. 这对于新手来说是比较友好的, 因为只需要用HDMI线把树莓派的HDMI输出端口显示器的输入端口连接起来就可以了. 但是对于调试问题, 高级开发工流程, 通常期望通过FTDI 线USB TTL线把开发电脑连连接到目标板的串口. 这让我们能够通过终端模拟器(比如screen)与目标设备进行交互.

本文以上一篇文章 Elixir 下开发嵌入式系统开发: 小试身手 为基础进行实际的上手操作, 如果你不了解, 可以先阅读上一篇文章.

默认IEx 终端显示输出到HDMI接口.

可以切换到UART(通用异步收发器), 下面讲述这个切换过程.

原材料准备

USB 转 TTL 调试线

图片描述

根据Mac OS X上使用USB转串口线连接树莓派安装驱动.

图片描述

除了OSX系统外, 还有Android和Windows的驱动可以下载. 选择合适自己的即可. Windows 用户请参考 Windows下用串行连接控制树莓派.

步骤一: 配置

参考 Elixir 下开发嵌入式系统开发: 小试身手, 从Github Fork代码库.

配置文件覆盖, 该配置所指向的目录会覆盖系统文件对应的文件. 在 hello_iot/apps/fw/config/config.exs 配置文件中增加如下配置:

# ------------
# 增加覆盖目录, 覆盖默认系统文件
# ------------
config :nerves, :firmware,
  rootfs_additions: "config/rootfs-additions"

hello_iot/apps/fw/config/rootfs-additions 下创建 erlinit.config 文件, 该文件可以从 这里 下载.

图片描述

-c tty1 修改为 -c ttyS0

步骤二: 烧制

下载依赖, 编译, 制作固件, 烧制固件.

# 切换到固件目录
cd hello_iot/apps/fw
# 下载依赖
mix deps.get
# 编译
mix compile
# 固件打包
mix firmware
# 烧制固件
mix firmware.burn

UPDATE: Nerves 0.4 把打包工具从 Exrm 替换为 Distillery, 因此在 mix deps.get 后需要执行 mix release.init 生成发布配置文件 rel/config.exs

步骤三: 连接

用USB串口线把Mac和Respberry Pi连接起来. 如下图:

Respberry Pi 3 的串口线连接线示意图
图片描述

GPIO针脚15, 接绿线TXD, 14针脚, 接白线RXD, 黑色为GND地线, 我用的Mini USB的外接电源, 所以这里红色的供电针脚不接, 实际接线图如下:

图片描述

把USB插入MAC笔记本的USB端口, 并执行如下命令:

screen /dev/tty.usbserial 115200

其中 115200 为波特率

重启树莓派就可以看到启动信息输出到了开发机的屏幕上了.

ttys0

screen 的输出历史问题:

~/.screenrc 文件中添加下面一行:

defscrollback 10000

然后输入Ctrl-a ESC, 按翻页, 上下键即可查看输出历史.

参考资料

系列文章


developerworks
1.7k 声望266 粉丝