块便调用sa1100_usb_stop(),然后是 sa1100_usb_close(),关闭SA1100的USB控制器。
StrongARM USB控制器支持数据传输作业的bulk-in 和bulk-out。在从USB主机接收数据包时,内核模块调用sa1100_usb_recv(),把数据缓冲区和回调函数地址传递给它。然后内核的底层USB设备控制代码对来自主机的bulk-out包进行检索,把内容放于缓冲区中,并调用回调函数。
回调函数必须从接收缓冲区提取数据并保存于其它位置或者把缓冲区空间加到一个队列中,为下一个数据包的接收分配新的缓冲区。而后回调函数二次调用sa1100_usb_recv(),在需要时进行下一个数据包的接收。过程与对USB主机的数据传输相类似。在聚集起一帧的数据量后,内核模块将数据的地址、长度和回调地址传递给 sa1100_usb_send()。传输完成时,内核调用回调函数。
主机
主机端USB驱动的几个例子在主流的Linux版本以及 Linux内核档案组织分配的原始内核源中都有提供。用于Handspring Visor(drivers/usb/serial/visor.c)的模块是编写较为简洁易懂的模块之一,作为USB主机端模块的模板 (drivers/usb/usb-skeleton.c)使用。
高速串行
对于大多数实际应用来说, 可以把USB总线当作一种高速串行端口考虑。如此在某些类型的页码:[1] [2] [3] [4] [5] [6] [7] [8] 第3页、共8页 |