S3C2440 Wince5.0 ActiveSync无法同步

lyzj3210   2010-1-6 17:02 楼主
使用同一个Eboot,开发板上下ce4.2的nk可以同步,说明硬件没问题

ce5.0如下配置

PB添加了以下组件
end user ActiveSync
shell Network end user
RAS/PPP
TAPI2.0 Unimodem
USB Fuction Seriel

USB Fuction Controller 驱动使用三星原版

注册表按一下设置
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\SC2440USBFN]
   "Dll"="sc2440usbfn.dll"
   "Prefix"="UFN"
   "Priority256"=dword:64
   "IoBase"=dword:B1200000
   "IoLen"=dword:1000        ; Use one page
   "Irq"=dword:19
   "BusIoctl"=dword:2a0048
   "IClass"=multi_sz:"{E2BDC372-598F-4619-BC50-54B3F7848D35}=%b","{6F40791D-300E-44E4-BC38-E0E63CA8375C}=%b"

[HKEY_LOCAL_MACHINE\Drivers\USB\FunctionDrivers]
   "DefaultClientDriver"=- ; erase previous default
   "DefaultClientDriver"="Serial_Class"

[HKEY_LOCAL_MACHINE\Drivers\USB\FunctionDrivers\Serial_Class]
   "FriendlyName"=LOC_USBFN_SERIAL_NAME
   "idVendor"=dword:0547
   "Manufacturer"=LOC_USBFN_SERIAL_MANUFACTURER
   "idProduct"=dword:2720
   "Product"=LOC_USBFN_SERIAL_PRODUCT
   "Index"=dword:5

[HKEY_CURRENT_USER\ControlPanel\Comm]
        "Cnct"="`USB"

#include "$(_TARGETPLATROOT)\Files\rasbook.reg" 建立了名为`USB的连接

USB Fuction Controller 驱动中的ISTMain函数
在启动时usb device中断响应了两次,之后再插拔USB一点反应都没有,PC端一直提示无法识别的USB设备

麻烦哪位高人在ce5.0使用USB Fuction Controller/client方式成功实现同步的
请给点提示,说明一下具体实现方法
或者把usb function controller驱动和注册表设置发到我邮箱
yangyong9608@163.com 感谢感谢!!

回复评论 (35)

MARK,学习下
点赞  2010-1-6 17:19
4.2和WinCE5.0的同步的驱动可能不一样,
很早以前在2410下也碰到类似的问题。
点赞  2010-1-6 21:38
是不一样
4.2就是实现了一个usb转uart的驱动
5.0这个有了mdd pdd的架构了,先是function controller 之后才是 function client

昨天折腾了一天,现在发现启动时候那两个中断不插usb线也会触发,感觉还是function controller的驱动有问题,等待高人出现,paol_chao和gooogleman都去哪了?不做技术,自己创业去了?呵呵
点赞  2010-1-7 13:06
对了,我把4.2的function驱动挪到5.0试了一下,中断用的静态映射
插入usb线会触发一次中断,之后就没动静了
拔出usb线没有中断触发

这是什么原因呢,4.2的nk在插入和拔出时都会有中断触发的,驱动是一样的,真是奇怪了
点赞  2010-1-7 13:09
MARK,以前配到过,没仔细想过
点赞  2010-1-7 13:27
居然沉了,高手都去哪了?
返回USBDUIR_RESET是PC的问题,换了USB口就返回RX_INTR了
但是DMA部分还需要静态映射一下,估计今天能搞定4.2的驱动在5.0下用了

5.0带的function驱动还是不好使,谁有调好的发给兄弟吧,谢谢了
点赞  2010-1-8 10:16
没人理啊,问题太低级?

5.0那个function controller驱动就是有问题,ep的中断都给clear了,居然没恢复,怪不得没中断呢

也不知道同事都是从哪找的驱动,午饭前再没人给我传驱动就只能自己动手改了,唉
点赞  2010-1-8 11:07
完,看错了

EnableEndpointInterrupt提供使能中断的接口了

我还是仔细看看再回复吧,免得再丢人
点赞  2010-1-8 11:21
5.0的BSP里面的IRQ-到-Sysintr 是动态申请的,所以,如果你还是用的4.2的OAL,那么这一部分就要更换了,要静态指定,
建议吧MDD的代码 copy到BSP下,然后打开所有的打印函数,自然知道哪里卡主了!
点赞  2010-1-8 12:46
真是学习啦
点赞  2010-1-8 13:01
4.2移植到5.0的function驱动里

DMA传输的v_pDMAregs->rDCDST3一直是0,造成死循环了

我打印了所有的DMA3的寄存器,跟4.2的一模一样,就是DMA不传输数据,真是郁闷死了

