riple

Stay Hungry, Stay Foolish.

学习Tcl(六)——串口操作

0
阅读(5132)

在当前的工作中,我们通过串口向U-BOOT发送命令,通过md、mw命令读写CPU的外部总线实现对FPGA的参数配置。我们遇到的问题是:如何 简便快捷地向U-BOOT传递大量的命令。在FPGA作为协处理器的系统中,这一问题是很普遍的。

可供选择的方案如下:

0. 一次性拷贝-粘贴大量的文本是HyperTerminal这样的串口调试工具不能支持的,手工粘贴5条以上的命令就令人难以忍受了,所以该方法不在考虑之 列。

1. 采用U-BOOT提供的autoscr命令执行脚本,这一脚本可以通过U-BOOT的loadb命令下载到CPU的内存中。困难的是,.txt脚本必须通 过随U-BOOT源码提供的mkimage工具编译(封装)为特定格式的文件才能被U-BOOT执行。riple咨询了我们的firmware工程师,结论是不安装Linux操作系统,是无法编译U-BOOT源码并获得mkimage工具的。对于我们这些 hardware工程师来说,在Linux操作系统下搭建U-BOOT编译环境还是太奢侈了些;Cygwin又太寒酸了,编译U-BOOT还需要安装这样 那样的package。

2. 通过U-BOOT的setenv命令设置自定义命令,然后通过run命令运行自定义命令。困难是,自定义命令的字节长度是有限制的。在我们的情况下,一条 自定义命令只能包含不超过4条的mw命令。中等长度的脚本可以以这种方式执行,可是我们的脚本长度是超长的。

这么看来,通过U-BOOT是很难实现我们需要的批处理功能了。幸运的是,在同事的启发下,riple用Tcl实现了对串口的操作。

在今天早上的一次“隔间探头会议”上,我的同事Jack提议道:为 什么不用Tcl写一个程序把我们的脚本发送给CPU呢?Jack的想法是通过Tcl来控制HyperTerminal实现自动化的“拷贝-粘贴”。受到 Jack的启发,我恍然大悟:为什么不用Tcl直接控制PC机的串口给CPU发送U-BOOT命令呢?这应该比控制HyperTerminal的图形界面 要容易多了。

于是我赶紧到Tcl Developer Xchange上搜索了一 下Serial Port,很容易就找到了几个例子。用了2个小时的时间,我终于用Tcl实现了一个简单的串口调试工具;最重要的是,这个工具还能读取.txt脚本文件, 直接向CPU逐条发送U-BOOT命令。

有了这个工具,我们不但可以在调试阶段方便地执行脚本,尝试多种配 置组合,还可以在内部测试阶段实现无人值守的批量硬件测试,实现自动化的板级验证。

硬件工程师需要多少掌握一点脚本语言——Matlab、Tcl、 Perl都行。项目自动化不应该是软件工程师独享的特权。icon

相关链接:

用U-BOOT构建嵌入式系统的引导装载程序 (转载)

U-Boot Scripting Capabilities

Serial Port- wiki.tcl.tk

Tcl Built-In Commands - open manual page

Baidu
map