24 SEMC相关

文章目录

  • 24.1 SEMC 简介
  • 24.2 SEMC 框图剖析
    • 24.2.1 通讯引脚
      • 24.2.1.1 SEMC 的片选信号
      • 24.2.1.2 数据选通信号 DQS
    • 24.2.2 存储器控制器
    • 24.2.3 IP 命令和 AXI 命令
    • 24.2.4 驱动时钟
  • 24.4 SEMC 初始化配置结构体
    • 24.4.1 dqsMode
    • 24.4.2 cmdTimeoutCycles
    • 24.4.3 busTimeoutCycles
    • 24.4.4 queueWeight

24.1 SEMC 简介

RT10529使用SEMC外设来管理扩展的存储器,SEMC是Smart External Memory Controller的缩写,译为智能的外部存储控制器。

  • 可以用于驱动包括 SRAM、SDRAM、NorFlash、NAND Flash 等类型的存储器以及使用 8080 接口协议(DBI 接口)的显示器和设备。
  • SEMC 支持使用 8、16 位的方式访问 SDRAM,最多支持控制 4 个 SDRAM 存储器,每个 SDRAM存储器最大容量为 512Mb(64MByte),支持使用 ARM 内核的 AXI 接口控制SDRAM。

24.2 SEMC 框图剖析

在这里插入图片描述

24.2.1 通讯引脚

右侧显示的是 SEMC 与外部多种类型存储设备的连接

  • 地址线 SEMC_ADDR 和数据线 SEMC_DA 是所有控制器都共用的

24.2.1.1 SEMC 的片选信号

SEMC 外设把 SDRAM 的控制分成了 Region#0/1/2/3 四个区域

  • 控制时每个区域有一个对应的片选信号 CS0/1/2/3
  • 每个区域可以连接到一个外部 SDRAM 存储器进行控制
  • 当触发访问到某区域时,与之对应的片选信号会使能与其连接的 SDRAM

RT1052 提供了可软件定制信号的引脚 SEMC_CSX0/1/2/3,它们中的任意一个引脚都可以“变形”成 CS1/2/3 中的任意一个信号

  • CS0 片选信号只能使用 SEMC_CS0 引脚

在这里插入图片描述

24.2.1.2 数据选通信号 DQS

在 RT1052 中包含一个数据选通信号 SEMC_DQS,它是 DDR 类型的 SDRAM 中才有的信号

  • 功能主要用来在一个时钟周期内准确地区分出每个传输周期,并便于接收方准确接收数据。
  • 它是双向的,在写入时它用来传送由主控芯片发来的 DQS 信号,读取时,则由 SDRAM 芯片生成 DQS向主控发送,完全可以说,它就是数据的同步信号。

RT1052 不支持驱动 DDR 类型的 SDRAM

  • 设计硬件时,必须使 RT1052 的这个 SEMC_DQS 引脚悬空
  • 在软件配置方面必须开启该引脚的 SION 功能
  • 而且要把 SEMC的模块控制寄存器 MCR[DQSMD] 位置 1,即配置为使用 DQS 引脚的读选通信号

24.2.2 存储器控制器

SEMC 外设内部包含有 SDRAM/NOR/SRAM/NAND/8080 设备使用的不同控制器

  • 不同的控制器有专用的寄存器用于配置其工作模式。

例如配置 SEMC 通用控制的寄存器主要有 MCR、IOCR、BMCR0/1、IPCR0/1/2、IPCMD 以及 IP-TXDAT/IPRXDAT;

  • SDRAM 专用的控制寄存器的为 BR0/1/2/3 以及 SDRAMCR0/1/2/3;
  • NAND的专用控制寄存器为 BR4/8 以及 NANDCR0/1/2/3。

24.2.3 IP 命令和 AXI 命令

使用 FlexSPI 外设时,有 IP 命令和 AHB 命令两种方式,SEMC 外设也类似,它支持使用 IP 命令和 AXI 命令控制外部存储器。

  • 其中 AXI 是 Advanced eXtensible Interface 的缩写,这是 ARM 公司提出的 AMBA 协议的一部分,是一种高性能、高带宽、低延迟的片内总线。

24.2.4 驱动时钟

控制 SDRAM 时,SEMC的 SEMC_CLK 线的时钟信号是由 SEMC 根时钟 SEMC_CLK_ROOT 提供的
在这里插入图片描述

