<!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&ouml;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(&gt;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 &lt;-&gt; 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 &gt; /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>