<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta name="generator" content="HTML Tidy, see www.w3.org"> <!-- this stylesheet will later on be added by lfparser automatically: --> <style type="text/css"> <!-- pre { font-family:monospace,Courier } p.code { width:80%; alignment:center; background-color:#aedbe8; border-style:no ne; border-width:medium; border-color:#aedbe8; padding:0.1cm ; text-align:left } --> </style> <title></title> </head> <body> <h1>Linux环境下使用USB的LCD(带监视狗与按钮)</h1> <h4>ArticleCategory: [Choose a category, do not translate this]</h4> Hardware <h4>AuthorImage:[Here we need a little image from you]</h4> <img src="../../common/images/Guido-S.gif" alt= "[Photo of the Author]" height="164" width="173"> <h4>TranslationInfo:[Author + translation history. mailto: or http://homepage]</h4> <p>original in en <a href="http://linuxfocus.org/~guido/">Guido Socher</a></p> <p>en to cn <a href="http://grandlab.cer.net/~bao">李振清(0244010/at/fudan.edu.cn), 鲍盛</a></p> <h4>AboutTheAuthor:[A small biography about the author]</h4> <p>Guido likes Linux because it is a paradise for people who want to develop their own software and hardware.</p> <h4>Abstract:[Here you write a little summary]</h4> 本文是就以前我写过的一篇硬件文章的强烈反馈而作的.LinuxFocus 的读者真的很厉害!一些人想要知道如何连接USB总线.这里有一份很 好的解决方案 .我们使用<a href="../May2002/article236.shtml">2002 年5月的文章</a>中提到的LCD显示器并让USB使之工作.全部设备 都可以由USB总线来供电.所以你不需要任何的外接电源.<br> <br> 使用本文中的实例,你需要至少安装部分的Linux AVR开发环境.具体 的设置详见: <a href="../March2002/article231.shtml">Programming the AVR Microcontroller with GCC</a>. </a>. <h4>ArticleIllustration:[This is the title picture for your article]</h4> <img src="../../common/images/article286/linuxusblcd_title.jpg" alt="[Illustration]" hspace="10" width="250" height="353"> <h4>ArticleBody:[The article body]</h4> <h2>简介</h2> USB的神奇在于它是现代化的接口并通过USB总线直接给设备供 电.它的接口轻巧并能使大量数据在其中传输.这些都是它的优点. 缺点是硬件的设计因为高频率和复杂的协议而变得困难. 先看看这些说明(<a href="http://www.usb.org/developers/"> http://www.usb.org/developers/</a>, 你需要的是1.1的版本的说明) 你会对于它327页的篇幅和内容的晦涩难懂而大吃一惊。不要对U SB设备有如此多的执行问题而奇怪. 一个更易懂得说明在 <a href= "http://www.beyondlogic.org/">http://www.beyondlogic.org/</a> 但是还是复杂.<br> <br> 该如何是好?我们如何把我们的微控制器(Microcontroller)与USB总 线连上?FTDI,一个苏格兰的公司,有了解决的办法( <a href="http://www.ftdichip.com"> http://www.ftdichip.com</a>). 他们提供了一种实现USB串连的芯片.FT232BM芯片一边是RS232, 另一边是USB.换一句话说,你只是将原来需要外加电源的MA X232转化成了带RS232转换线的FT232BM芯片. <h2>驱动程序</h2> FT232BM是真正的跨平台的解决方案.有适合各种操作系统的版本, 为Linux内核准备的是ftdi_sio并且源代码开放.它是Linux内核的一部 分.FT232BM不仅提供了USB到RS232的连接.它的Linux下的内核模 块仍在继续开发之中以扩充所有的函数功能.USB到RS232的部分已 经做好了,而且我用的是标准的Red Hat 7.3版的内核(2.4.18), 没有经过任何重新编译或修改.只是简单地把它加了进去...<br> <br> ftdi_sio 在<a href= "http://ftdi-usb-sio.sourceforge.net/">http://ftdi-usb-sio.sourceforge.net/</a>开发. <br> <br> 我的Red Hat 7.3会在我插上USB设备的时候自动的加载所有的 内核模块.如果在你使用的发行版上无法工作,就请检查一下这些 模块:(针对USB-UHCI) <p class="code">/sbin/lsmod usb-uhci<br> /sbin/lsmod usbcore<br> /sbin/lsmod usbserial<br> /sbin/lsmod ftdi_sio<br> </p> The device file to communicate with the hardware is /dev/ttyUSB0 <br> <br> ftdio_sio的开发者建议至少使用2.4.20版的内核,但你 可以看到在2.4.18也可以工作(至少我们这里需要的那 些函数可以的) <h2>电路图</h2> 正前方的是电路.你只是将FT232BM插入到微控制器(Microcontroller) 与USB 连接器中间的Rx/Tx线之间.还需要一个6MHz的晶体检波器 还有其他一些在设计书中描述到的部件.磁性微粒状的(ferrite bead) (在电路图的右侧)是一个小小的能滤去高频信号的线圈(USB总线要 在48MHz下运行),你还可以把一个1k的电阻缠上10圈的的细电线,将 它作为一个同样的线圈来使用.<br> <br> <br> <a href="../../common/images/article286/schematic.gif"><img src="../../common/images/article286/schematic_th.gif" alt= "schematic" width="531" height="354"></a> <br> 一个需要注意的问题是电力的消耗,如果你设计了一个总线供电的设 备,必须让它小于100mA.你的设备还必须支持USB挂起模式(Suspend). 当一个"sleep"引脚位于低电位时,设备的耗电量必须小于0.5mA.后一 个要求使设计变得更加的困难.AVR支持一种"Idle"模式的(耗电少于 2mA)和"Power down"模式(耗电少于20uA).看起来把微控制器从idle 模式唤醒还是很容易的.虽然这会违反一点USB的标准,我还是决定 使用idle模式.显示器上的背景灯此时会关闭,整个电路的耗电量就 为3mA.这比0.5mA要大。但USB主控制器不会灵敏到能检测出来。 它应该会继续工作。 <br> <br> 说了这么多,我必须承认我没有支持挂起的电脑,所以我不能测 试这个部分。如果你有电脑,最好是现代化的膝上式电脑,就请 测试一下,并把结果告诉我。<br> <br> 电路的其它部分在<a href="../May2002/article236.shtml">2002年的 5月</a>的一篇文章里提到过了. 。所以对此我就不多做解释了 <br> 通过点击图例,可以看到放大了的图,所有的文件都已打包,可在文章的末尾下载。<br> <a href="../../common/images/article286/board.gif"><img src= "../../common/images/article286/board_th.gif" alt="board" width="145" height="195"></a> <br> 板是单面的,蓝面的蚀刻层,红色的就是电线。<br> <br> 你需要的USB B型连接器的引脚如下图所示。<br> <center> <img src= "../../common/images/article286/usb_typeB_receptacle.gif" alt="type B Receptacle" width="232" height="277"> </center> <br> <h2>用SMD芯片工作</h2> SMD芯片有很好的机械与电气性能,但对电子爱好者来说 却是一种噩梦。你需要很高的焊接技巧,至少板上的SMD 芯片必须做到不仅高质量而且干净。这是初学者所不具备 的。如果你没有把握来蚀刻电路板,焊接芯片,看看“可 供选择的其他方案”部分。<br> <br> 在你增加其它部分之前,把SMD芯片焊接到电路板上.<br> 先弄一点焊锡在垫子上,然后在SMD芯片焊锡面上粘上一层 焊锡膏(一些人因为这很像蜂蜜而称它为焊锡蜜)。一家叫 做"Kontakt化学"的德国公司制造的一种似清漆状的"Lötlack" 喷雾 你可以使用它去代替焊锡蜜。<br> <br> 清洁一下你的烙铁,上面不因该有任何的焊锡留下,然后准 确的放置FT232BM。用烙铁尖轻轻的压一下每个针脚。不要 再增加焊锡了。<img src= "../../common/images/article286/ft232SMD.jpg" alt="ft232SMD" align="right" width="250" height="168"> <br> <br> 这样一来的话这个方案就很好了。你如果有一个小号的烙铁也没 有多大的关系。只要用一个适合的且确保在接触引脚前是干净的。 我不建议使用厨房烘烤机或其他野蛮的方法。用其它的方法很可 能会损坏芯片的。 <h2>测试</h2> 我建议分两步测试此电路。第一步不将其连接到AVR微控制器的插座上。 linux会认出FTDI芯片,你应该可以在/proc/bus/usb/device中看到如下内容: <p class="code">T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0<br> D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1<br> P: Vendor=0403 ProdID=6001 Rev= 2.00<br> S: Manufacturer=FTDI<br> S: Product=USB <-> Serial<br> C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr= 90mA<br> I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=serial<br> E: Ad=81(I) Atr=02(Bulk) MxPS= 64 Ivl= 0ms<br> E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl= 0ms<br> </p> 之后加入AVR微控制器并且装载一个能使LED灯闪烁的程序, 解开linuxusblcd软件包(在文章的末尾有下载),键入: <p class="code">make testload0</p> 编程下载线与USB转接器都应该插上。<br> 如果测试成功那么你可以肯定微控制器就可以工作了。<br> <br> 之后你就可以把所有软件下载到微控制器中: <p class="code">make load</p> 现在你就可以使用"ttydevinit /dev/ttyUSB0" 来初始化USB串行连接, 并且用"cat>/dev/ttyUSB0"来与设备对话。 <p class="code">ttydevinit /dev/ttyUSB0<br> cat > /dev/ttyUSB0<br> D=hello world<br> </p> 这将显示"Hello world"于显示屏上。详细的内容见2002年5月 号的文章。那篇文章里提到一个叫llp.pl的程序,具有通过LC D显示器上的两个按钮以交互式的方式与计算机对话的功能。 这里你也可使用它们。<br> <br> 这是一幅工作的图(当拍此照时,按钮并没有连上去,FT232BM在板的下面):<br> <center> <img src="../../common/images/article286/linuxusblcd_th.jpg" alt="usb lcd" width="400" height="481"><br> </center> <h2>可供选择的其他方案</h2> 虽然这里的电路很简单,但对初学者来说,由于必须具备焊 SMD芯片的技术而难以实现。如果你没有把握,考虑一下商 业化的成品。缺点是你通常不会得到像监视狗,LED和按钮等 额外的设备。你只得到LCD显示器。这些的价格也很合理。 带LCD的设备只需30欧元。<br> <br> 不幸的是,大部分的商业产品都有制造商的序列号,就算是基于ftdi芯片的产品。 这样的话内核不会识别它们,因为USB驱动程序依赖于这些数字.你需要修改内核, 重新编译。如果其他人已经更新了这些代码,也许后续的版本就支持新的芯片了。 <ul> <li>http://www.matrixorbital.com/ 他们使用ftdi 232BM,但有自己的产品 ID号。这个显示器叫做LK202-24-USB.<br> <br> </li> <li>http://www.usblcd.de/ 这个方案有他自己的内核驱动。 他是标准Linux内核的一部分,在任何的2.4.x版的内核下都 能正常运行,这可是一个好方案<br> <br> </li> <li>http://crystalfontz.com/ 他们的USB显示屏(632 和634) 用有自己的产品ID的FT232AM.<br> <br> </li> <li>http://www.cwlinux.com/eng/products/products_lcd.php 我也刚发现这个站点不久,他们有自己的 带键盘的LCD出售。不过这比本文的解决方案要贵两倍。 <br> <br> </li> </ul> <br clear="all"> <h2>参考文献:</h2> <ul> <li>所有<a href= "../../common/src/article286/">本文提到的软件和文档</a>的下载 (任何的linuxusblcd的更新都在这里显示)<br> <br> </li> <li>怎样对AVR微控制器编程<a href= "../March2002/article231.shtml">使用GCC对AVR微控制器编程,2002年3月的文章</a><br> <br> </li> <li>有关linuxlcdpanel的2002年5月文章。那篇文章中的Perl的脚本(llp.pl)也可以重用<a href="../May2002/article236.shtml">May 2002 article</a><br> <br> </li> <li>FTDI网站: <a href= "http://www.ftdichip.com">www.ftdichip.com</a><br> <br> </li> <li>FT232BM 的数据表(来自 http://www.ftdichip.com): <a href= "../../common/src/article286/ftdichip_ds232b11.pdf">ftdichip_ds232b11.pdf, 820Kb</a><br> <br> </li> <li>Eagle 的Linux版<a href= "http://www.cadsoftusa.com/">cadsoftusa.com</a><br> <br> </li> <li>Eagle 的FTDI芯片元件库(来自 http://www.elektronik-projekt.de) <a href= "../../common/src/article286/ftdi.lbr.gz">ftdi.lbr.gz</a><br> <br> </li> </ul> <!-- vim: set sw=2 ts=2 et tw=80: --> </body> </html>