知识点:标准的SDRAM一般都是4个BANK,stm32f429-diso开发板使用的是IS42S16400J这个芯片。
IS42S16400J也有4个Bank,总容量为1Mbitx 16-bit x 4-bank = 67,108,864 bits = 64-Mbit ,每个BANK的组成
4096rows x 256 columns x 16 bits(=16Mbit), 对应的外部引线是12行8列,请参看datasheet.
相关语句
/* FMC SDRAM control configuration */
FMC_SDRAMInitStructure.FMC_Bank = FMC_Bank2_SDRAM;
/* Row addressing: [7:0] */
FMC_SDRAMInitStructure.FMC_ColumnBitsNumber = FMC_ColumnBits_Number_8b;
/* Column addressing: [11:0] */
FMC_SDRAMInitStructure.FMC_RowBitsNumber = FMC_RowBits_Number_12b;
IS42S16160b,256Mbit
相关语句,注意红色改动部分
/* FMC SDRAM control configuration */
FMC_SDRAMInitStructure.FMC_Bank = FMC_Bank2_SDRAM;
/* Row addressing: [7:0] */
FMC_SDRAMInitStructure.FMC_ColumnBitsNumber = FMC_ColumnBits_Number_9b;
/* Column addressing: [11:0] */
FMC_SDRAMInitStructure.FMC_RowBitsNumber = FMC_RowBits_Number_13b;
STM32F429I-DISCORVERY 使用的SDRAM是IS42S16400J,64Mbit,在官方例程中的定义是
#define IS42S16400J_SIZE 0x400000 // 4M x 16Bit(存储宽度)=16Mbit(每个Bank的容量)
STM32F429ZGT6开发板使用的SDRAM是IS42S16160b,256Mbit,在上述定义中要修改成
#define IS42S16400J_SIZE_16b 0x1000000 // 16M x 16Bit(存储宽度)=64Mbit(每个Bank的容量)
注意上面2个地址范围是16bit用的,如果只使用一个字节8bit,可将定义的值加倍,即
#define IS42S16400J_SIZE_8b 0x2000000 // 32M x 8Bit(存储宽度)
SDRAM_BANK_ADDR地址0xD0000000; counter 在0x00--- IS42S16400J_SIZE-1 之间
读写8bit方法
*(__IO uint8_t*) (SDRAM_BANK_ADDR + counter) = (uint8_t)0xAB;
ubReaddata_8b = *(__IO uint8_t*)(SDRAM_BANK_ADDR + counter);
读写16bit方法
*(__IO uint16_t*) (SDRAM_BANK_ADDR +2* counter) = (uint16_t)0xABCD;
ubReaddata_16b = *(__IO uint16_t*)(SDRAM_BANK_ADDR +2* counter);
注意这里要乘2,地址0x00存低8位,0x01存高8位,以此类推
相关程序下载
http://download.csdn.net/detail/silno/8178449