1348|3

441

帖子

3

TA的资源

纯净的硅(高级)

楼主
 

【STM32F723 Discovery Kit】外扩SRAM存储器读写测试 [复制链接]

本帖最后由 TL-LED 于 2023-9-23 10:22 编辑

这篇来测试下开发板外扩SRAM存储器的读写。

 

一、外扩SRAM硬件电路

 

1.1、外扩SRAM电路图部分

 

1.2、SRAM存储器的地址范围

 

SRAM 接在STM32的FMC总线接口,看下手册中FMC外扩存储器的框图

SRAM存储器使用了FMC_NE1接口,对应的存储器地址如下

存储地址范围:0X6000 0000 ~ 0x6FFF FFFF

 

 

1.3、存储器容量

 

看下开发板使用的这款芯片的存储空间大小

从芯片手册上看,存储空间是8Mbit,512K*16位的存储空间。

 

 

二、测试程序

 

测试程序对sram芯片1MB范围内数据的读写测试,存储地址存取每次增加4000。

 

2.1、sram.c

#include "sram/sram.h"
#include "usart/usart.h"

#define BUFFER_SIZE         ((uint32_t)0x8000)
#define WRITE_READ_ADDR     ((uint32_t)0x0800)
#define WRITING_OFFSET      ((uint32_t)0xC20F)

SRAM_HandleTypeDef psramHandle;
FMC_NORSRAM_TimingTypeDef Timing;

uint8_t aTxBuffer[BUFFER_SIZE];
uint8_t aRxBuffer[BUFFER_SIZE];

__IO uint32_t uwWriteReadStatus = 0;

uint32_t uwIndex = 0;

//uint32_t sram_test_buffer[200000] __attribute__((at(SRAM_BANK_ADDR)));

static void Error_Handler(void)
{
  printf("error\r\n");
  while (1)
  {
  }
}


void sram_Init(void)
{
  /* SRAM device configuration */
  psramHandle.Instance = FMC_NORSRAM_DEVICE;
  psramHandle.Extended = FMC_NORSRAM_EXTENDED_DEVICE;
  
  /* Timing configuration derived from system clock (up to 200Mhz)
     for 100Mhz as SRAM clock frequency */
  Timing.AddressSetupTime      = 9;
  Timing.AddressHoldTime       = 2;
  Timing.DataSetupTime         = 6;
  Timing.BusTurnAroundDuration = 1;
  Timing.CLKDivision           = 2;
  Timing.DataLatency           = 2;
  Timing.AccessMode            = FMC_ACCESS_MODE_A;
  
  psramHandle.Init.NSBank             = FMC_NORSRAM_BANK1;
  psramHandle.Init.DataAddressMux     = FMC_DATA_ADDRESS_MUX_DISABLE;
  psramHandle.Init.MemoryType         = FMC_MEMORY_TYPE_SRAM;
  psramHandle.Init.MemoryDataWidth    = SRAM_MEMORY_WIDTH;
  psramHandle.Init.BurstAccessMode    = FMC_BURST_ACCESS_MODE_DISABLE;
  psramHandle.Init.WaitSignalPolarity = FMC_WAIT_SIGNAL_POLARITY_LOW;
  psramHandle.Init.WaitSignalActive   = FMC_WAIT_TIMING_BEFORE_WS;
  psramHandle.Init.WriteOperation     = FMC_WRITE_OPERATION_ENABLE;
  psramHandle.Init.WaitSignal         = FMC_WAIT_SIGNAL_DISABLE;
  psramHandle.Init.ExtendedMode       = FMC_EXTENDED_MODE_DISABLE;
  psramHandle.Init.AsynchronousWait   = FMC_ASYNCHRONOUS_WAIT_DISABLE;
  psramHandle.Init.WriteBurst         = FMC_WRITE_BURST_DISABLE;
  psramHandle.Init.ContinuousClock    = FMC_CONTINUOUS_CLOCK_SYNC_ONLY;

  /* Initialize the SRAM controller */
  if(HAL_SRAM_Init(&psramHandle, &Timing, &Timing) != HAL_OK)
  {
    /* Initialization Error */
    Error_Handler();
  }
}

void sram_test(void)
{
	uint32_t i = 0;
	uint8_t temp = 0;
	
	printf("ext memoory test\r\n");

	printf("\r\nwrite data:\r\n");
	temp=0;
	for (i = 0; i < 1024000; i += 4000)
	{
		aTxBuffer[0]=temp;
		temp++;
		
		HAL_SRAM_Write_8b(&psramHandle, (uint32_t *)(SRAM_BANK_ADDR + i), aTxBuffer, 1);
		printf(" %x",aTxBuffer[0]);
	}
	
	printf("\r\nread data:\r\n");
	temp=0;
	for (i = 0; i < 1024000; i += 4000)
	{
			HAL_SRAM_Read_8b(&psramHandle, (uint32_t *)(SRAM_BANK_ADDR + i), aRxBuffer, 1);
		
			printf(" %x",aRxBuffer[0]);
			aRxBuffer[0]=0;
	}
}

 

