티스토리 뷰
21. SDRAM(Synchronous Dynamic RAM)
-동기식 DRAM이라고도 불리며 빠른 속도로 데이터 입출력이 가능한 메모리이다
-아래 예제는 SDRAM 메모리를 제어한다
STM32F429 Discovery Board에는 External Bank2 위치에 장착되어 있다
현재 장착되어 있는 SDRAM은 64MBIT 크기다
한 주소번지당 1Byte의 데이터를 가르키므로 주소번지는 8MB 즉, 0xD000 0000 ~ 0xD07F FFFF까지 사용이 가능하다
STM32F429 Discovery SDRAM 회로도
위 그림은 STM32F429 Discovery Board의 회로도 이다. SDCKE1, SDNE1자리에 SDRAM이 장착 되어 있기 때문에 CUBE MX에서 SDCKE1, SDNE1 (Internal Bank2)을 선택할 예정이다.
Internal Bank 구성도
CUBE MX 설정
STM32F429-Discovery Board에 있는 SDRAM이 IS42S16400J-7이므로 Key TIMING PARAMETERS에서 -7을 보면 된다
이번 설정에서는 CAS Latency = 2를 이용할 것이다.
CAS Latency = 2일 경우 최대 clock = 133Mhz 가능하며 현재 이번 설정은 100Mhz/2(SDRAM common clock) = 50Mhz로 사용 가능하다
16-bit byte enable: 미체크시 데이터가 마음대로 바뀜.
Write Protection: 쓰기 금지를 설정 여부
SDRAM common clock: SDRAM에 공급되는 클럭값을 설정한다 현재 2HCLK clock cycles이므로 100Mhz(HCLK) / 2 = 50Mhz의 클럭이 SDRAM에 공급된다
SDRAM common burst read: 버스트 읽기 모드를 활성화합니다. SDRAM 컨트롤러는 CAS 대기 시간 동안 다음 읽기 명령을 예상하고 읽기 FIFO에 데이터를 저장합니다.
FMC_SDCR2 레지스터의 해당 비트는 상관 없습니다.(해당 기능의 설명 번역)
SDRAM common read pipe delay: CAS 대기 시간 후 데이터를 읽기위한 HCLK 클록 사이클의 지연을 지정합니다.(해당 기능의 설명 번역)
SDRAM CLK Frequency = 50Mhz
SDRAM CLK Period = 20ns
Load mode register to active delay(tMRD): 2
Exit self-refresh delay(tXSR): 4 (20ns*4 > 70ns)
Self-refresh time(tRAS): 3(20ns*3> 42ns)
SDRAM common row cycle delay(tRC): 4 (20ns*4 > 63ns)
Write recovery time(tWR): 2
SDRAM common row precharge delay(tRP): 1 (20ns*1 > 15ns)
Row to column delay(tRCD): 1(20ns*1 > 15ns)
소스코드
/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
FMC_SDRAM_CommandTypeDef command;
/* USER CODE END PV */
/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*/
static void SDRAM_Initialization_Sequence(SDRAM_HandleTypeDef *hsdram,
FMC_SDRAM_CommandTypeDef *Command);
/* USER CODE END PFP */
/* USER CODE BEGIN 2 */
SDRAM_Initialization_Sequence(&hsdram1, &command);
*(__IO uint32_t*) (0xd0000000) = 0x12345678;
/* USER CODE END 2 */
/* USER CODE BEGIN 4 */
static void SDRAM_Initialization_Sequence(SDRAM_HandleTypeDef *hsdram,
FMC_SDRAM_CommandTypeDef *Command){
__IO uint32_t tmpmrd = 0;
/* Step 3: Configure a clock configuration enable command */
Command->CommandMode = FMC_SDRAM_CMD_CLK_ENABLE;
Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
Command->AutoRefreshNumber = 1;
Command->ModeRegisterDefinition = 0;
/* Send the command */
HAL_SDRAM_SendCommand(hsdram, Command, 0x1000);
/* Step 4: Insert 100 ms delay */
HAL_Delay(100);
/* Step 5: Configure a PALL (precharge all) command */
Command->CommandMode = FMC_SDRAM_CMD_PALL;
Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
Command->AutoRefreshNumber = 1;
Command->ModeRegisterDefinition = 0;
/* Send the command */
HAL_SDRAM_SendCommand(hsdram, Command, 0x1000);
/* Step 6 : Configure a Auto-Refresh command */
Command->CommandMode = FMC_SDRAM_CMD_AUTOREFRESH_MODE;
Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
Command->AutoRefreshNumber = 4;
Command->ModeRegisterDefinition = 0;
/* Send the command */
HAL_SDRAM_SendCommand(hsdram, Command, 0x1000);
/* Step 7: Program the external memory mode register */
// Write burst: single location access
// Standard operation, CAS latency: 2, Sequential
// Burst length: 2
tmpmrd = (uint32_t) 0x00000221;
Command->CommandMode = FMC_SDRAM_CMD_LOAD_MODE;
Command->CommandTarget = FMC_SDRAM_CMD_TARGET_BANK2;
Command->AutoRefreshNumber = 1;
Command->ModeRegisterDefinition = tmpmrd;
/* Send the command */
HAL_SDRAM_SendCommand(hsdram, Command, 0x1000);
/* Step 8: Set the refresh rate counter */
// refresh rate = refresh period / number of rows
// refresh rate = 64ms / 4096 = 15.62us
// refresh count = (refresh rate x SDRAM clock frequency) - 20
// refresh count = 15.62us x 25MHz - 20 = 369
HAL_SDRAM_ProgramRefreshRate(hsdram, 369);
}
/* USER CODE END 4 */
실행 결과
0xD000 0000 주소번지에 0x1234 5678의 값이 저장되어있다.
'STM32Fxx' 카테고리의 다른 글
STM32F429 - ADC DMA (0) | 2018.11.21 |
---|---|
STM32F429 - SPI DMA (1) | 2018.11.10 |
STM32F429 - UART DMA (0) | 2018.11.10 |
STM32F429-TIM DMA (0) | 2018.11.08 |
STM32F429-DMA IT (Direct Memory Access Interrupt) (0) | 2018.11.08 |
- Total
- Today
- Yesterday
- 틀고정
- 파일복사
- mkdir
- STM32F
- 홈서비스
- STM 입출력
- atmega128 설치
- STM32F429 GPIO
- Excel
- atmel studio 설치
- atmel studio7
- 보증보험
- atmega 개발
- atmega 설치방법
- CUBE MX GPIO
- filecopy
- vba
- Dir
- STM CUBE MX
- 폴더생성
- 제목행
- GPIO
- 수은건전지
- 중기청
- STM32F429
- STM32F GPIO
- 중소기업청년
- STM GPIO
- 착한운전자마일리지
- 전세지킴보증서
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |