在MTK上使用GPIO+软件来实现USB功能(7日已更新)

[复制链接]
5832|11
 楼主| 李蓝蓝 发表于 2007-12-1 14:23 | 显示全部楼层 |阅读模式
本人是手机开发软件工程师,但是对这个课题是菜鸟,一个是因为之前对USB的协议基本不了解,一个是之前没有做过MTK的平台;但是小气的老板为了想省掉几毛的美金,就把这个任务交给我了;<br /><br />本人打算从今天开始在这里把我对这个整个开发过程给记录下来,包括系统设计和原理实现,以及一些问题的解决,希望大家在这个过程中批评指正,多给些意见,谢谢先;<br /><br />2007-12-1&nbsp;16:00:43&nbsp;李蓝蓝<br />========================================================<br />谢谢大家的关注先,我还在看协议和构思整体软件架构阶段,所以目前还拿不出什么东西,我尽量每晚到这里更新一些已解或未解的问题,也肯定大家批评指正;<br /><br />另回复6#朋友:USB数据传输中,所有的包都从同步字段开始,同步字段是用于同步的机制,我将在接收同步字段时调整数据位接收的频率为1.4775~1.5225M之间;<br /><br />另回复7#朋友:程序所占存储器的价钱要超过省下的成本?不知你是怎么算的,哈哈<br /><br />2007-12-2&nbsp;23:20:40&nbsp;李蓝蓝<br /><br />========================================================<br />前几天比较忙(做的另外一个项目在收尾),然后USB还在看协议,就没有更新,谢谢大家的跟贴先,特别谢谢圈圈兄(请允许我这样称呼);<br />老板也是看展讯使用GPIO口模拟做出来,才让我做,当然展讯的做法看不到,感觉他是有用硬件的BUF。不管老板怎么想,我就当是自己学习吧,反正估计我在这里也呆不长了,哈哈<br />
 楼主| 李蓝蓝 发表于 2007-12-1 14:24 | 显示全部楼层

先放放我写文档的部分内容吧

前言<br />&nbsp;&nbsp;&nbsp;&nbsp;该文档用于描述在MTK6223平台自主开发USB的方案,&nbsp;其实明确的说是U盘功能,但是此方案的重点和难点是而不借助任何的USB接收或者处理芯片,而只基于GPIO口加软件来完成USB设备的开发。<br />&nbsp;&nbsp;&nbsp;&nbsp;USB有3种信号的传送模式,其中全速设备的信号比特率定为480&nbsp;Mbps,中速设备的信号比特率定为12&nbsp;Mbps,低速设备的信号比特率定为1.5&nbsp;Mbps。首先要确定的是,我们将设计的是低速设备。<br />该文档主要参考了USB1.1的规范,并根据MTK的平台,搭建了USB设备软件的架构,包括接口编程设计,总线管理,数据帧的解析,事务处理,Mass&nbsp;storige实现;<br />&nbsp;&nbsp;&nbsp;&nbsp;
 楼主| 李蓝蓝 发表于 2007-12-1 14:25 | 显示全部楼层

