RNDIS项目手记
---------------by nasiry
转载请说明出处,并通知我
原来的驱动的USBDevice 配置状态
END POINT
1.EP0控制
MAX PACKET SIZE-8BYTE
AUTO CLEAR
2.EP1控制
MAX PACKET SIZE-64BYTE
MODE = IN;
TRANSMODE =BULK
3.EP4控制
MAX PACKET SIZE-64BYTE
MODE = OUT
TRANSMODE =BULK
TRANSFER COUNTER = BUFFER SIZE
UNIT CONUTER = 1BYTE
DMA WRITE (OUT)
ENABLE DMA MODE
DISABLE DEMAND MODE
DMA READ DISABLE(IN)
4.EP3.EP2没有使用
DMA3配置
1.使用DMA3做bulk传输
2.源APB(见usb DEVICE总线连接方式) fix模式 源地址为EP4的物理地址
3.目标AHB(内存),increase模式 目的地址直接使用全局驱动保留区中DMA3缓冲区
4.协议:handshake mode,request from APB,current terminal count enable,no burst,single service,source =USBD,Hardware source,no_autoreload,byte transfer,Current terminal count
拟定配置
1.EP0控制
MAX packet size = 8
autolclear enabled
2.EP1数据输出
MAX packet size = 64byte
mode =in
transmode = bulk
interrupt =yes
DMA =No
3.EP2中断控制(输出)
max packet size =sizeof(INTERRUPT_DATA)
mode =in
transmode =interrupt
interrupt =No
4.EP4数据输入
max packet size =64byte
mode =out
transmode = bulk
DMA =disabled
interrupt =yes
调试编译环境
使用WindowsCE提供的编译环境
将项目加入bootload的代码中执行,以调试。
需要对eboot做修改
1.增加从0x0到0x0的映射
2.开启eboot的中断
3.eboot的自举
原定使用0x0到0x0的映射,由于编译器自动占用image的最前端4k字节,所以不能直接使用0x0安装中断向量。改为使用0x3000 0000映射到0x0从内存装载中断向量。
问题1。
使用了mdd后由于mdd使用了内核函数NKCreateStaticMapping(定义在PRIVATE\WINCEOS\COREOS\NK\KERNEL\ARM\mdarm.c下),而eboot定义了很多与内核函数重名的函数,由此使得eboot不能直接使用nk.lib参与链接,该函数需要另外实现。PCIGetBusDataByOffset由于本身不使用该函数,直接去掉mdd中对该函数的调用。