FPGA(SDRAM_init_set)

本文详细介绍了SDRAM芯片的初始化过程,包括SDRAM芯片各引脚的功能、常用的命令、内部状态转移,以及配置流程。强调了上电后的延时、预充电、自动刷新等关键步骤,解析了模式寄存器的设置方法,包括突发长度、突发类型、延时的选择。

SDRAM_init

  1. SDRAM芯片各引脚及功能
    在这里插入图片描述

  2. SDRAM常使用的命令
    在这里插入图片描述在这里插入图片描述

  3. SDRAM芯片内部状态转移图
    在这里插入图片描述
    注:1-粗线为自动跳转。2-细线为手动跳转

  4. 开始配置
    SDRAM上电后需要保持100us的延时时间,并且在这段时间内不允许做任何操作,也就是说这段期间内需要给SDRAM发送NOP( No operation )空操作命令。在100us延时过后,需要给出Percharge(预充电 )命令对所有Bank进行预充电。这样可以将芯片内部的状态机跳转到IDLE状态,在IDLE状态内需要连续给出两个AUTO refresh(自动刷新)命令,当两个命令结束后才能够设置模式寄存器(MODE register set)。
    模式寄存器需要根据需要来设定
    在这里插入图片描述
    Burst Length(突发长度):SDRAM可以进行突发“读”或突发“写"。以突发写为例子,假如当前突发写长度为4,在写入数据时只需要给出写的首地址,再连续给出需要写入的4个数据,第一个数据会写入首地址,第二个数据会自动写到下个地址以此类推。
    Burst Type(突发类型):突发类型一个有两种类型,顺序型和交错型,建议使用顺序型。
    CAS Latency(延时):为了采样得到更准确的数据建议选择延时2.
    OP Code:选择突发“读”和突发“写”模式。
    这样SDRAM模式寄存器基本设置完成。

  5. SDRAM初始化波形图
    在这里插入图片描述
    波形图是根据芯片手册得到的,波形图中的延时是厂家提供参考使用的,但在实际使用中个人建议把延时再加长一些,例如芯片上电延时100us能够改成200us或者其它时间也行,但必须大于或等于厂家提供的100us,否则芯片设置失败。

  6. SDRAM代码
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述以上是SDRAM初始化配置及代码,如有错误的地方还望大神们之处。谢谢!

int main(void) { /* USER CODE BEGIN 1 */ FRESULT res; /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ i2c.initialize(); axp152.initialize(); axp152.set_dcdc1(3500);//[ARM & FPGA BK1/2/6 &OTHER] axp152.set_dcdc2(1200);//[FPGA INT & PLL D] axp152.set_aldo1(2500);//[FPGA PLL A] axp152.set_dcdc4(3300);//[POWER_OUTPUT] axp152.set_dcdc3(3300);//[FPGA BK4][Adjustable] axp152.set_aldo2(3300);//[FPGA BK3][Adjustable] axp152.set_dldo1(3300);//[FPGA BK7][Adjustable] axp152.set_dldo2(3300);//[FPGA BK5][Adjustable] HAL_Delay(500); /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_FMC_Init(); MX_SDMMC1_SD_Init(); MX_FATFS_Init(); MX_LTDC_Init(); MX_TIM12_Init(); MX_CRC_Init(); /* USER CODE BEGIN 2 */ BSP_SDRAM_Init(); MX_FATFS_Init(); lcd.initialize(); HAL_TIM_PWM_Start(&htim12,TIM_CHANNEL_1); LED_ON; GUI_Init(); GUI_SetBkColor(GUI_BLACK); GUI_Clear(); LCD_ON; //判断是否为电容触摸 touch_type = gt911.initialize(); if(touch_type != TOUCH_CAP){ touch_type = TOUCH_RES; } res = f_mount(&fatfs,"0:",1); if(res != RES_OK){ GUI_SetColor(GUI_RED); GUI_SetFont(&GUI_FontFixedsys16); GUI_DispStringHCenterAt("f_mount Error!",480/2,272/2); while(1){ } } GUI_SetColor(GUI_WHITE); if(touch_type == TOUCH_RES){ power_on.check_touch(); } GUI_Clear(); GUI_CURSOR_Show(); frame.process(); //界面处理 /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ }
最新发布
03-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值