打印

MT6223D平台实现软USB研究

[复制链接]
2938|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huzixian|  楼主 | 2010-4-14 13:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
mt, USB, gp, IO, pi
Dear All,
    最近小弟在研究MT6223D上实现软USB功能。把这两天的研究心得体会写出来和大家一起分享。
    首先使用软USB后必须要屏蔽RF功能即把RF Sleep掉,关闭一起不必要的器件。
    第二进入软USB模式后在也无法退出到正常模式,即软USB应该是一个While(1){}  +  中断模式,我想很多在裸机上开发过单板的工程师都知道这种模式吧。
    第三GPIO27即可配成EINT5也可配成GPIO模式,理解这一点很重要,要明白什么时候配成EINT5,什么时候配成GPIO模式。
    第四USB是差分信号,GPIO28也可侦听PC发过来的数据包。
    第五要明白PC端接收手机发过来的数据,GPIO27\\GPIO28应该是何种信号,PC端才能准确无误的识别。
    第六要能准确解析及发送USB协议数据包。建议使用一个精度很高的Timer,一个最小时钟到是则从GPIO27\\GPIO28读取或发送一个位。这个Timer应该使用硬件Timer,MTK平台共有三个Timer,GPT这个Timer暂未使用,可以使用GPT。
    第七要不断的喂狗。
    第八到USB拔出时要SHUTDOWN SYSTEM.
    现在仅仅是初步的思考,请大家多提宝贵意见,谢谢。

相关帖子

沙发
huzixian|  楼主 | 2010-4-14 13:20 | 只看该作者
还好了一条:
     第九为了加快运行速度,建议把代码及数据全部拷到MT6223D片内SRAM里运行。

使用特权

评论回复
板凳
yoyowodeai| | 2010-4-14 13:21 | 只看该作者
好贴,继续探讨撒,
问下楼主,是自己写的框架还是别人的呢

使用特权

评论回复
地板
linux1| | 2010-4-14 13:21 | 只看该作者
**别人的obj,自己重写。

使用特权

评论回复
5
6019赵文| | 2010-4-14 13:22 | 只看该作者
obj怎么破啊,lib能破吗?

使用特权

评论回复
6
huzixian|  楼主 | 2010-4-14 13:23 | 只看该作者
IDA可破.



还有指导性的文档可学习.
一、U盘基本工作原理

通用串行总线(Universal serial Bus)是一种快速灵活的接口,

当一个USB设备插入主机时,由于USB设备硬件本身的原因,它会使USB总线的数据信号线的电平发生变化,而主机会经常扫描USB总线。当发现电平有变化时,它即知道有设备插入。

当USB设备刚插入主机时,USB设备它本身会初始化,并认为地址是0。也就是没有分配地址,这有点象刚进校的大学生没有学号一样。

正如有一个陌生人闯入时我们会问“你是什么人”一样,当一个USB设备插入主机时,,它也会问:“你是什么设备”。并接着会问,你使用什么通信协议等等。当这一些信息都被主机知道后,主机与USB设备之间就可以根据它们之间的约定进行通信。

USB的这些信息是通过描述符实现的,USB描述符主要包括:设备描述符,配置描述符,

接口描述符,端点描述符等。当一个U盘括入主机时,你立即会发现你的资源管理器里多了一个可移动磁盘,在Win2000下你还可以进一步从主机上知道它是爱国者或是朗科的。这里就有两个问题,首先主机为什么知道插入的是移动磁盘,而不是键盘或打印机等等呢?另外在Win2000下为什么还知道是哪个公司生产的呢?其实这很简单,当USB设备插入主机时,主机首先就会要求对方把它的设备描述符传回来,这些设备描述符中就包含了设备类型及制造商信息。又如传输所采用的协议是由接口描述符确定,而传输的方式则包含在端点描述符中。

