Trace the USB transfer data. I got impress about the time cost at each stage. Every 64 sectors write will take a block erase and build block map. And when access FAT1, FAT2, Root directory and MBR, it will copy block which take many time.
I list the time cost below, the time is relative.
1.Write sector takes 620 us.
2.Build block map and erase block takes 12ms
3.Copy block takes 180ms.
And then I rewrite block map evict method, just pick up the less time cost block. And then write speed improve 33%. now the read write speed is same as SDK does.
The other way to improve the speed should put our foucs on read redandunt time. Every build block map will read 64 redandunt area and takes 9ms.
Search This Blog
Oct 17, 2008
Oct 10, 2008
Updater work fine
replace read/write function with mine, updater can copy files into disc. use HDbench test, r/w is 6470/1476(3716). orignal SDK r/w is 5369/4000. read speed is fast than original SDK, write speed too slow, need find out why the root cause.
Oct 9, 2008
Nand flash logical to physical management
Yesterday, use nand stress test for 30 mins, it runs OK. Next step I will try to migrate it into SDK procedure.
Sep 26, 2008
Nand flash driver
I am preparing the Nand flash driver which control logical to physical translation. Almost finish. Will test it in our SDK.
Sep 17, 2008
Aug 10, 2008
Jul 13, 2008
转贴:驱动开发入门之中断处理
从网上看到些介绍,贴在下面,最近没有太多时间来看相关的内容。
驱动开发入门之中断处理
驱动程序开发过程中对中断的处理是很重要的一部分,直接关系程序的运行结果与效率,所以需要对其给予足够的重视.
中断处理包含两个方面,与CE系统相关的部分及与硬件相关的部分.
CE系统特定的处理流程(与其它系统有所区别的,或者说这部分代码在其它系统上是无法运行的)一般为:
1.用CreateEvent创建一个自动事件(即不需要使用ResetEvent去重置事件.
2.用InterruptInitialize将些事件与硬件所需要的中断关联起来.
3.创建一个线程,在此线程中用WaitForSingleObject等待事件,当等到这个事件之后,开始相应的处理,完成之后调用InterruptDone去重新激活中断.
硬件相关部分,
一般的,OAL层的中断处理程序(OEMInterruptHandler),在监测到某个中断后,会将CPU相应的中断标志位清除,同时禁用该中断,以保证系统调度不会被该中断再次打断,而后返回一个中断号给系统,从而使系统开始调度其IST,驱动程序的IST被激活,完成相应的处理之后应该清除硬件级的中断标志,从而使硬件知道中断服务已经完成,而不再产生该中断。当然有些硬件,例如ATA/ATAPI不需要这个动作,这些设备在最后一个字节被读出/写入之后会将其DRQ标志清除,自然,只要还有一个字节没有被读出/写入,DRQ就一直存在。
注意:
5。0以后引入PQOAL的概念,在PQOAL格式的BSP中,有一个SYSINTR与IRQ的概念,SYSINTR是系统使用的中断,IRQ为硬件中断,即CPU使用的中断线,一般的BSP中,将其CPU的中断标志寄存器的各位一一对应,即,IRQ0对应于该寄存器的第0位,IRQ2为第2位。所以,做为驱动程序,必须知道它所驱动的硬件所使用的IRQ,即硬件中断线。然后调用KernelIoControl的IOCTL_HAL_REQUEST_SYSINTR功能得到一个SYSINTR,然后再进入上面描述的流程。这样,驱动程序 以后就只使用申请到的SYSINTR,而不关心其IRQ了。 OAL层会将IRQ与SYSINTR做相互转换。
驱动开发入门之中断处理
驱动程序开发过程中对中断的处理是很重要的一部分,直接关系程序的运行结果与效率,所以需要对其给予足够的重视.
中断处理包含两个方面,与CE系统相关的部分及与硬件相关的部分.
CE系统特定的处理流程(与其它系统有所区别的,或者说这部分代码在其它系统上是无法运行的)一般为:
1.用CreateEvent创建一个自动事件(即不需要使用ResetEvent去重置事件.
2.用InterruptInitialize将些事件与硬件所需要的中断关联起来.
3.创建一个线程,在此线程中用WaitForSingleObject等待事件,当等到这个事件之后,开始相应的处理,完成之后调用InterruptDone去重新激活中断.
硬件相关部分,
一般的,OAL层的中断处理程序(OEMInterruptHandler),在监测到某个中断后,会将CPU相应的中断标志位清除,同时禁用该中断,以保证系统调度不会被该中断再次打断,而后返回一个中断号给系统,从而使系统开始调度其IST,驱动程序的IST被激活,完成相应的处理之后应该清除硬件级的中断标志,从而使硬件知道中断服务已经完成,而不再产生该中断。当然有些硬件,例如ATA/ATAPI不需要这个动作,这些设备在最后一个字节被读出/写入之后会将其DRQ标志清除,自然,只要还有一个字节没有被读出/写入,DRQ就一直存在。
注意:
5。0以后引入PQOAL的概念,在PQOAL格式的BSP中,有一个SYSINTR与IRQ的概念,SYSINTR是系统使用的中断,IRQ为硬件中断,即CPU使用的中断线,一般的BSP中,将其CPU的中断标志寄存器的各位一一对应,即,IRQ0对应于该寄存器的第0位,IRQ2为第2位。所以,做为驱动程序,必须知道它所驱动的硬件所使用的IRQ,即硬件中断线。然后调用KernelIoControl的IOCTL_HAL_REQUEST_SYSINTR功能得到一个SYSINTR,然后再进入上面描述的流程。这样,驱动程序 以后就只使用申请到的SYSINTR,而不关心其IRQ了。 OAL层会将IRQ与SYSINTR做相互转换。
Subscribe to:
Posts (Atom)