本帖最后由 如意不如意 于 2020-11-3 09:06 编辑
分享iCore4T移植RT-Thread过程的点点滴滴——DAY 10
高手请略过,如有错误请多多批评指点!
SDRAM是同步动态随机存储器,iCore4T ARM+FPGA双核心板挂有一片容量为32M的外部SDRAM,在前面项目的基础上(rt-thread-icore4t-v0.7),分享RTT的SDRAM驱动移植,最后实现外部SDRAM的读写测试。
1、首先按照银杏知识库iCore4T双核心板系列教程(STM32CubeMX教程六十——LCD实验驱动4.3寸液晶屏)来对项目Cube进行配置。需要配置时钟、GPIO、TIM12、FMC。要与教程配置保持一致,配置完成后重新生成MDK工程。
http://www.gkwiki.cn/doku.php?id=icore4t_60
2、复制刚刚生成的src文件夹main.c文件中的函数SystemClock_Config(void)到board.c。这里内核初始化时要调用该函数进行时钟配置。
3、修改board文件夹下kconfig文件,在menu "Onboard Peripheral Drivers"中添加配置SDRAM的选项。
4、在board文件夹下新建ports文件夹,用来存放接口头文件。在ports下新建sdram_port.h文件,并添加接口头文件路径到board/SConscript中,内容如下:
#ifndef __SDRAM_PORT_H
#define __SDRAM_PORT_H
#ifdef __cplusplus
extern "C" {
#endif
#define SDRAM_MODEREG_BURST_LENGTH_1 ((uint16_t)0x0000)
#define SDRAM_MODEREG_BURST_LENGTH_2 ((uint16_t)0x0001)
#define SDRAM_MODEREG_BURST_LENGTH_4 ((uint16_t)0x0002)
#define SDRAM_MODEREG_BURST_LENGTH_8 ((uint16_t)0x0004)
#define SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL ((uint16_t)0x0000)
#define SDRAM_MODEREG_BURST_TYPE_INTERLEAVED ((uint16_t)0x0008)
#define SDRAM_MODEREG_CAS_LATENCY_2 ((uint16_t)0x0020)
#define SDRAM_MODEREG_CAS_LATENCY_3 ((uint16_t)0x0030)
#define SDRAM_MODEREG_OPERATING_MODE_STANDARD ((uint16_t)0x0000)
#define SDRAM_MODEREG_WRITEBURST_MODE_PROGRAMMED ((uint16_t)0x0000)
#define SDRAM_MODEREG_WRITEBURST_MODE_SINGLE ((uint16_t)0x0200)
#define SDRAM_REFRESH_COUNT ((uint32_t)0x0603)
#define LOADTOACTIVEDELAY 2
#define EXITSELFREFRESHDELAY 7
#define SELFREFRESHTIME 4
#define ROWCYCLEDELAY 7
#define WRITERECOVERYTIME 2
#define RPDELAY 2
#define RCDDELAY 2
#define SDRAM_BANK_ADDR ((uint32_t)0xC0000000)
#define SDRAM_SIZE ((uint32_t)0x2000000)
#define SDRAM_DATA_WIDTH 16
#define SDRAM_TARGET_BANK 1
#define SDRAM_COLUMN_BITS 9
#define SDRAM_ROW_BITS 13
#define SDRAM_CAS_LATENCY 3
#define SDCLOCK_PERIOD 2
#define SDRAM_RPIPE_DELAY 1
#ifdef __cplusplus
}
#endif
#endif /*__ SDRAM_PORT_H */
5、进入stm32h750-gingko-icore4t文件夹下,右击空白处,选择ConEmu Here,使用scons命令,键入scons --target=mdk5,生成MDK5工程。
6、打开stm32h750-gingko-icore4t下的project.uvprojx工程,编译,烧录,就可以进行外部SDRAM测试了。
7、打开终端,选择对应COM口,比特率115200,可以看到系统启动信息,sdram init success,外部SDRAM映射地址为0xC0000000,大小为32M。运行sdram_test读写测试程序, 至此说明我们的外部SDRAM驱动已经添加成功。
8、源代码
源代码可以稳步这里下载:
链接:https://pan.baidu.com/s/1fcLU4WaRDlgr0mNYwZj1Yg 提取码:zstq
|