fwzfwz1
驱动中牛
驱动中牛
  • 注册日期2002-11-01
  • 最后登录2007-06-01
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
阅读:1689回复:13

50分放送(回帖就有分)

楼主#
更多 发布于:2003-12-26 12:17
本人刚刚接触USB,对很多概念还不清楚。请高手赐教:
假设我的USB设备连了一个RAM,那么如何读取这个RAM的内容?
对于PCI设备可以将这个RAM映射到计算机的存储器或I/O空间,但是USB表示没有进行空间映射,在这种情况下,如何读取RAM呢?
好像是通过管道实现的,但是具体怎么实现呢,其次有读取几个字节呢,读取的数据又放到那里呢?

最新喜欢:

bearsammibearsa...
有了驱动,人才有了力量。
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-12-26 12:25
用户被禁言,该主题自动屏蔽!
fwzfwz1
驱动中牛
驱动中牛
  • 注册日期2002-11-01
  • 最后登录2007-06-01
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-12-26 15:41
我就是想知道RAM-CPU-主机之间数据传输的机制?
是不是CPU将读取的RAM数据放到端点的FIFO上,并在相应的寄存器中设置数据的长度就可以了。然后,主机驱动程序从端点的FIFO中读取一定该长度的数据。
不知理解的对不对,请高手赐教!
有了驱动,人才有了力量。
truelygo
驱动牛犊
驱动牛犊
  • 注册日期2003-11-25
  • 最后登录2007-07-11
  • 粉丝0
  • 关注0
  • 积分35分
  • 威望4点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-12-26 16:30
    原始数据应该在有USB接口的器件中,通过USB通信,将数据传给USB HOST,然后由HOST将数据与专门的MCU,后者将缓存中的数据传递给RAM,这样才完成了数据的传送,如果是要送给FLASH存储的话,应该将一定的数据量存入到RAM中,然后按扇区的单位一次写到FLASH的指定位置中。
    所以,具体的往RAM中写是由MCU完成的,且USB只负责通讯,并不参与数据的管理。
认真学习-认真工作-认真生活
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-12-27 10:00
整个通路应该是PC应用程序<――>驱动程序<――>Host Controller<――>电缆<――>Device Controller(也就是usb接口器件)<――>MCU<――>外围电路(比如你说的ram)。

也就是说设备方主控的是MCU,你的外围设备如ram、flash要连到mcu上,如果里面有数据,mcu把数据读出放到usb的端点fifo里,再通usb内的收发器传走。

我说明白了吗?
fwzfwz1
驱动中牛
驱动中牛
  • 注册日期2002-11-01
  • 最后登录2007-06-01
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-12-29 12:07
那么驱动程序又是如何将设备端传来的数据放到主机的RAM中呢,是不是驱动程序中有读写USB设备的函数?
有了驱动,人才有了力量。
dz_zhong
驱动牛犊
驱动牛犊
  • 注册日期2003-12-16
  • 最后登录2004-03-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-12-29 12:24
我觉得这需要你的USB的CPU管理的把?他肯定会提供协议之类的东西,  “听说回复就有分?呵呵”
wenxinglu
驱动牛犊
驱动牛犊
  • 注册日期2003-07-06
  • 最后登录2008-12-01
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-12-30 12:07
你是不是想把USB设备的RAM的内容发给HOST(PC)?
若是:你需要把你的设备做成Mass Storage class.
happybob51
驱动牛犊
驱动牛犊
  • 注册日期2003-10-20
  • 最后登录2004-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-12-30 15:02
mcu 程序就是固件程序,对吗?
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-12-30 18:27
mcu 程序就是固件程序,对吗?

对头! :D
fwzfwz1
驱动中牛
驱动中牛
  • 注册日期2002-11-01
  • 最后登录2007-06-01
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-12-30 19:44
整个通路应该是PC应用程序<――>驱动程序<――>Host Controller<――>电缆<――>Device Controller(也就是usb接口器件)<――>MCU<――>外围电路(比如你说的ram)。

也就是说设备方主控的是MCU,你的外围设备如ram、flash要连到mcu上,如果里面有数据,mcu把数据读出放到usb的端点fifo里,再通usb内的收发器传走。

我说明白了吗?

3x,说得很明白!看了你的几个回帖,水平很高呀!
有了驱动,人才有了力量。
hfy781108
驱动牛犊
驱动牛犊
  • 注册日期2002-08-19
  • 最后登录2005-12-10
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-12-30 20:09
读的数据放到终端(ENDPOINT),
可以通过68013+CPLD+SRAM方式读
sean_wang
驱动牛犊
驱动牛犊
  • 注册日期2003-10-28
  • 最后登录2004-02-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-12-31 12:03
fwzfwz1,你自己的理解没错!
carriage
驱动小牛
驱动小牛
  • 注册日期2002-10-12
  • 最后登录2004-09-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-01-06 09:40
不知道我的对你有没有用
我用的是CS5954AM RISC内置BIOS CYPRESS做U盘专用控制器
在U盘中使用的是统一编址,象什么内部RAM、外ROM、I/O都用的是一个连续的地址空间
启动后有专门的BOIS中断提供内存定位和内存分配中断67、68
而USB的读写确如楼上几位所说的USB固件只管控制,USB驱动管管理
USB设备地址是由USB设备枚举中主机分配USB配置地址寄存器来决定的。
如果你想在USB读写上做文章我觉得固件驱动都要做改动,关健是U盘的文件系是由驱动完成的,必须搞清楚他的接口才能在固件做改动,比较麻烦。如果有人要做想同的工作大家可以讨论一下,如果有人用SL11R或CS5954AM的同志
请与我联系
god_dragon1028@mail.china.com
13526598231

      
游客

返回顶部