初涉USB,初学者USB入门总结4,USB通讯设备快速开发

2024-03-15 08:18

本文主要是介绍初涉USB,初学者USB入门总结4,USB通讯设备快速开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

经过上述三节的描述,对USB应该已经有了初步的认识,其中具体的协议(比如各个描述符的定义什么的)这里不做描述了,网上一搜一大堆。下面我以一个实例来详细说明快速开发USB设备的步骤,

一,设定规划

凡事预则立,不预则费,所以开发一个小小的USB也要稍微规划一下,比如想象要实现什么功能,传输的数据协议什么的。

二,固件编程,

固件编程说白了就是写单片机程序,要实现USB一般可以使用带USB功能的单片机,再个就是加一个专用的USB芯片。这里以内部集成USB功能单片机为例

固件的USB开发一般就是先使能USB,使能USB时钟,使能各个USB控制中断(挂起,复位,标准请求,写入,写出等)然后USB就能正常工作了,这时候不如不写别的东西,电脑就可以检测出有USB设备插入了,具体的反应是在设备管理器里会发现闪了一下说明发现了新的USB设备,接下来电脑会发送各种标准请求,因为这个时候你的程序还没写完整,对这些请求不会有反应,所以电脑不可能识别出是什么东西。

接下来的工作就是在中断中响应电脑传来的各种标准请求。当必要的请求都被正确的响应的话,这个时候如果电脑里有正确的驱动,电脑就会去加载这个驱动,如果是第一次插入这个设备,还要把驱动安装一下,然后设备就进入正常工作了,电脑会显示“这个USB已经成功安装并可以应用了”。

这里捎带着说一下端点(endpoint)的概念,一般一个USB设备都会有数个端点,端点就是一个数据缓冲控制区(FIFO),每个缓冲区相当于有一个出口一个进口的池子,数据通过进口进入到池子,然后你再在固件里去用这些数据。固件往电脑写数据,也是把数据先放到池子里,然后打开出口,就可以干自己的事情,不用一个个的把数据发出了,池子的出口自动把数据流出。

一般的端口0是用来做标准请求响应用的,也就是在枚举阶段用到。我一般把端口1定义为出(OUT),端口2定义为入(IN)(注意,这个OUTIN是相对与电脑的,也就是说OUT是数据从电脑出去到设备,IN是设备的数据进入电脑)。这些定义也是在标准请求中去告诉电脑的。

接下来就可以实现与电脑的通讯了,你把数据放到相应的池子里就行了。下面就可以自己定义通讯的数据格式了。比如控制开发板上的8LED的第一个灯亮,那么上位机发送数据0x550x010x800xaa。我们就可以规定第一个数据是启示位,遇到这个表明开始一次控制指令,0x01表示这个是控制灯亮暗的指令,0x80表示LED的控制数据,最高位是1,表示第一个亮,其他位是0,表示都暗。最后一个数据是0xaa,表示这是结束。其实所谓的数据协议不过就是自己定义的一套让通讯双方都能正确理解对方的数据格式。电脑比较是电脑,什么都要规定好了,它才能正确的工作。

二驱动程序

    对于快速开发用Driverstudio就可以了,我先装了VC6.0,然后装了DDK2600,最后装了Driverstudio,网上有说这个顺序不容易出问题,我也没时间去试别的顺序会出怎么样的特效,姑且不管他是否在忽悠,先这样按了没坏处。

    我一开始比较新潮的装了DriverStudio3.2版本,然后按网上的方法破解了,生成了驱动是能打开设备,但是就是传输不了数据,搞了两天还是不行,后来想到是不是3.2版本太新了?或者破解没完整?然后卸载了3.2装了3.1,果然可以了,真不知道是Compuware做了手脚故意玩我还是本人愚笨弄错了哪里。

驱动生成的步骤可以在百度,Google里搜“10分钟完成一个USB驱动程序”能出来一

 

 

大堆,要是你嫌搜索麻烦就直接点这个算了http://www.4oa.com/Article/html/6/33/482/2005/17317.html按那个步骤操作就可以了,根据向导操作完了以后,VC就会出来一个驱动程序框架了,如果你在这个时候编译一下就可你会碰到很多问题,我的操作是这样的。首先把DDK的库编译一下,操作网上有,网上有云:

1.启动Visual C++

2.选择菜单 File|Open Workspace。打开位于DriverStudio/DriverWorks/Source/vdwlibs.dsw的工作空间文件。

3.选择菜单 Build|Batch Build,在弹出的对话框中选择你想编译的库。

4.点击Build编译你选择的库。

然后在VCDriverstudio的工具条点击“change environment variables”,在第一个选型卡把DDK的路径选上,我的是C:\WINDDK\2600。然后点OK,接下来点DriverStudio工具条的编译,就可以了,如果你还是碰到问题,你可以把VC显示的错误复制到百度。

这篇关于初涉USB,初学者USB入门总结4,USB通讯设备快速开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/811333

相关文章

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版