SEMC 根时钟有 3 个可选输入来源:

  • PLL2 PFD2:该时钟常规配置为 396MHz,为了 SDRAM 运行更稳定,本开发板把该时钟配置为 316.8MHz。
  • PLL3 PFD1:该时钟常规配置为 454.74MHz。
  • PERIPH CLK: 这 是 AHB_CLK_ROOT 的 时 钟 源,PERIPH CLK 分 频 后 得 到AHB_CLK_ROOT,SEMC 也可以使用这个时钟源

时钟源经过一个 3 位的分频器,它可对时钟进行 1~8 分频,分频后得到 SEMC 根时钟 SEMC_CLK_ROOT。

24.4 SEMC 初始化配置结构体

SEMC 配置结构体 semc_config_t

/*!
2 * @brief SEMC 配置结构体
3 * busTimeoutCycles: 当 busTimeoutCycles 设置为 0 时 , 总线的超时周期为
4 * 255*1024. 使用其它值时,总线周期为 busTimeoutCycles*1024
5 * cmdTimeoutCycles: 用于设置命令执行超时周期,与 busTimeoutCycles 类似
6 */
7 typedef struct _semc_config_t {
8 semc_dqs_mode_t dqsMode; /*!< Dummy 读选通模式 */
9 uint8_t cmdTimeoutCycles; /*!< 命令执行超时周期 */
10 uint8_t busTimeoutCycles; /*!< 总线超时周期 */
11 semc_axi_queueweight_t queueWeight; /*!< AXI queue weight. */
12 } semc_config_t;

24.4.1 dqsMode

寄存器位 MCR[DQSMD],它用于选择 DQS 的读选通模式

  • 可选值分别为使用内部回环的读选通信号(kSEMC_Loopbackinternal)和从 DQS 引脚得到的读选通信号(kSEMC_Loopbackdqspad)。
  • DQS 信号用于接收方更准确地接收数据,应用时需要把它设置成 kSEMC_Loopbackdqspad 才能以高频率的时钟访问 SDRAM

24.4.2 cmdTimeoutCycles

寄存器位 MCR[CTO],它用于设定命令执行超时周期

  • 当 SEMC 命令的执行时间超过该配置值时,可触发 IPCMDERR 和 AXICMDERR 中断。
  • 当此成员被赋值为 0 时,超时周期被配置为 2561024 个时钟周期,赋为其它值时被配置为 cmdTimeoutCycles1024。

24.4.3 busTimeoutCycles

寄存器位 MCR[BTO],它用于设定 AXI 总线超时周期

  • 当此成员被赋值为 0 时,超时周期被配置为 2551024 个时钟周期,赋为其它值时被配置为 busTimeoutCycles1024。

24.4.4 queueWeight

寄存器位 BMCR0/1,在 AXI 接口控制器中包含有 Queue A 和 Queue B 两个队列用来缓冲
AXI 访问触发的请求

  • queueWeight 就是用于定制 Queue A 和 Queue B 相关的权重配置,本成员本身也是一个结构体类型
1 /*! @brief SEMC AXI queue 权重配置 */
2 typedef struct _semc_axi_queueweight {
3 semc_queuea_weight_t *queueaWeight; /*!< queue a 的权重配置 */
4 semc_queueb_weight_t *queuebWeight; /*!< queue b 的权重配置 */
5 } semc_axi_queueweight_t;
6
7 /*! @brief SEMC AXI queue a 权重配置 */
8 typedef struct _semc_queuea_weight {
9 /*!< queue 0 的 qos 权重配置 */
10 uint32_t qos : 4;
11 /*!< queue 0 的 aging 权重配置 */
12 uint32_t aging : 4;
13 /*!< queue 0 的读 / 写切换( switch )权重配置 */
14 uint32_t slaveHitSwith : 8;
15 /*!< queue 0 的读 / 写无切换( no switch )权重配置 */
16 uint32_t slaveHitNoswitch : 8;
17 } semc_queuea_weight_t;
18
19 /*! @brief SEMC AXI queue b 权重配置 */
20 typedef struct _semc_queueb_weight {
21 /*!< queue 1 的 qos 权重配置 */
22 uint32_t qos : 4;
23 /*!< queue 1 的 aging 权重配置 */
24 uint32_t aging : 4;
25 /*!< queue 1 的读 / 写切换( switch )权重配置 */
26 uint32_t slaveHitSwith : 8;
27 /*!< queue 1 的页碰撞( page hit )权重配置 */
28 uint32_t weightPagehit : 8;
29 /*!< queue 1 的 bank 翻转 (bank rotation) 权重 */
30 uint32_t bankRotation : 8;
31 } semc_queueb_weight_t;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/461787.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言自定义类型详解进阶】结构体(补充结构体的对齐和位段,一口气看完系列,央妈都点赞的博文)