2.2、sram.h

#ifndef _SRAM_H
#define _SRAM_H


#include "stm32f7xx_hal.h"

#define SRAM_BANK_ADDR                 ((uint32_t)0x60000000)

/* #define SRAM_MEMORY_WIDTH            FMC_NORSRAM_MEM_BUS_WIDTH_8  */
#define SRAM_MEMORY_WIDTH               FMC_NORSRAM_MEM_BUS_WIDTH_16


#define SRAM_TIMEOUT     ((uint32_t)0xFFFF)


void sram_Init(void);
void sram_test(void);


#endif

 

2.3、main.c

int main(void)
{
  MPU_Config();					/* Configure the MPU attributes */
  CPU_CACHE_Enable();		/* Enable the CPU Cache */
  HAL_Init();
  SystemClock_Config();	/* Configure the system clock to 216 MHz */
  delay_init(216);
  led_init();
  usart_init(115200); 
  sram_Init();
  sram_test();
	
  LED5(0);                                           
  LED6(1);
	
  while (1)
  {
	LED5_TOGGLE();
	LED6_TOGGLE();
    HAL_Delay(100);

  }
}

 

三、程序运行

 

串口输出:

 

 

此帖出自stm32/stm8论坛

最新回复

SRAM要技术支持吗?可以免费支持   详情 回复 发表于 2024-1-2 11:08
点赞 关注
 

回复
举报

1700

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 

程序运行的串口输出应该是正确的

此帖出自stm32/stm8论坛

点评

嗯,测试输出正常  详情 回复 发表于 2023-9-24 18:33
 
 

回复

441

帖子

3

TA的资源

纯净的硅(高级)

板凳
 
火辣西米秀 发表于 2023-9-24 08:30 程序运行的串口输出应该是正确的

嗯,测试输出正常

此帖出自stm32/stm8论坛
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

4
 

SRAM要技术支持吗?可以免费支持

此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
天线 基本概念

完全天线手册基本概念--------------------------------------------------------------------------------天线是FMDX的耳朵,微 ...

电感器、变压器检测方法与经验

三、电感器、变压器检测方法与经验??1?色码电感器的的检测??将万用表置于R×1挡,红、黑表笔各接色码电感器的任一引出端,此时指 ...

实现第二步: 自己DIY一个廉价的C8051编程器并成功读写湿度计开发板

昨天用洞洞板按照我前面帖子提供的图纸焊接出一个并口C8051编程器。 今天一早插到PC机上,运行编程器文件(前面帖子附件可下 ...

留住身边的美景,2015年春天

本帖最后由 mmmllb 于 2015-4-9 12:28 编辑 不知道说现在是春天是否合适:Sweat:,先这么叫着。 话说最近各路的花都开了,有 ...

7660贴片共模电感生产厂家

7660贴片共模电感生产厂家 东莞颐特电子有限公司是一家专门设计生产各种贴片电感、线圈的制造 ...

颁奖:Microchip有奖问答 | 新品 MCU 独立于内核的外设(CIP)技术解密

【活动详情】Microchip有奖问答 | 新品 MCU 独立于内核的外设(CIP)技术解密 请获奖者务必在2021年9月26日23:59前,按照 ...

GD32L233C-START 开发板 学习笔记(四)

GD32L233C-START 开发板学习笔记(四) GD32L23C-START 开发板 Demo例程 打开GD的例程,有没有满满的熟悉感。 int main ...

异常与中断缘何设计的如此复杂——《RISC-V体系结构编程与实践 》读书笔记

本帖最后由 jobszheng5 于 2023-5-11 15:13 编辑 在ARM公司的RISC指令集Cortex-M3系列MCU中,异常与中断的实现与处理非常简 ...

英飞凌XENSIV™ PAS CO2 5V Sensor2Go套件测评(一)

本帖最后由 eew_4FmF97 于 2024-12-16 01:14 编辑 根据采集各种的环境的数据,形成感知,从而为AI提供决策依据,是智能家居系 ...

求助大佬们

本帖最后由 wang1213322d 于 2025-1-10 16:56 编辑 用了Vishay的环境光传感器VEML33293做了个模块,给电视上应用,客户要求我 ...

关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表