2010-07-26 20:07:00

制作调试过程
1,串口通信硬件设计。焊接了串口通信电路实验。由于我的usb转串口线是不能配max232的。而是要配一个反向器。于是自己焊接了74ls00。并且把圈圈电路板通过飞线改了下。至此,串口通信硬件完成。
2,串口通信软硬件调试。改了改之前的串口通信程序。并且下载测试。很顺利的通过串口通信测试。
3,做了一些51外围的led及按键的软硬件测试。很顺利的通过了。
4,D12的硬件焊接。东拼西凑的把电路板连接上了,买了TSSOP的D12,开始焊接引脚间距为0.65mm的贴片ic。运用拖拉方法,我成功地焊接了D12。接着从我家的废主板上插了几个电阻焊接了下。还在淘宝买了晶振和配晶振的贴片电容。其他的基本都是用其他板子通过杜邦线相连。能省略元件的就省略。
5,下载D12的测试程序。读D12的id。结果不成功。先检查硬件,原来漏焊了一个电阻。查了一下,这个电阻一定要焊接的。于是焊完电阻后,再次测试,ok。真是兴奋啊。
6,下载usbMouse程序调试。结果不成功,一会就挂起了。那么就开始一段一段调试吧。结果发现,单片机读出的数据和usb主机发送的数据不符。多了很多位。这就奇怪了。为什么会这样呢?
    a,难道数据延时,单片机读的太快了。那么我就延时后再读,可结果一样。与延时没关系。
    b,难道是usb延长线的延时,导致d12多接收了些0x00?于是通过修改程序,不去读前面的哪些个0x00,程序就可以继续运行一点。但是还是有问题,这是我人为的修改程序不读前7位数据,才能使usb和d12在正常通信,但是实际他们的通信是不正常的。print显示D12接收到usb主机的请求,也返回了枚举数据,但是USB主机并没收到,又挂起了。
    c,难道是D12的缓冲区发送接收数据有问题?保险起见,我不连D+和D-,我让单片机发数据到D12的缓冲区,并从缓冲区再读取数据到单片机。问题终于出现了。写入的数据和读出的数据不相符。并且很明显是一条P0.0位的数据线有问题。终于有眉目了。P0.0输出的数据总是为高。那么我先检查硬件原理及连线。硬件没问题。天呢?那么他为什么总是拉不低呢?
    d,用示波器看看此位与其他位的波形吧,终于看出,此位拉低时,电压为1.76v,再也低不了。这就是此位总是显示1的原因。但是为什么电压总是拉不下来,而其它位的电压能拉下来呢?是不是焊接的排阻没焊牢。但是查了下,外围硬件焊接及杜邦线连接都是好的。测了下不运行程序与运行程序时,他们各个引脚连接的电阻阻值。发现,一运行程序,则P0.0连接的电阻的阻值就比其他位要高。但是不运行程序时,阻值则一样。怎么会这样?
    e,突然有种感觉,c51芯片坏了,还好,我上次在淘宝买了2片,换了一片,大功告成。果然是c51芯片引脚有问题。
7,串口调试助手成功的显示了从usb主机发送过来的设备描述符请求。并且d12也有反映,向usb主机返回数据。但是usb主机没收到,挂起了。为什么呢?我怀疑是这根便宜的usb延长线的问题。那该怎么查啊!另外还有就是单片机把数据发给d12,d12再通过usb延长线给usb主机。那么也有可能是单片机数据没写入d12,导致设备没返回给usb主机数据。
8,调试单片机与d12之间的数据收发。根据d12缓冲区的数据格式,第一个字节为保留字,数据为0。第二个字节为数据长度。第三个字节为真正的数据。通过修改程序,多次调试,查看数据变化后,发现。一个字节为保留字,但是单片机不能向它写0x00,否则d12会自己填补第一个字节,并且把0x00作为第二个字节。难道规格书上描述错了。反正我这样改下程序,枚举过程就能读能写了。但是数据还是不稳定。有些位拉不高等问题。
9,接着再调试吧,没想到买的一个usb延长线断了。没办法,买根好点的吧,可能数据传输不稳定的现象就能解决。期待明天的usb线。
10,usb线到了。接着我把之前调试比较成功的hex文件重新烧进c51,结果发现很不稳定,一会好一会不好。尝试了好几次,决定data线不用杜邦线连接,还是把40pin排针插了,然后焊接40pin的ic座,还好上次多买了一个,现在派上用了。如何拆20pin排针?
11,网上查了下,20pin的直插排针,可以把塑料先插下,然后把排针一个个焊下。于是就用这个方法,花了点时间,终于搞定。但是孔都不焊锡堵上了。还要一个个把孔给搞出来吗?
12,尝试了下,好难搞啊,算了,40ic座就直接焊在top面。感谢圈圈板子设计的好,top和bottom都能焊接。顺利焊接完40ic座,接着把晶振和晶振电容也焊上了。查看完其他连接线。连到电脑,按下复位键后,呵呵呵~主机usb识别出了设备。此次调试宣告成功。
 
   很有成就感,不经一番彻骨寒 哪来梅花扑鼻香。
 
   调试总结:
    
   曾经有4个高级工程师和我说过,编编小程序,很快就可以查出问题。这次我用上了自己编写的验证测试程序,发现在调试排查过程中真的很管用,我有潜质去做警方的侦查员,呵呵。