目录 1.结构体 1.1 结构的基础知识 1.2 结构的声明 1.2.1特殊的声明&#xff08;匿名结构体类型&#xff09; 1.3结构体变量的定义 1.4关于匿名结构体类型的补充 1.5结构体的自引用 1.6结构体变量的初始化 2.结构体内存对齐&#xff08;重点&#xff09; 2.1偏移量补…

MySQL篇----第十六篇

系列文章目录 文章目录 系列文章目录前言一、数据库中的事务是什么?二、SQL 注入漏洞产生的原因?如何防止?三、为表中得字段选择合适得数据类型四、存储时期前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇…

Qt PCL学习(二):点云读取与保存

注意事项 版本一览&#xff1a;Qt 5.15.2 PCL 1.12.1 VTK 9.1.0前置内容&#xff1a;Qt PCL学习&#xff08;一&#xff09;&#xff1a;环境搭建 0. 效果演示 1. pcl_open_save.pro QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgets// 添加下行代码&#…

昆仑万维发布天工 2.0 大语言模型及AI助手App;AI成功破解2000年前碳化古卷轴

&#x1f989; AI新闻 &#x1f680; 昆仑万维发布天工 2.0 大语言模型及AI助手App 摘要&#xff1a;昆仑万维近日推出了新版MoE大语言模型“天工 2.0”和相应的“天工 AI 智能助手”App&#xff0c;宣称为国内首个面向C端用户免费的基于MoE架构的千亿级参数大模型应用。天工…

Javaweb之SpringBootWeb案例之异常处理功能的详细解析

3. 异常处理 3.1 当前问题 登录功能和登录校验功能我们都实现了&#xff0c;下面我们学习下今天最后一块技术点&#xff1a;异常处理。首先我们先来看一下系统出现异常之后会发生什么现象&#xff0c;再来介绍异常处理的方案。 我们打开浏览器&#xff0c;访问系统中的新增部…

【Java八股面试系列】JVM-常见参数设置

目录 堆内存相关 显式指定堆内存–Xms和-Xmx 显式新生代内存(Young Generation) 显式指定永久代/元空间的大小 垃圾收集相关 垃圾回收器 GC 日志记录 处理 OOM JDK监控和故障处理工具总结 堆内存相关 Java 虚拟机所管理的内存中最大的一块&#xff0c;Java 堆是所有线…

ncc匹配(五,匹配提速的思考)

感觉ncc&#xff08;相关系数匹配&#xff09;与bpnet&#xff08;bp神经网络&#xff09;相似&#xff0c;但ncc简洁方便快速&#xff0c;计算量小&#xff0c;问题点也少。 都有归一化的动作&#xff0c;都是相关性的学习&#xff0c;不过bpnet可以学习多种类型&#xff0c;…

机器学习10-特征缩放

特征缩放的目的是确保不同特征的数值范围相近&#xff0c;使得模型在训练过程中更加稳定&#xff0c;加速模型收敛&#xff0c;提高模型性能。具体而言&#xff0c;零均值和单位方差的目标有以下几点好处&#xff1a; 1. 均值为零&#xff08;Zero Mean&#xff09;&#xff1a…

University Program VWF仿真步骤__全加器

本教程将以全加器为例&#xff0c;选择DE2-115开发板的Cyclone IV EP4CE115F29C7 FPGA&#xff0c;使用Quartus Lite v18.1&#xff0c;循序渐进的介绍如何创建Quartus工程&#xff0c;并使用Quartus Prime软件的University Program VWF工具创建波形文件&#xff0c;对全加器的…

Linux——进程池(管道)

经过了管道的介绍之后&#xff0c;我们可以实现了进程间通信&#xff0c;现在我就来简单介 绍一下管道的应用场景——进程池。1. 引入 在我们的编码过程中&#xff0c;不乏会听到&#xff0c;内存池&#xff0c;进程池&#xff0c;空间配置器等等名词&#xff0c;这些是用来干…

PV、UV、IP

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1. PV1.1 PV 计算1.2 PV 的影响因素 2. UV2.1 UV 计算2.2UV 的影响因素 3. IP3.1 IP和UV①UV大于IP②UV小于IP 三者的关系PV 和 UV 前言 PV、UV、IP是我们在运…

【汇编】简单的linux汇编语言程序

一、Linux系统汇编语言 Linux系统上的汇编语言可以使用不同的语法风格&#xff0c;主要包括Intel语法和AT&T语法。这两种语法有各自的特点和风格区别&#xff0c;尽管它们表示的底层机器指令相同。下面分别对两种语法进行简要说明&#xff1a; Intel语法 Intel语法是由I…