使用 Elixir 开发嵌入式系统: 串口调试

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

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

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

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

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

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

原材料准备

USB 转 TTL 调试线

使用 Elixir 开发嵌入式系统: 串口调试_第1张图片

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

使用 Elixir 开发嵌入式系统: 串口调试_第2张图片

除了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 文件, 该文件可以从 这里 下载.

使用 Elixir 开发嵌入式系统: 串口调试_第3张图片

-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 的串口线连接线示意图
使用 Elixir 开发嵌入式系统: 串口调试_第4张图片

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

使用 Elixir 开发嵌入式系统: 串口调试_第5张图片

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

screen /dev/tty.usbserial 115200

其中 115200 为波特率

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

screen 的输出历史问题:

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

defscrollback 10000

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

参考资料

  • 串口驱动下载地址

  • Mac OS X上使用USB转串口线连接树莓派

  • Windows下用串行连接控制树莓派

系列文章

  • Elixir 下开发嵌入式系统开发: 小试身手

  • Elixir 下开发嵌入式系统开发: 串口调试

你可能感兴趣的:(elixir,嵌入式)