usb鼠标制作调试记录
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鼠标制作调试记录的更多相关文章
- [未完] Linux 4.4 USB —— spiflash模拟usb大容量存储设备 调试记录 Gadget Mass Stroage
linux 4.4 USB Gadget Mass Stroage 硬件平台: licheepi nano衍生 调试记录 驱动信息 │ This driver is a replacement for ...
- Android USB Camera(1) : 调试记录【转】
转自:http://blog.csdn.net/eternity9255/article/details/53069037 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 前言 ...
- 【Linux开发】【Qt开发】嵌入式Qt程序使用触屏或USB鼠标方式
上文<嵌入式Qt开发-移植到ARM开发板 >介绍了Qt程序的移植,本文再说下如何使开发板Qt程序使用触摸屏或USB方式进行交互. 之前刚把一个qt程序移植到arm板上成功运行显示时就开心的 ...
- 学习Linux下s3c2440的USB鼠标驱动笔记
1.ARM-Linux下USB驱动程序开发1.1.1.linux下USB配置:*********(MassStorage:存储设备)********************************** ...
- T450设置插入USB鼠标时自动禁用触摸板
刚入手T450,打字时经常碰到触摸板,很是恼火,于是求助万能的度娘,找了卡饭基佬的教程,实测可行,大家可以试试.<win7下如何设置插入USB鼠标时自动禁用触摸板>,地址:www.kafa ...
- USB鼠标过一段时间后失灵问题的修复
现象: USB鼠标计算机锁屏一段时间后,不能动了,拔下来重新插上后,又恢复正常了. 原因: 这是系统默认USB电源管理造成的.一段时间不用后,自动关闭了USB电源. 解决方法: 1.进入设备管理器 在 ...
- synaptics驱动,插入USB鼠标禁用触控板注册表
Title:synaptics驱动,插入USB鼠标禁用触控板注册表 --2010-11-01 22:21 记得以前用过一个synaptics的驱动,自带有插入USB鼠标禁用触控板的选项的,有些没有自带 ...
- Linux usb子系统(一) _写一个usb鼠标驱动
USB总线是一种典型的热插拔的总线标准,由于其优异的性能几乎成为了当下大小设备中的标配. USB的驱动可以分为3类:SoC的USB控制器的驱动,主机端USB设备的驱动,设备上的USB Gadget驱动 ...
- USB鼠标键盘数据格式以及按键键值
鼠标发送给PC的数据每次4个字节 BYTE1 BYTE2 BYTE3 BYTE4 定义分别是: BYTE1 -- |--bit7: 1 表示 Y 坐标的变化量超出-256 ...
随机推荐
- 媳妇要转java开发,我该怎么办?
我是一名5年的java开发者,媳妇是一个5年的软件实施工程师,我们结婚快一年了,这几天她突然对我说,她想转java开发,让我辅导她学习java,我该怎么弄,我心底是不愿意她转开发的,毕竟她年龄也不小了 ...
- TCP是如何保证可靠传输的
TCP 协议如何保证可靠传输 一.综述 1.确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传. 2.数据校验 3.数据合理分片和排序: UDP:IP数据报大于1500字节 ...
- css布局 - 两栏自适应布局的几种实现方法汇总
这种两列布局的样式是我们在平时工作中非常常见的设计,同时也是面试中要求实现的高频题.很有必要掌握以备不时之需: 整理了几种实现方法,当然,风骚的代码不止这几种能实现,欢迎各位的补充. 方法汇总目录 简 ...
- js 注意
1.如果想要动态加清除浮动的代码,可以这样做: document.getElementById("mainBody").innerHTML += "<div sty ...
- react recompose
避免写嵌套 import { compose } from "recompose"; function Message(props) { const { classes } = p ...
- [转] - Weiflow——微博机器学习框架
Weiflow--微博机器学习框架 本文从开发效率(易用性).可扩展性.执行效率三个方面,介绍了微博机器学习框架Weiflow在微博的应用和最佳实践. 在上期<基于Spark的大规模机器学习在微 ...
- tuple的基本使用
常用如下所示: # 元祖,tuple-->不可变,但元祖里面的数据可以变化 # 当元祖只有一个元素时,需加’,‘,否则类型是<class 'int'> # tuple1 = (1) ...
- 洛谷P3384 【模板】树链剖分
题目描述 如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节点的值都加上z 操作2: 格式 ...
- Web开发——HTML基础(HTML表格 <table>)
参考: 表格属性参考:http://www.w3school.com.cn/tags/tag_table.asp 目录: 1.举例 2.表格 2.1 表格属性 2.2 表格的表头 2.3 表格中的空单 ...
- [redis] redis cli的学习记录
文档: https://redis.io/topics/rediscli help命令: The command can be used in two forms: . help @<categ ...