Linux环境下使用USB的LCD(带监视狗与按钮)

ArticleCategory: [Choose a category, do not translate this]

Hardware

AuthorImage:[Here we need a little image from you]

[Photo of the Author]

TranslationInfo:[Author + translation history. mailto: or http://homepage]

original in en Guido Socher

en to cn 李振清(0244010/at/fudan.edu.cn), 鲍盛

AboutTheAuthor:[A small biography about the author]

Guido likes Linux because it is a paradise for people who want to develop their own software and hardware.

Abstract:[Here you write a little summary]

本文是就以前我写过的一篇硬件文章的强烈反馈而作的.LinuxFocus 的读者真的很厉害!一些人想要知道如何连接USB总线.这里有一份很 好的解决方案 .我们使用2002 年5月的文章中提到的LCD显示器并让USB使之工作.全部设备 都可以由USB总线来供电.所以你不需要任何的外接电源.

使用本文中的实例,你需要至少安装部分的Linux AVR开发环境.具体 的设置详见: Programming the AVR Microcontroller with GCC. .

ArticleIllustration:[This is the title picture for your article]

[Illustration]

ArticleBody:[The article body]

简介

USB的神奇在于它是现代化的接口并通过USB总线直接给设备供 电.它的接口轻巧并能使大量数据在其中传输.这些都是它的优点. 缺点是硬件的设计因为高频率和复杂的协议而变得困难. 先看看这些说明( http://www.usb.org/developers/, 你需要的是1.1的版本的说明) 你会对于它327页的篇幅和内容的晦涩难懂而大吃一惊。不要对U SB设备有如此多的执行问题而奇怪. 一个更易懂得说明在 http://www.beyondlogic.org/ 但是还是复杂.

该如何是好?我们如何把我们的微控制器(Microcontroller)与USB总 线连上?FTDI,一个苏格兰的公司,有了解决的办法( http://www.ftdichip.com). 他们提供了一种实现USB串连的芯片.FT232BM芯片一边是RS232, 另一边是USB.换一句话说,你只是将原来需要外加电源的MA X232转化成了带RS232转换线的FT232BM芯片.

驱动程序

FT232BM是真正的跨平台的解决方案.有适合各种操作系统的版本, 为Linux内核准备的是ftdi_sio并且源代码开放.它是Linux内核的一部 分.FT232BM不仅提供了USB到RS232的连接.它的Linux下的内核模 块仍在继续开发之中以扩充所有的函数功能.USB到RS232的部分已 经做好了,而且我用的是标准的Red Hat 7.3版的内核(2.4.18), 没有经过任何重新编译或修改.只是简单地把它加了进去...

ftdi_sio 在http://ftdi-usb-sio.sourceforge.net/开发.

我的Red Hat 7.3会在我插上USB设备的时候自动的加载所有的 内核模块.如果在你使用的发行版上无法工作,就请检查一下这些 模块:(针对USB-UHCI)

/sbin/lsmod usb-uhci
/sbin/lsmod usbcore
/sbin/lsmod usbserial
/sbin/lsmod ftdi_sio

The device file to communicate with the hardware is /dev/ttyUSB0

ftdio_sio的开发者建议至少使用2.4.20版的内核,但你 可以看到在2.4.18也可以工作(至少我们这里需要的那 些函数可以的)

电路图

正前方的是电路.你只是将FT232BM插入到微控制器(Microcontroller) 与USB 连接器中间的Rx/Tx线之间.还需要一个6MHz的晶体检波器 还有其他一些在设计书中描述到的部件.磁性微粒状的(ferrite bead) (在电路图的右侧)是一个小小的能滤去高频信号的线圈(USB总线要 在48MHz下运行),你还可以把一个1k的电阻缠上10圈的的细电线,将 它作为一个同样的线圈来使用.


schematic
一个需要注意的问题是电力的消耗,如果你设计了一个总线供电的设 备,必须让它小于100mA.你的设备还必须支持USB挂起模式(Suspend). 当一个"sleep"引脚位于低电位时,设备的耗电量必须小于0.5mA.后一 个要求使设计变得更加的困难.AVR支持一种"Idle"模式的(耗电少于 2mA)和"Power down"模式(耗电少于20uA).看起来把微控制器从idle 模式唤醒还是很容易的.虽然这会违反一点USB的标准,我还是决定 使用idle模式.显示器上的背景灯此时会关闭,整个电路的耗电量就 为3mA.这比0.5mA要大。但USB主控制器不会灵敏到能检测出来。 它应该会继续工作。

说了这么多,我必须承认我没有支持挂起的电脑,所以我不能测 试这个部分。如果你有电脑,最好是现代化的膝上式电脑,就请 测试一下,并把结果告诉我。

电路的其它部分在2002年的 5月的一篇文章里提到过了. 。所以对此我就不多做解释了
通过点击图例,可以看到放大了的图,所有的文件都已打包,可在文章的末尾下载。
board
板是单面的,蓝面的蚀刻层,红色的就是电线。

你需要的USB B型连接器的引脚如下图所示。
type B Receptacle

用SMD芯片工作

SMD芯片有很好的机械与电气性能,但对电子爱好者来说 却是一种噩梦。你需要很高的焊接技巧,至少板上的SMD 芯片必须做到不仅高质量而且干净。这是初学者所不具备 的。如果你没有把握来蚀刻电路板,焊接芯片,看看“可 供选择的其他方案”部分。

在你增加其它部分之前,把SMD芯片焊接到电路板上.
先弄一点焊锡在垫子上,然后在SMD芯片焊锡面上粘上一层 焊锡膏(一些人因为这很像蜂蜜而称它为焊锡蜜)。一家叫 做"Kontakt化学"的德国公司制造的一种似清漆状的"Lötlack" 喷雾 你可以使用它去代替焊锡蜜。

清洁一下你的烙铁,上面不因该有任何的焊锡留下,然后准 确的放置FT232BM。用烙铁尖轻轻的压一下每个针脚。不要 再增加焊锡了。ft232SMD

这样一来的话这个方案就很好了。你如果有一个小号的烙铁也没 有多大的关系。只要用一个适合的且确保在接触引脚前是干净的。 我不建议使用厨房烘烤机或其他野蛮的方法。用其它的方法很可 能会损坏芯片的。

测试

我建议分两步测试此电路。第一步不将其连接到AVR微控制器的插座上。 linux会认出FTDI芯片,你应该可以在/proc/bus/usb/device中看到如下内容:

T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0403 ProdID=6001 Rev= 2.00
S: Manufacturer=FTDI
S: Product=USB <-> Serial
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr= 90mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=serial
E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl= 0ms
E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl= 0ms

之后加入AVR微控制器并且装载一个能使LED灯闪烁的程序, 解开linuxusblcd软件包(在文章的末尾有下载),键入:

make testload0

编程下载线与USB转接器都应该插上。
如果测试成功那么你可以肯定微控制器就可以工作了。

之后你就可以把所有软件下载到微控制器中:

make load

现在你就可以使用"ttydevinit /dev/ttyUSB0" 来初始化USB串行连接, 并且用"cat>/dev/ttyUSB0"来与设备对话。

ttydevinit /dev/ttyUSB0
cat > /dev/ttyUSB0
D=hello world

这将显示"Hello world"于显示屏上。详细的内容见2002年5月 号的文章。那篇文章里提到一个叫llp.pl的程序,具有通过LC D显示器上的两个按钮以交互式的方式与计算机对话的功能。 这里你也可使用它们。

这是一幅工作的图(当拍此照时,按钮并没有连上去,FT232BM在板的下面):
usb lcd

可供选择的其他方案

虽然这里的电路很简单,但对初学者来说,由于必须具备焊 SMD芯片的技术而难以实现。如果你没有把握,考虑一下商 业化的成品。缺点是你通常不会得到像监视狗,LED和按钮等 额外的设备。你只得到LCD显示器。这些的价格也很合理。 带LCD的设备只需30欧元。

不幸的是,大部分的商业产品都有制造商的序列号,就算是基于ftdi芯片的产品。 这样的话内核不会识别它们,因为USB驱动程序依赖于这些数字.你需要修改内核, 重新编译。如果其他人已经更新了这些代码,也许后续的版本就支持新的芯片了。

参考文献: