USB功能测试方法:
1. usb线一端插入PC,另一端插入手机后,如果PC上弹出消息框说有'unkown device'USB设备,说明23d检测到charge中断,并且正确的给sp5368/sp5369的USB端口提供了3.3V电源,DP管脚也由1.5K电阻上拉到3.3V,但是sp5368/sp5369的内部USB模块没有设置正确。
如果PC上没有弹出'unkown device'消息框,但是查到PC上‘我的电脑’--‘属性’--‘硬件’--‘设备管理器’--‘通用串行总线控制器’下有'USB Mass Storage Device', 说明sp5368/sp5369的内部USB模块设置正确,
对应寄存器0x0101[0,2,6,7]。如果以上现象都没有,说明PC没有检测到USB设备插入,
需要查手机端USB3.3v电压是否提供?DP上的1.5K电阻是否上拉到1.5K?
手机是否检测到charge中断并正确区分是‘充电器插入’还是‘USB设备接入’?
关于SD卡的保护,目前需要在代码上进行下列增强:
1 保护读写SD卡的时候,寄存器设置正确。目前已经在SP5368SDUSB.LIB。V2.13.20100320d中进行了修正;请参考附件;
2 为保证SD卡在DMA操作的时候,地址不被其他修改,我已经将SD卡DMA数据拷贝的部分放在SP5368.c中。
另外,添加一个变量gSPSDDMAUseFlag 标志SD卡在进行DMA操作。
3 另外,在中断处理程序中进行下列处理,减少TP干扰;
*void SP5368_LISR(void)
{
EINT_Mask (SP5368_EINT_NO);
DMA_Stop(DMACHANNEL);
gDmaLeft = DRV_Reg32(DMA_RLCT(DMACHANNEL));
gintStatus = SP5368_Emi_Read(0x010f);
#if 0
SP5368_Emi_Write(0x010f,0x0000);
#endif
* 在sp5368_lisr()函数中调用 ,改为drv_active_his为直接待用HISR的处理;
#if 1
SP5368_HISR();
gintStatus = SP5368_Emi_Read(0x010f);
SP5368_Emi_Write(0x010f,0x0000);
#else
drv_active_hisr(DRV_SP5368_HISR_ID);
#endif
4 在上层软件的流程上保证读写SP5368寄存器的时候,将等待SP5368SD DMA不处于忙碌的时候。
例如: 拍照,录像,TP手写读取ADC数值,sleep等。
还需要添加一个地方,在SP5368FS.C中Read_sectors、Write_Sectors() ,调用sd_read_multi_Blocks/sd_write_multi_blocks()的前后进行EINTMASK(SP5368_EINT_NO)以及EINTUNMASK(SP5368_EINT_NO) 的操作。