V6板子的SDRAM例程中,GPIO口的速度设置为什么是50MHz
如上图,SDRAM的最大时钟不是90M吗?为什么不把速度配置成100MHz的?50M的IO速度对SDRAM速度有影响吗? 建议改成100MHz,没注意,一直用的50MHz了。。。 eric2013 发表于 2016-2-18 15:55
建议改成100MHz,没注意,一直用的50MHz了。。。
求助个问题啊,有个原项目标准库写的,F429,SDRAM的IO口配置就是50M,后来HAL库重构,HAL库默认是100M的IO口设置了,然后批量产品反而出现了部分SDRAM读取数据出错的问题。sdram时钟配置84兆,难道不该用最高的IO口速度么?SDRAM走线没有做等长,会有影响么? akikyoua 发表于 2023-11-10 09:22
求助个问题啊,有个原项目标准库写的,F429,SDRAM的IO口配置就是50M,后来HAL库重构,HAL库默认是100M的 ...
实际上标准库这里的50M并不准确,升级到HAL后,ST改名字了,叫High,Very High等,这么描述才准确些。
现在我们HAL版的例子都改成了Very High最高速。
/*##-2- 配置GPIO ##################################################*/
GPIO_Init_Structure.Mode = GPIO_MODE_AF_PP;
GPIO_Init_Structure.Pull = GPIO_PULLUP;
GPIO_Init_Structure.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_Init_Structure.Alternate = GPIO_AF12_FMC;
eric2013 发表于 2023-11-10 11:15
实际上标准库这里的50M并不准确,升级到HAL后,ST改名字了,叫High,Very High等,这么描述才准确些。
...
使用HAL库配置,IO默认状态就是GPIO_SPEED_FREQ_VERY_HIGH,就是使用GPIO_SPEED_FREQ_VERY_HIGH反而有问题了。修改为GPIO_SPEED_FREQ_HIGH后反而正常了。判断是读取存在问题,写入没有问题
void SdramTest(void)
{
uint32_t data;
uint32_t count = 0;
uint32_t* sdramStr = ((uint32_t*)(0xC0000000));
printf("sdram test start!\n");
for(count = 0; count < 1024*1024*8; count++)
{
sdramStr = count;
}
for(count = 0; count < 1024*1024*8; count++)
{
data = sdramStr;
if(data != count)
{
printf("sdram test err at %d word\n",count);//这里设置断点,程序会进入这里,但是在调试状态sdramStr值正确,但是data不正确,所以应该是读出时候错了
break;
}
}
printf("sdram test over!\n");
}
用示波器看了clk的84兆。看着都是正弦波,但是两种看着没啥区别
akikyoua 发表于 2023-11-13 11:29
使用HAL库配置,IO默认状态就是GPIO_SPEED_FREQ_VERY_HIGH,就是使用GPIO_SPEED_FREQ_VERY_HIGH反而有问 ...
那你们的硬件设计有问题。
页:
[1]