STM32F407 驱动外部SRAM
程序员文章站
2022-03-06 08:09:08
...
需要驱动的SRAM型号为IS61LV25616AL,性价比比51216的高很多
- 配置Cubemx
这几个时序比较关键,可以按照手册来计算,我用下来这几个数值比较合适。 - 然后就没有然后了,生成代码就可以用了。。。
- 检查SRAM内容是否正确
uint8_t bsp_TestExtSRAM(void)
{
uint32_t i;
uint32_t *pSRAM;
uint8_t *pBytes;
uint32_t err;
const uint8_t ByteBuf[4] = {0x55, 0xA5, 0x5A, 0xAA};
/* 写SRAM */
pSRAM = (uint32_t *)EXT_SRAM_ADDR;
for (i = 0; i < EXT_SRAM_SIZE / 4; i++)
{
*pSRAM++ = i;
}
/* 读SRAM */
err = 0;
pSRAM = (uint32_t *)EXT_SRAM_ADDR;
for (i = 0; i < EXT_SRAM_SIZE / 4; i++)
{
if (*pSRAM++ != i)
{
err++;
}
}
printf("SDRAM check round 1 error = %d\n", err);
if (err > 0)
{
return (4 * err);
}
#if 1
/* 对SRAM 的数据求反并写入 */
pSRAM = (uint32_t *)EXT_SRAM_ADDR;
for (i = 0; i < EXT_SRAM_SIZE/4; i++)
{
*pSRAM = ~*pSRAM;
pSRAM++;
}
/* 再次比较SRAM的数据 */
err = 0;
pSRAM = (uint32_t *)EXT_SRAM_ADDR;
for (i = 0; i<EXT_SRAM_SIZE/4;i++)
{
if (*pSRAM++ != (~i))
{
err++;
}
}
printf("SDRAM check round 2 error = %d\n", err);
if (err>0)
{
return (4 * err);
}
#endif
/* 测试按字节方式访问, 目的是验证 FSMC_NBL0 、 FSMC_NBL1 口线 */
pBytes = (uint8_t *)EXT_SRAM_ADDR;
for (i = 0; i < sizeof(ByteBuf); i++)
{
*pBytes++ = ByteBuf[i];
}
/* 比较SRAM的数据 */
err = 0;
pBytes = (uint8_t *)EXT_SRAM_ADDR;
for (i = 0; i < sizeof(ByteBuf); i++)
{
if (*pBytes++ != ByteBuf[i])
{
err++;
}
}
printf("SDRAM check round 3 error = %d\n", err);
if (err > 0)
{
return err;
}
return 0;
}
函数返回值是错误的个数,正常应该返回0
ENJOY!