发现的重大问题就是d12芯片的写缓冲区的第一个字节不能写0,虽然规格书及圈圈的程序上都是写0。而我写0或者说直接烧圈圈的hex文件就是有问题了。

usb鼠标制作调试记录的更多相关文章

  1. [未完] Linux 4.4 USB —— spiflash模拟usb大容量存储设备 调试记录 Gadget Mass Stroage

    linux 4.4 USB Gadget Mass Stroage 硬件平台: licheepi nano衍生 调试记录 驱动信息 │ This driver is a replacement for ...

  2. Android USB Camera(1) : 调试记录【转】

    转自:http://blog.csdn.net/eternity9255/article/details/53069037 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 前言 ...

  3. 【Linux开发】【Qt开发】嵌入式Qt程序使用触屏或USB鼠标方式

    上文<嵌入式Qt开发-移植到ARM开发板 >介绍了Qt程序的移植,本文再说下如何使开发板Qt程序使用触摸屏或USB方式进行交互. 之前刚把一个qt程序移植到arm板上成功运行显示时就开心的 ...

  4. 学习Linux下s3c2440的USB鼠标驱动笔记

    1.ARM-Linux下USB驱动程序开发1.1.1.linux下USB配置:*********(MassStorage:存储设备)********************************** ...

  5. T450设置插入USB鼠标时自动禁用触摸板

    刚入手T450,打字时经常碰到触摸板,很是恼火,于是求助万能的度娘,找了卡饭基佬的教程,实测可行,大家可以试试.<win7下如何设置插入USB鼠标时自动禁用触摸板>,地址:www.kafa ...

  6. USB鼠标过一段时间后失灵问题的修复

    现象: USB鼠标计算机锁屏一段时间后,不能动了,拔下来重新插上后,又恢复正常了. 原因: 这是系统默认USB电源管理造成的.一段时间不用后,自动关闭了USB电源. 解决方法: 1.进入设备管理器 在 ...

  7. synaptics驱动,插入USB鼠标禁用触控板注册表

    Title:synaptics驱动,插入USB鼠标禁用触控板注册表 --2010-11-01 22:21 记得以前用过一个synaptics的驱动,自带有插入USB鼠标禁用触控板的选项的,有些没有自带 ...

  8. Linux usb子系统(一) _写一个usb鼠标驱动

    USB总线是一种典型的热插拔的总线标准,由于其优异的性能几乎成为了当下大小设备中的标配. USB的驱动可以分为3类:SoC的USB控制器的驱动,主机端USB设备的驱动,设备上的USB Gadget驱动 ...

  9. USB鼠标键盘数据格式以及按键键值

    鼠标发送给PC的数据每次4个字节 BYTE1 BYTE2 BYTE3 BYTE4 定义分别是: BYTE1 --        |--bit7:   1   表示   Y   坐标的变化量超出-256 ...

随机推荐

  1. laravel5.8笔记六:公共函数和常量设置

    公共函数 创建bootstrap/common.php <?php // 发送短信 function sendSMS($mobile){ } // 发送邮件 function sendMail( ...

  2. 【静默】Oracle各类响应文件何在?

    [静默]Oracle各类响应文件何在? --root用户下执行: find -name *.rsp  / 1.创建数据库的响应文件:$ORACLE_HOME/assistants/dbca/dbca. ...

  3. java如何对List集合中的元素进行排序(请收藏)

    在java开发中有时候我们需要对List集合中的元素按照一定的规则进行排序,比如说有个Person的集合,我们要根据Person的age属性进行排序输出,这就需要用到Java中提供的对集合进行操作的工 ...

  4. windows下设置PHP环境变量

    1.找到“高级系统设置”(二选一的方法找到环境变量) ① 我的电脑-属性-高级-环境变量 ②win8,10 直接在搜索框搜 “查看高级系统设置”-环境变量 2.找到变量"Path" ...

  5. SQL开头quoted和ansiNULL

    “QUOTED_IDENTIFIER” 当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字必须由单引号分隔. 当 SET QUOTED_IDENTIFIER ...

  6. oracle 子查询中null的问题(in 和 not in)

    这里的in后面的句子可以理解为or拼接,简单举例即 in (9566,9839,null)可以等价于mgr=9566 or mgr=9839 or mgr=null, not in (9566,983 ...

  7. C# IO流的操作(二)

    文件在操作系统中是以二进制(01)的形式保存到磁盘上的,在C#程序当中,我们可以通过读取流将文件读取到byte[]当中(读到内存中),也可以通过写入流将byte[]写入文件(保存到磁盘上).下面将演示 ...

  8. windows系统关闭某个端口的服务(以443端口为例子)

    1.查看443被什么服务占用 netstat -ano | findstr 443 查看到443端口被pid为5140的服务占用了 2.去到任务管理器->任务 找到PID为5140的服务,然后停 ...

  9. poj2251_kuagnbin带你飞专题一

    Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 32684   Accepted: 12529 ...

  10. Linux 的基本操作(文件与目录管理)

    文件与目录管理 在linux中什么是一个文件的路径呢,说白了就是这个文件存在的地方,例如在上一章提到的/root/.ssh/authorized_keys 这就是一个文件的路径.如果你告诉系统这个文件 ...