有哪位遇到过类似问题吗?
点赞  2010-1-8 17:02
被逼无奈放弃了DMA,直接用USB EP4的FIFO把数据给读取了,同步是同步上了,可就是纳闷,为啥DMA不好使呢,问了几个人,都没碰上过这样的事儿,我把寄存器设置贴上,麻烦各位给看看

USB的

*(volatile BYTE *)&pHWHead->pUSBCtrlAddr->EP4DTL=USBD_GLOBALS_BUF_SIZE&0xff;
        *(volatile BYTE *)&pHWHead->pUSBCtrlAddr->EP4DTM=(USBD_GLOBALS_BUF_SIZE>>8)&0xff;
        *(volatile BYTE *)&pHWHead->pUSBCtrlAddr->EP4DTH=(USBD_GLOBALS_BUF_SIZE>>16)&0x0f;

        *(volatile BYTE *)&pHWHead->pUSBCtrlAddr->OCSR2=
        *(BYTE *)&pHWHead->pUSBCtrlAddr->OCSR2 | (BYTE)EPO_AUTO_CLR /*| EPO_OUT_DMA_INT_MASK*/;  
        //AUTO_CLR(OUT_PKT_READY is cleared automatically), interrupt_masking.

        *(volatile BYTE *)&pHWHead->pUSBCtrlAddr->EP4DU=0x01; //DMA transfer unit=1byte
        *(volatile BYTE *)&pHWHead->pUSBCtrlAddr->EP4DC=UDMA_OUT_DMA_RUN|UDMA_DMA_MODE_EN;

DMA3的

v_pDMAregs->DISRCC3 = (1<<1)|(1<<0);                   //src=APB, srcAddr=fixed
        v_pDMAregs->DISRC3 = REAL_PHYSICAL_ADDR_EP4_FIFO; //srcAddr=EP4_FIFO
        v_pDMAregs->DIDSTC3 = (0<<1)|(0<<0);                   //dst=AHB(memory),increase,

#if (DRIVER_GLOBALS_PHYSICAL_MEMORY_START<0xA0000000 || DMA_BUFFER_BASE<0xA0000000)
        GENERATE_ERROR
                           //The above two address should be non-cacheable area.
#endif         

        realPhysicalAddr_UsbdRxBuf = \
                (ULONG)&((DRIVER_GLOBALS *)DRIVER_GLOBALS_PHYSICAL_MEMORY_START)->usbd.usbdRxBuf \
                - DMA_BUFFER_BASE + DMA_PHYSICAL_BASE;       
        //USBDMSG( 1, (TEXT( "[USBD:RPA_URxBuf=%x]"),realPhysicalAddr_UsbdRxBuf) );
        //Real physical address of usbdShMem->usbdRxBuf

        if(bufIndex==0)
        {
                   v_pDMAregs->DIDST3=realPhysicalAddr_UsbdRxBuf+0+bufOffset;
        }
        else
        {
                v_pDMAregs->DIDST3=realPhysicalAddr_UsbdRxBuf+(USBD_GLOBALS_BUF_SIZE/2)+bufOffset;
        }

           v_pDMAregs->DCON3=(USBD_GLOBALS_BUF_SIZE-bufOffset)|(1<<31)|(0<<30)|(1<<29)|(0<<28)|(0<<27)|(4<<24)|(1<<23)|(1<<22)|(0<<20);
        //handshake,requestor=APB,CURR_TC int enable,unit transfer,
        //single service,src=USBD,H/W request,no_autoreload,byte,CURR_TC

        v_pDMAregs->DMASKTRIG3=(1<<1);        //DMA 3 on

DMA3的寄存器的值打印出来都是跟4.2里面一样的配置,可就是DCDST3 DSTAT一直是0

REAL_PHYSICAL_ADDR_EP4_FIFO明明都有数据到了,DMA就是不拷贝,不用DMA直接读就正确了,郁闷啊
点赞  2010-1-9 14:54
这份BSP放在我这两年了,一直没怎么改过,本来就想把function controller驱动加上,没想到整这么麻烦

周一开始调那个function controller驱动,那个驱动中断还没触发呢,唉~~

有高手路过给讲讲吧
点赞  2010-1-9 14:58
菜鸟飘过,友情帮顶!
点赞  2010-1-9 16:19
自己顶一把,DMA不工作的问题还是没有解决,盼望有人能参与
点赞  2010-1-11 13:14
可以说你usb Function的问题,昨天我还在为这个苦恼呢?你找个好的bsp改下吧!我的现在好了!
点赞  2010-1-11 14:33
重新建个工程,再NK
点赞  2010-1-11 14:36
xuefeng_baggio兄弟能否将你的function driver发到我邮箱呢?

yangyong9608@163.com,我的cpu是S3C2440的

帮个忙吧,谢谢
点赞  2010-1-11 15:11
已经发给你了!你看看行不行!
点赞  2010-1-11 15:48
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复