CH374LibInit( ) 初始化返回0x81的问题[求助]

我用的STM32103FSMC总线控制CH374T,CS连接NE4 A0连接在A2上。 地址定义: #define CH374_BASE_ADDR 0x6C000000 #define CH374_IDX_PORT (*((volatile UINT16 *) (CH374_BASE_ADDR + 0x08))) /* CH374索引端口的I/O地址 */ #define CH374_DAT_PORT (*((volatile UINT16 *) (CH374_BASE_ADDR ))) /* CH374数据端口的I/O地址 */ FSMC时序初始化: p.FSMC_AddressSetupTime = 1; p.FSMC_AddressHoldTime = 0; p.FSMC_DataSetupTime = 2; p.FSMC_BusTurnAroundDuration = 0; p.FSMC_CLKDivision = 0; p.FSMC_DataLatency = 0; p.FSMC_AccessMode = FSMC_AccessMode_B; 其他IO口定义: RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOG | RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF | RCC_APB2Periph_AFIO, ENABLE); /*-- GPIO Configuration ------------------------------------------------------*/ /* ch374 Data lines configuration */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_14 | GPIO_Pin_15 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15 ; GPIO_Init(GPIOE, &GPIO_InitStructure);

/* ch374 Address lines configuration */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 ; GPIO_Init(GPIOF, &GPIO_InitStructure); /* NE4 configuration */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; GPIO_Init(GPIOG, &GPIO_InitStructure); 每次仿真的时候执行 i = CH374_READ_REGISTER(REG_SYS_INFO); if((i & 0x03)!= 0x01 ) return ; // 读取系统信息寄存器; 最后两位读出来都是01,但是执行库函数 CH374LibInit( ) 每次都是返回的0x81。 我自己画了一块小板子,只有CH374跟开发板飞线测试的。 期待回答。

返回0x81说明 硬件连接有误,或者是读写时序有问题, 检查CH374是否正常工作,晶振是否起振? CH374内部从地址0X40地址以后是CH374内部的RAM,往该区域写数据 然后在读取出来, 看看读的和写入的数据是否一样。 注CH374上电之后要先延时50ms


通了,原来是我画的小板上的去耦电容,线搭错了。我原来的板子线路不错,怎么就不通呢。再找找原因。


现在CH374主机缓冲区读写数据也成功了,CH374LibInit()和CH374DiskConnect()也成功了,就是在执行CH374DiskReady()的时候死在 while ( ( CH374_READ_REGISTER( REG_INTER_FLAG ) & ( BIT_IF_DEV_DETECT | BIT_IF_TRANSFER ) ) == 0 );中断控制线初始化的时候置高置低都试过了。


那你去检查下USB口的UD+和UD-的电压是多少?正常情况下UD+电压为3.3V左右,UD-电压为0V左右。


UD-口的电压为0,但是有一小段上压为3.3V的方波信号,UD+口电压为3V也有一小段上压为3.3V下压为0V的方波信号。


出现死机的时候 CH374 INT#引脚是低电平还是高电平? 在你的板子和CH374评估板之间多连几根地线。


初始化的时候INT#引脚是什么电平,死机的时候就是什么电平。高低电平我都试过了。我现在用的是我自己画的板子,之前的板子不知道什么原因就不通, 重新焊接了一块就OK了。


你焊接的时候有没有使用助焊剂?如果有使用助焊剂的话会导致硬件不稳定的。需要把板子洗好之后在调试。还有就是芯片外围的元器件不要焊接错误。


没有使用阻焊剂。374部分的硬件原理图我抄的安福莱的原理图。改变的只是晶振两边的电容用的是22PF的,安福莱用的是15PF的,安福莱USB接口处+5V和地之间有接10UF的电容,我没接。


搞定了,还是硬件问题


只有登录才能回复,可以选择微信账号登录