此楼用于放一些未解的问题(怎么大家也不发表一下意见呀

可能我这个菜鸟问的问题比较没水平,还请别笑,请众多高手给于意见;<br /><br />1,USB是一种总线通信,那从这个角度来说,如果两个USB设备同时接在主机上,那USB设备1是不是也会收到主机发送给USB设备2的数据呢?<br />但是我在USB1.1的协议里边看到这句话:每个USB设备有一个唯一的地址,这个地址是在设备连上主机时,由主机分配的,而设备中的每个端点在设备内部有唯一的端点号。这个端点号是在设备设计时被给定的。USB的数据传送是以通道的方式进行,即以主机软件和一个USB设备的指定端点之间进行;<br /><br />2007-12-2&nbsp;23:29:25&nbsp;李蓝蓝<br />=========================================================<br />2,关于USB设备的连接与断开检测<br />When&nbsp;no&nbsp;function&nbsp;is&nbsp;attached&nbsp;to&nbsp;the&nbsp;downstream&nbsp;port&nbsp;of&nbsp;the&nbsp;host&nbsp;or&nbsp;hub,&nbsp;the&nbsp;pull-down&nbsp;resistors&nbsp;present&nbsp;there&nbsp;will&nbsp;cause&nbsp;both&nbsp;D+&nbsp;and&nbsp;D-&nbsp;to&nbsp;be&nbsp;pulled&nbsp;below&nbsp;the&nbsp;single-ended&nbsp;low&nbsp;threshold&nbsp;of&nbsp;the&nbsp;host&nbsp;or&nbsp;hub&nbsp;portwhen&nbsp;that&nbsp;port&nbsp;is&nbsp;not&nbsp;being&nbsp;driven&nbsp;by&nbsp;the&nbsp;hub.&nbsp;&nbsp;This&nbsp;creates&nbsp;an&nbsp;SE0&nbsp;state&nbsp;on&nbsp;the&nbsp;downstream&nbsp;port.<br />A&nbsp;disconnect&nbsp;condition&nbsp;(TDDIS)&nbsp;is&nbsp;indicated&nbsp;if&nbsp;the&nbsp;host&nbsp;or&nbsp;hub&nbsp;is&nbsp;not&nbsp;driving&nbsp;the&nbsp;data&nbsp;lines&nbsp;and&nbsp;an&nbsp;SE0&nbsp;persists<br />on&nbsp;a&nbsp;downstream&nbsp;port&nbsp;for&nbsp;more&nbsp;than&nbsp;2.5s。<br />A&nbsp;connect&nbsp;condition&nbsp;(TDCNN)&nbsp;will&nbsp;be&nbsp;detected&nbsp;when&nbsp;the&nbsp;hub&nbsp;detects&nbsp;that&nbsp;one&nbsp;of&nbsp;the&nbsp;data&nbsp;lines&nbsp;is&nbsp;pulled&nbsp;above&nbsp;its&nbsp;VIH&nbsp;threshold&nbsp;for&nbsp;more&nbsp;than&nbsp;2.5s。<br />图贴不上来!!<br />这里不是很明白它的硬件原理,上面提到的the&nbsp;pull-down&nbsp;resistors应该是指Rpd而不是Rpu吧,此时Rpd电阻怎么使D+和D-上的电压低于主机或集线器端口的单终端电压呢?还有对低速设备连接时,D-的电压是怎么拉到2.0V的?<br /><br />
 楼主| 李蓝蓝 发表于 2007-12-1 16:02 | 显示全部楼层

此楼用于保存已解问题,若高手认为解错,请指正

1,关于MTK平台怎么发送数据来匹配PC的USB接收?<br />//由于低速数据发送率为1.50Mb/s,低速功能设备所允许的误差为±1.5%(15000ppm)。而MTK平台的基础频率为13M,假设以4倍频率运行,为52M/X在1.4775~1.5225之间,X的值为35,因此表明,我们必须在35个时钟周期发出一个bit的数据;<br />
whereis 发表于 2007-12-1 22:55 | 显示全部楼层

.

占个位置,看你怎么死的。<br />
eastbest 发表于 2007-12-1 23:04 | 显示全部楼层

用GPIO模拟有点难度

主要是接收数据方面.建议楼主先用CPU来接收一个SOF,看看CPU把它解析出来要花多少时间.
平常人 发表于 2007-12-1 23:20 | 显示全部楼层

恐怕程序所占存储器的价钱要超过省下的成本

软件模拟USB接口,我以为只有学生做练习玩一玩就罢了,没想到还有人当真,要做到产品里去。<br /><br />拭目以待,静候佳音。做出来或做不出来,还请楼主通知大家一声,这样各位也长点见识,免得又有人走弯路。
icecut 发表于 2007-12-2 15:22 | 显示全部楼层

占座

反正不推荐,难度比较大,等于自己写个软核了。<br />先顶一个吧。估计你的设备投资可以和降低的成本媲美了
dragon_hn 发表于 2007-12-4 18:54 | 显示全部楼层

我来泼冷水

建议楼主马上放弃,如果老板执意,那就只有建议楼主马上辞职了.<br /><br />难点:CPU响应速度要求快.如果是USB1.0,要求CPU至少有1.5MHz的响应速度,如果是USB1.1,要求CPU至少有12MHz的响应速度,当然别期待在OS上跑了,估计最好是裸奔.上述速度还不包括CRC和NRZ等,实际要去比这高得多<br /><br />
computer00 发表于 2007-12-4 19:18 | 显示全部楼层

网上有现成的在AVR MEGA8下用软件模拟的USB做的下载线

源代码也有,就我目前的使用情况来看,还是挺稳定的。<br /><br /><br />是低速设备,AVR跑在12MPIS。
zhongyb 发表于 2007-12-5 16:51 | 显示全部楼层

能搞定的话,估计你自己也难相信这是真的!

是模拟HOST还是DEVICE功能?真正能搞定的话,你可以做USB的IP了。还是花点钱加个USB芯片吧?你去花几个月时间摸索,最后把自己搞死,还不只浪费那几个钱,做项目和业余爱好其实还是有较大的差距。
aweyfan 发表于 2007-12-5 17:01 | 显示全部楼层

这是完全可行的,已经有成功案例了

你们的同行展讯已经实现了,mtk应该也可以吧<br /><br />其实很多手机的usb都是io口模拟的,我怀疑连西门子的都是
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部