参考:
书籍,《圈圈教你玩USB》 
 C8051F单片机快速入门:http://www.waveshare.net/Left_Column/C8051F_Application_Notes.htm
 
《1》USB器件最底层的驱动编写;
 
C8051F320.H  C8051F320的定义
 
F32x_USB_Register.h
USB固件。包括所有的USB核心寄存器地址,寄存器访问宏,和寄存器的位掩码
 
USB.H 8051F系列专用 VID PID  USB_GetOutData()HID_SendData()

 
 
 《2》11个标准请求函数的编写;
 
USB_Request.H
此文件包含USB请求的定义,它是不相关的单片机类型,对应USB协议2.0
 
USB.c
端点状态、USB device状态、SETUP数据包
 
//功能:发送STALL信号,原因是收到了错误的条件或不希望的传输请求。
void Force_Stall(void)
 

//功能:获取状态,可能有三种请求:设备状态,接口状态,端点状态

void Get_Status(void)  
 

void Clear_Feature()                            
{

 
void Set_Address(void)   
 
void Get_Descriptor(void)   
 
void Get_Configuration(void)   
 
void Set_Configuration(void) 
 
void Get_Interface(void)     
 
void Set_Interface(void) 
 
void    USB_Enable( unsigned char sw)   
  《3》6个HID类请求函数的编写;(此6个函数很简单)
USB.c
 HID_SendData

  《4》USB中断部分的编写,可用查询或中断法,根据D12的中断寄存器的值,去调用11个标准请求函数;
 
调用11个标准请求函数,在 USB.c    void USB0_ISR(void) interrupt INTERRUPT_USB0 //Top-level USB ISR
只和51芯片有关。不用改动
这里根据接收到的值,来发送报告。
 
int main( void )
{
    INT8U btmp;
     Clock_Init( );
     P1 &= 0xF0; P1MDOUT |= 0x0F;
     P2 &= 0xF9; P2MDOUT |= 0x06;
     XBR1 |= ( 1<<6 );
     USB_Init( USB_ENABLE );
     EA = 1;
     while( 1 )
     {
         for( btmp = 0; btmp < 4; btmp ++ )
         {
             MouseData[btmp] = 0;
         }
         btmp = 1;
         switch( KeyScan( ) )     //K6 is not used
         {
             case K1_PRESS://left button
                 MouseData[0] = 1;
                 break;
             case K2_PRESS://wheel front
                 MouseData[3] = 2;
                 break;
             case K3_PRESS://Right press
                 MouseData[0] = 2;
                 break;
             case K4_PRESS://middle press
                 MouseData[0] = 4;
                 break;
             case K5_PRESS://wheel back
                 MouseData[3] = -2;
                 break;
             case K1_RELEASE:
             case K3_RELEASE:
             case K4_RELEASE:
                 break;
             default:
                 btmp = 0;
                 break;
         }
         if( btmp )
         {
             HID_SendData( (INT8U *)MouseData, 4 );
         }
     }
     return 0;
}

  《5》编写描述符;键盘要用到的描述符包括:1,设备描述符,2,配置描述符,3,接口描述符,4,HID描述符,5,端点描述符,6,报告描述符,7,字符串描述符。其中4,6为HID类专有的描述符,7是可选的。
USB_HID_Descriptor.c  
DeviceDesc
ReportDesc[]
String0Desc[S]等

USB.c不用动
USB.H 8051F系列专用 
VID PID
#define    EP1_PACKET_SIZE    8    //buffer size of endpoint 1 
 
USB_HID_Descriptor.h    
#define  REPORT_LENGTH  45 报告描述符长度
 
USB_HID_Descriptor.c  
描述符内容根据聚集体需要改

 
 
关键字:MCU选型 USB
参考PDF《C8051F320 在USB 设计中的应用》
1,选型

对于USB接口的设计,如非扩展之用,选用带有MCU的USB控制器当然是设计师们的首选,因为这样不仅可以大大简化硬件电路、减小外设体积,而且还可以提高产品的可靠性。

 
由于利用C8051F320该芯片进行设计时可以不需要任何外部元件(包括电阻和晶振),因而是小型USB应用的理想选择
 
2,C8051F320的主要特点,符合需求
     A:   用于程序空间和运行空间:内部集成有2304 Byte RAM和16k Byte的flash存储器
      全速的USB 2.0功能控制器
      内部集成了USB接口的数据收发器,设计中无需外部上拉电阻
    B:引脚功能
           D+、D-:USB电缆的USB  D+和USB D-连接端; 

VDD:2.7~3.6V片上电源输入端或片内电压调节器的3.3V输出端;
          REGIN:片内电压调节器的5V输入端

 
3,应用示例:
以C8051F320为核心设计了一个USB和CAN总线的接口转换模块
 
   3.1 USB 接口硬件电路设计:一是接口转换模块供电方式的选择,
由于整个模块的功率估计在3W左右,而USB总线的供电量只适合小功率模块的供电,最大也只有500mA,因此不能满足整个模块的安全供电,所以模块选择自供电模式
二是USB引脚的连接
 
    
 
3.2  固件的编写:
 
  主要目的是:当USB设备连接到主机上时,主机可以发现新设备,然后建立连接并完成数据传输任务,也就是能够让Windows正常检测和识别USB设备。因此在USB固件程序中,最重要的工作就是USB描述符的定义和USB传输中断的处理
USB2.0中的描述符:包括设备描述符、配置描述符、接口描述符、端点描述符等8种标准描述符和其它一些非标准描述符。
USB中断服务程序的编写: 
读取USB功能控制器的三个中断寄存器CMINT、IN1INT和OUT1INT来判断中断来源(USB复位中断、端点0
中断、端点1输入中断、端点2输出中断),然后根据不同的中断来源跳入相应的处理模块以进行不同的中断处理,并在处理完毕后返回
 
 
 

C8051逆向电阻屏:头儿拍脑袋说电阻屏IC好赚钱3块钱成本能卖20几块。,一个月不分昼夜逆向成功后头儿说电阻屏已经被市场淘汰请放弃治疗。的更多相关文章

  1. U盘插入电脑后图标是灰色的,打开提示“请将磁盘插入驱动器”

    问题描述: U盘插到win10电脑上后,U盘图标显示灰色,双击打开提示:请将磁盘插入驱动器,无法格式化,在U盘点右键/属性,显示为容量等为0. 解决办法如下: 1.首先要下载一个U盘芯片检测工具chi ...

  2. C#从入门到放弃治疗一:初探C#世界

    C#是一款高级的面向对象语言,运行于.NET framework之上的高级程序设计语言.其语言规范和,语法和java有着惊人的类似之处.所以如果你在学习C#之前有着java的基础,你将快速地入门.当然 ...

  3. 用Qt写了一个qq客户端,采用webqq协议,发出来和大家分享一下---大神请无视

    首先做以下声明: 本程序基于腾讯公司的webqq协议开发,所有相关版权归腾讯公司所有.此程序只用于技术交流和学习,不得用于其他方面. ---开发者:雨后星辰,转载请注明出处:http://www.cn ...

  4. NYOJ 994 海盗分金 逆向递推

    链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=994 题意: 有n个海盗劫得了窖藏的m块金子,并准备瓜分这些战利品.按照古老流传下来的分金法则 ...

  5. 安装loadrunner11,卸载360浏览器后提示“无效的应用程序路径!请检查应用程序是否存在!”

    我安装的loadrunner是11版本的,安装之前我的电脑上有安装了很多的浏览器,结果一开始录制脚本的时候,页面直接跳转到360浏览器上面了,但是显示正在录制的脚本为0个,于是就把360给卸载了,进行 ...

  6. 一个简单LINUX程序的逆向

    开始之前的准备: 反汇编:IDA 十六进制编辑器: Hexworkshop LINUX环境: KALI LINUX 调试: EDB (KALI自带的) 一个简单的动态追码, 大牛们就略过吧…… 用16 ...

  7. 一个图片上传的servlet,传到本地磁盘,要传到服务器请修改

    本来想写个controller,结果拦截器把图片拦住了,那就直接servlet public class UploadEamge extends HttpServlet{ /** * */ priva ...

  8. 【转】 怎么刷入BOOT.IMG(刷机后开机卡在第一屏的童鞋请注意)-------不错不错

    原文网址:http://bbs.gfan.com/android-3440837-1-1.html 之前呢,有好多机油问我关于刷机卡屏的问题,我解答了好多,但一一解答太费事了,在这里给大家发个贴吧.其 ...

  9. TP3.2 APP_DEBUG=false关闭调试后访问不了。页面错误!请稍后再试~

    在APP_DEBUG=true时是没问题的,在APP_DEBUG=false时才会出现找不到模板的问题.  经过排查可能是模板文件找不到问题,之前是这么写的. 改为这个就好了. ----------- ...

随机推荐

  1. 用struts2获取session、request、parmeter的方法

    package com.hanqi.action; import java.util.Map; import com.opensymphony.xwork2.ActionContext; public ...

  2. 记一次使用openrowset 的坑

    前几天被老大训斥连openrowset 都不会用,然后我就去看了文档,想测试一下栗子~ openrowset 的具体语法我就不贴了,戳这里:https://msdn.microsoft.com/zh- ...

  3. SQL Server中字符串转化为GUID的标量函数实现

        还是工作中遇到的需求,有时候和外部的系统对接,进行数据的核对功能,外部的系统有时候主键字段列数据类是UNIQUEIDENTIFER(GUID)类型的字符串格式,去除了GUID格式中的分隔符“- ...

  4. 讲讲js中的逻辑与(&&)以及逻辑或(||)

    前几天看到一个函数,百思不得其解,今天早上醒来看了本js的书,正好讲到操作符的用法,给大家分享下js中的&&,||,和我们用的其他的编程语言还是有点区别的. 直接上那个函数的代码: f ...

  5. linux 源码安装mysql 5.5

         今天在ubuntu和CentOS下,用源码反复安装了许多次mysql,趁还没忘记,赶紧记下来...      在ubuntu和CentOS下安装过程倒是没什么差别.      0.下载源码, ...

  6. docker-6 管理工具

    Shipyard 是一个基于 Web 的 Docker 管理工具,支持多 host,可以把多个 Docker host 上的 containers 统一管理:可以查看 images,甚至 build ...

  7. Android开发中的Json字符串与复杂的嵌套对象互转。

    Gson 可能是大家都觉得比较简单吧.我发现用JSONObject和网上下载的JSONHelper类使用起来很无语,只能解析简单的单层对象,如果有嵌套的就不能直转转成可用对象了.所以网上找了一会儿,发 ...

  8. hadoop2.6.2分布式环境搭建

    1.准备三台机器,机器名是:master.slave01.slave02 1.1 最小化安装centos6.5 1.2 安装ssh,yum -y install openssh-clients(这一步 ...

  9. C# ADO.NET编写简单的图书馆管理软件

    使用软件: Microsoft SQL Server 2012 Microsoft Visual Studio 2012 本文地址: http://www.cnblogs.com/go2bed/ 参考 ...

  10. 学习OpenStack之(5):在Mac上部署Juno版本OpenStack 四节点环境

    0. 前沿 经过一段时间的折腾,终于在自己的Mac上装好了Juno版本的四节点环境.这过程中,花了大量的时间,碰到了许多问题,学到不少知识,折腾过不少其实不需要折腾的东西,本文试着来对这过程做个总结. ...