Chinaunix

标题: ISP1582在linux2.6.18上的驱动 [打印本页]

作者: owen0725    时间: 2008-03-04 23:28
标题: ISP1582在linux2.6.18上的驱动
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 不出现复位,但这样速度是不能忍受的,传输速度就跟串口差不多,还要找一下如何解决这个问题.但能够传完就是完成一大半了.
原代码不方面公开,如果哪位朋友遇到同样的问题可以大家讨论一下.



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/42456/showart_489546.html




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2