Chinaunix首页 | 论坛 | 博客
  • 博客访问: 971950
  • 博文数量: 192
  • 博客积分: 3070
  • 博客等级: 中校
  • 技术积分: 1861
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-27 23:44
个人简介

Start Linux Leave Linux a while Back to Linux

文章分类

全部博文(192)

文章存档

2023年(18)

2022年(11)

2021年(8)

2020年(14)

2019年(7)

2018年(13)

2017年(16)

2016年(4)

2012年(2)

2011年(13)

2010年(26)

2009年(13)

2008年(27)

2007年(20)

我的朋友

分类: LINUX

2008-03-04 23:28:50

platform: s3c2440 + linux 2.6.18
经过两个月的努力终于把 ISP1582 的驱动成功移植到 linux2.6.18 上面了,可以正常读写文件了,但还有一些小DUG.写操作的速度只有 800Kb/s, 还没有做优化处理,速度介于1.1 到 2.0 之间.读操作和删除的速度可以达到2.0的.呵呵.
直接拿到原厂的代码 PORT 上去后,通过ISP1582写大文件到 Mass storage(Nand Flash)上USB BUS会出现复位的情况,PC端提示 无法复制 / 路径太深 / 参数不正确 等错误.
其实这就是一个不同步的问题,当PC端写数据到 Mass Storage时,传输一段数据后,PC端就和 ISP1582 这边不同步了.ISP1582 请求一个 31 byte 命令时,PC端总是发 512 byte 的数据过来,在等待 9S 之后,导致 ISP1582出现复位,然后出断掉的地方继续传送(驱动程序有丢包的处理),所以有时也可以传送成功.
解决这个不同步最简单的方法就是在读写 IO端口时加一个 200ns 的延时,这样同步问题就解决了.上面提到的速度没有达到2.0也是因为这个延时的原因,因为每次读/写操作时都有 一段延时,导致速度慢了下来,其实不需要每次读/写 IO 端口都延时 200ns, 只需要每次读 buffer_status 时加延时就可以,这样传输的速度应该就会提上去了,不过我还没有找到在哪里加,理论上是应该这样子的.
同时,还出现另外一个问题,上面加 200ns 延时的方法只适用于时钟频率为 300M的,当把频率调到 405M 时就不可以这样做了,至少要加 一个 5us的延时才可以保证 ISP1582 不出现复位,但这样速度是不能忍受的,传输速度就跟串口差不多.
 
要使本驱动能正常工作在 405M上,必须更改 BANK1(因为我是用CS1 连接到 ISP1582 的 CS线上的) 一些相关的时序,如 Tacs,Tcos,Tacc,Tacp等,因为300M 的 HCLK 和 405M 的 HCLK 的周期是不同,405M 的一个HCLK的周期更短,所以要将 对应的CLK个数加 1 或 2才能工常工作,否则还是会不断出现复位的状况.
 
原代码不方面公开,如果哪位朋友遇到同样的问题可以大家讨论一下.
 
 
阅读(2006) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-09-10 18:00:18

你好,我在做ISP1582驱动的时候,发现有时候会丢包,你有没有碰到过?

chinaunix网友2008-03-28 14:51:01

你好,我现在做isp1582 mass stage的驱动,读setup token时,从data port读出来的数据是0x680,0x680,0x680,0x680。好像fifo指针没有自动变化。能说一下原因吗?