USB设备分很多类:显示类,通信设备类,音频设备类,人机接口类,海量存储类.特定类的设备又可分为若干子类,每一个设备可以有一个或多个配置,配置用于定义设备的功能。配置是接口的集合,接口是指设备中哪些硬件与USB交换信息。每个与USB交换信息的硬件是一个端点。因些,接口是端点的集合。

U盘应属于海量存储类。

USB海量存储设备又包括通用海量存储子类,CDROM,Tape等,U盘实际上属于海量存储类中通用海量存储子类。通用海量存储设备实现上是基于块/扇区存储的设备。

USB组织定义了海量存储设备类的规范,这个类规范包括4个独立的子类规范。主要是指USB总线上的传输方法与存储介质的操作命令。

海量存储设备只支持一个接口,即数据接口,此接口有三个端点Bulk input ,Bulk output,中断端点

这种设备的接口采用SCSI-2的直接存取设备协议,USB设备上的介质使用与SCSI-2以相同的逻辑块方式寻址
二、 Bulk-Only传输协议

当一个U盘插入主机以后,主机会要求USB设备传回它们的描述符,当主机得到这些描述符后,即完成了设备的配置。识别出USB设备是一个支持Bulk-Only传输协议的海量存储设备。这时应可进行Bulk-Only传输方式。在此方式下USB与设备之间的数据传输都是通过Bulk-In和Bulk-Out来实现的。
在这种传输方式下,有三种类型数据在USB和设备传送,它们是命令块包(CBW),命令执行状态包(CSW)和普通数据包。CBW是主机发往设备的命令。格式如下:
其中dCBWSignature的值为43425355h,表示当前发送的是一个CBW。

DCBWTag:以后再讲。

DCBWDataTransferLength:表示这次CBW要传送数据长度。

BmCBWFlags:表示本次CBW是读数据还是写数所

BBWCBLength:表示命令的长度。

CBWCB:表示本次命令内容。也即是SCSI命令。

当设备从主机收到CBW块以后,它会把SCSI命令从CBW中分离出来,然后根据要求执行,执行的结果又以CSW的形式发给主机。

CSW的格式如下:
其中dCSWSignature的值为53425355h,表示当前发送的是一个CSW。

DCSWTag:必须和CBW中dCBWTag一样。

DCSWDataResidue:还要传送的数据。

BCSWStatue:命令执行状态,命令正确执行时,为0。








如果有人研究出来了,别忘记告诉我.

使用特权

评论回复
7
米其林r| | 2010-4-14 13:23 | 只看该作者
一个问题:传输的时候总线上的比特率是多少?是不是由timer INT来控制的?是不是严格按照usb1.1或2.0规范来的,我的理解如果比特率不准的话是不可能和host通讯的.不知道你怎么做的
另外,有没有数据的检测和校验机制。

使用特权

评论回复
8
手写识别| | 2010-4-14 13:24 | 只看该作者
DP,DM是差分输出(入)的,怎么用GPIO实现这个差分?

使用特权

评论回复
9
yoyowodeai| | 2010-4-14 13:24 | 只看该作者
usb 执行代码

使用特权

评论回复
10
无语凝咽| | 2010-4-14 13:34 | 只看该作者
可是细节还是没有回答,大概流程谁都明白

使用特权

评论回复
11
米其林r| | 2010-4-14 13:34 | 只看该作者
第六要能准确解析及发送USB协议数据包。建议使用一个精度很高的Timer,一个最小时钟到是则从GPIO27\\\\GPIO28读取或发送一个位。这个Timer应该使用硬件Timer,MTK平台共有三个Timer,GPT这个Timer暂未使用,可以使用GPT。


------这一步关于Timer的说法不当。1.5M 的速率意味着0.6us左右一位,而GPT的时钟源是32K,最小定时分辩率也要1/32 毫秒,精度远远不够

使用特权

评论回复
12
VERY0| | 2010-4-14 21:36 | 只看该作者
模拟1.5M的还是  12M的USB?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

262

主题

1534

帖子

2

粉丝