用户工具

站点工具


icore4tx_14

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
上一修订版 两侧同时换到之后的修订记录
icore4tx_14 [2020/07/28 15:29]
fmj
icore4tx_14 [2022/04/01 17:04]
sean
行 2: 行 2:
 |技术支持电话|**0379-69926675-801**||| |技术支持电话|**0379-69926675-801**|||
 |技术支持邮件|Gingko@vip.163.com||| |技术支持邮件|Gingko@vip.163.com|||
-|技术论坛|http://​www.eeschool.org||| 
 ^  版本 ​ ^  日期 ​ ^  作者 ​ ^  修改内容 ​ ^ ^  版本 ​ ^  日期 ​ ^  作者 ​ ^  修改内容 ​ ^
 |  V1.0  |  2020-07-28 ​ |  gingko ​ |  初次建立 ​ |  |  V1.0  |  2020-07-28 ​ |  gingko ​ |  初次建立 ​ | 
行 10: 行 9:
 \\ \\
  
-=====STM32CubeMX教程十——QSPI通信实验 =====+=====STM32CubeMX教程十——SDRAM实验 =====
 \\ \\
 \\ \\
行 28: 行 27:
 {{ :​icore4tx:​icore4tx_cube_13_6.png?​direct |}}  {{ :​icore4tx:​icore4tx_cube_13_6.png?​direct |}} 
 {{ :​icore4tx:​icore4tx_cube_13_7.png?​direct |}}  {{ :​icore4tx:​icore4tx_cube_13_7.png?​direct |}} 
-7.设置串口+7.设置串口。
 {{ :​icore4tx:​icore4tx_cube_13_8.png?​direct |}}  {{ :​icore4tx:​icore4tx_cube_13_8.png?​direct |}} 
-8.在NVIC Settings一栏使能接收中断。+8.配置FMC
 {{ :​icore4tx:​icore4tx_cube_13_9.png?​direct |}}  {{ :​icore4tx:​icore4tx_cube_13_9.png?​direct |}} 
-9.配置QUADSPI+9.在 NVIC Settings 一栏使能接收中断
 {{ :​icore4tx:​icore4tx_cube_13_10.png?​direct |}}  {{ :​icore4tx:​icore4tx_cube_13_10.png?​direct |}} 
 10.时钟源设置,选择外部高速时钟源,配置为最大主频。 10.时钟源设置,选择外部高速时钟源,配置为最大主频。
 {{ :​icore4tx:​icore4tx_cube_13_11.png?​direct |}}  {{ :​icore4tx:​icore4tx_cube_13_11.png?​direct |}} 
 {{ :​icore4tx:​icore4tx_cube_13_12.png?​direct |}}  {{ :​icore4tx:​icore4tx_cube_13_12.png?​direct |}} 
-11.工程文件的设置,​ 这里就是工程的各种配置 我们只用到有限几个,其他的默认即可 ​ IDE我们使用的是 MDK V5.27。+11.工程文件的设置,​ 这里就是工程的各种配置 我们只用到有限几个,其他的默认即可IDE我们使用的是MDK V5.27。
 {{ :​icore4tx:​icore4tx_cube_13_13.png?​direct |}}  {{ :​icore4tx:​icore4tx_cube_13_13.png?​direct |}} 
 12.点击Code Generator,进行进一步配置。 12.点击Code Generator,进行进一步配置。
行 54: 行 53:
     * 缺点:复制到其他电脑上或者软件包位置改变,就需要修改相对应的路径     * 缺点:复制到其他电脑上或者软件包位置改变,就需要修改相对应的路径
   * 自行选择方式即可   * 自行选择方式即可
-13.然后点击GENERATE CODE  创建工程。+13.然后点击GENERATE CODE创建工程。
 {{ :​icore4tx:​icore4tx_cube_13_15.png?​direct |}}  {{ :​icore4tx:​icore4tx_cube_13_15.png?​direct |}} 
 创建成功,打开工程。 创建成功,打开工程。
 \\ \\
 \\ \\
-===== 实验十QSPI通信实验——读写测试SPI FLASH =====+===== 实验十SDRAM实验——读写测试SDRAM =====
  
 ==== 一、 实验目的与意义 ==== ==== 一、 实验目的与意义 ====
-  - 了解STM32 ​QSPI结构。 +  - 了解STM32 ​SDRAM结构。 
-  - 了解STM32 ​QSPI特征。 +  - 了解STM32 ​SDRAM特征。 
-  - 掌握QSPI的使用方法。 +  - 掌握SDRAM的使用方法。 
-  - 掌握STM32 HAL库中QSPI属性的配置方法。 +  - 掌握STM32 HAL库中SDRAM属性的配置方法。 
-  - 掌握KEILMDK 集成开发环境使用方法。+  - 掌握KEILMDK集成开发环境使用方法。
 ==== 二、 实验设备及平台 ==== ==== 二、 实验设备及平台 ====
   - iCore4TX 双核心板[[https://​item.taobao.com/​item.htm?​spm=a1z10.1-c-s.w4004-22598974120.3.29da532fLkazHH&​id=614919247574|点击购买]]。   - iCore4TX 双核心板[[https://​item.taobao.com/​item.htm?​spm=a1z10.1-c-s.w4004-22598974120.3.29da532fLkazHH&​id=614919247574|点击购买]]。
行 75: 行 74:
   - 装有WIN XP(及更高版本)系统的计算机。   - 装有WIN XP(及更高版本)系统的计算机。
 ==== 三、 实验原理 ==== ==== 三、 实验原理 ====
-=== 1.QSPI简介 ===+=== 1.SDRAM简介 ===
  
-  * QSPI是Queued SPI的简写,是Motorola公司推出SPI接口的扩展比SPI用更加广泛。在SPI协议基础上Motorola公司其功能进行了增强增加了队列传输机制推出了队列串行外围口协议(即QSPI协议)QSPI是种专用通信接口连接单、双或四(条数据线)SPI Flash存储介质 +  * 同步动态随机存取内存(synchronous dynamic random-access memory简称 SDRAM)有一个同步接口动态随机存取内存(DRAM)。通常 DRAM 是有一个异步接口的,这样它可以随时响控制输入的变化而 SDRAM 有一个同步接口,响应控制输入前会等待一个时钟信号,这样就能和计算机系统总线同步。时钟被用来驱动一个有限状态机,对进入的指令进行管线(Pipeline)操作。这使得 SDRAM 与没有同步接口的异 DRAM(asynchronousDRAM)相比可以有一个更复杂的操作模式。管线意味着芯片可以在处理完之前的指令前,接受一个新的指令个写入管线中写入命令在另一个指令执行完之后可以立刻执行,而不需要等待数据写入存储队列的时间。在一个读取的流水线中,需要的数据在读取指令发出之后固定数量的时钟频率后到达,而这个等待的过程可发出其它附加指令。 
-  * 该接口可以在以下三种模式下工作: +  * SDRAM 是多 Bank 结构,例如在一个具有两个 Bank 的 SDRAM 的模组中,其中一个Bank 在进行预充电期,另一个 Bank 却马上可以被读取,这样当进行一次读取后,又马上去读取已经预充电 Bank 的数据时,就无需等待而是可以直读取了,这也就大大提高了的访问速度。为了实现这个功能,SDRAM 需要增加对多个 Bank 的管理,实现控制其中的 Bank 进预充电。在一个具有 2 个以上 Bank 的 SDRAM 中,一般会多一根叫做 BAn的引脚,用来实现在多个 Bank 之间的选择。 
-  * **① 间接模式**:使用QSPI寄存器全部操作。 +  * SDRAM 具有多种工作模式,内操作是一个复杂的状态机。SDRAM ​件的引脚分为以下几类。 
-  * **② 状态轮询模式**:周期性读取外Flash状态寄存,而且标志位置1时会产生中断(如擦除或烧完成,会产生中断)。 +  * (1)控制信号:包括片选、钟、时钟使能、行列地址选择、读有效及数据有效。 
-  * **③ 内存映射模式**外部Flash映射到微控制地址空间,从而系统将其视作内部存储器。 +  * (2)地址信号时分复用引脚,根据行列地址选择引脚,控制输入的地址为行地址或列地址。 
-  * 采用闪存模式时同时访问两个Quad-SPI Flash,吞吐量容量均提高二倍。 +  * (3)数据信号:向引脚受数据有效控制。 
-=== 2.QSPI命令序列 === +  * SDRAM的所有操作都步于钟。根据时钟上升沿控制管脚地址输入的状态,以产生多种输入命令:​模式寄存器设置命令、激活命令、预充命令、读命令写命令带预充的读命、带预充的写命令、自动刷新命令自我刷新命令、突发停命令、空操作命令根据输入命令,SDRAM状态内部状态间转移内部状态包括模式寄存器设置状态、激活状态、预充状态、写状态、读状态、预充读状态、预充写状态、自动刷新状态及自我刷新状态。 
-  * QUADSPI通过命令与Flash通信,每条命令包括指令、地址交替字节空指和数据这五个阶段,任一阶段均可跳过,但至少要包含指令、地址交替字节或数据阶段之一nCS在每条指开始前下降,在每条指令完成后再次上升如图为QSPI四线模式的读命令时序+  * SDRAM 支持操作命令有初始化配置、预充电、行激活、操作、写操作、自动刷新、自刷新等。所有的操作命令通过控制线 CS#​、RAS#​、CAS#​、WE#​和地址线、体选地址BA输入 
 +=== 2.W9825G6JB命令表 ===
 {{ :​icore4tx:​icore4tx_arm_hal_13_1.png?​direct |}} {{ :​icore4tx:​icore4tx_arm_hal_13_1.png?​direct |}}
 +=== 3.FMC简介 ===
 +  * STM32H750使用FMC外设来管理扩展的存储器,FMC是Flexible Memory Controller的缩写,译为可变存储控制器。它可以用于驱动包括 SRAM、SDRAM、NOR FLASH以及NAND FLSAH类型的存储器。
 +  * 
 == (1) 指令阶段 == == (1) 指令阶段 ==
  
-  * 这一阶段,将在QUADSPI_CCR[7:​0]寄存器的INSTRUCTION字段中配置的一条8位指令发送到Flash,指定待执行操作的类型。尽管大多数 Flash从IO0/​SO信号(单线 SPI 模式)只能以一次1位的方式接收指令,但指令阶段可选择一次发送2位(在双线SPI模式中通过IO0/​IO1)或一次发送4位(在四线SPI模式中通过IO0/​IO1/​IO2/​IO3)。这可通过 QUADSPI_CCR[9:​8]寄存器中的IMODE[1:​0]字段进行配置。 
-  * 若IMODE = 00,则跳过指令阶段,命令序列从地址阶段(如果存在)开始。 
 == (2) 地址阶段 == == (2) 地址阶段 ==
  
-  * 在地址阶段,将1-4字节发送到Flash,指示操作地址。待发送的地址字节数在QUADSPI_CCR[13:​12]寄存器的ADSIZE[1:​0]字段中进行配置。在间接模式和自动轮询模式下,待发送的地址字节在QUADSPI_AR寄存器的ADDRESS[31:​0]中指定在内存映射模式下,则通过 AHB(来自于 Cortex ® 或 DMA)直接给出地址。地址阶段可一次发送1 位(在单线SPI模式中通过SO)、2位(在双线SPI模式中通过IO0/​IO1)或4位(在四线 SPI 模式中通过 IO0/​IO1/​IO2/​IO3)。这可通过QUADSPI_CCR[11:​10]寄存器中的ADMODE[1:​0]字段进行配置。 
-  * 若ADMODE = 00,则跳过地址阶段,命令序列直接进入下一阶段(如果存在)。 
 == (3) 交换字节阶段 == == (3) 交换字节阶段 ==
  
-  * 在交替字节阶段,将1-4字节发送到Flash,一般用于控制操作模式。待发送的交替字节数在QUADSPI_CCR[17:​16]寄存器的ABSIZE[1:​0]字段中进行配置。待发送的字节在QUADSPI_ABR寄存器中指定。 + 
-  * 交替字节阶段可一次发送1位(在单线 SPI 模式中通过 SO)、2位(在双线SPI模式中通过 IO0/​IO1)或4位(在四线SPI模式中通IO0/​IO1/​IO2/​IO3)。这可通过QUADSPI_CCR[15:​14]寄存器中的ABMODE[1:​0]字段进行配置。 +
-  * 若ABMODE = 00,则跳过交替字节阶段,命令序列直接进入下一阶段(如果存在)。交替字节阶段存在仅需发送单个半字节而不是一个全字节的情况,比如采用双线模式并且仅使用两个周期发送交替字节时。在这种情况下,固件可采用四线模式(ABMODE = 11)并发送一个字节,方法是ALTERNATE的位7和3置“1”(IO3 保持高电平)且位6和2置“0”(IO2 线保持低电平)。此时,半字节的高 2 位存放在ALTERNATE的位 4:3,低 2位存放在位1和0中。例如,如果半字节2 (0010) 通过IO0/​IO1发送,则ALTERNATE 应设置为0x8A (1000_1010)。+
 == (4) 空指令周期阶段 == == (4) 空指令周期阶段 ==
  
-  * 在空指令周期阶段,给定的1-31个周期内不发送或接收任何数据,目的是当采用更高的时钟频率时,给Flash留出准备数据阶段的时间。这一阶段中给定的周期数在QUADSPI_CCR[22:​18]寄存器的DCYC[4:​0]字段中指定。在SDR和DDR模式下,持续时间被指定为一定个数的全时钟周期。若DCYC为零,则跳过空指令周期阶段,命令序列直接进入数据阶段(如果存在)。空指令周期阶段的操作模式由DMODE确定。为确保数据信号从输出模式转变为输入模式有足够的“周转”时间,使用双线和四线模式从Flash接收数据时,至少需要指定一个空指令周期。 
 == (5) 数据阶段 == == (5) 数据阶段 ==
  
-  * 在数据阶段,可从Flash接收或向其发送任意数量的字节。 
-  * 在间接模式和自动轮询模式下,待发送/​接收的字节数在QUADSPI_DLR寄存器中指定。在间接写入模式下,发送到Flash的数据必须写入QUADSPI_DR寄存器。在间接读取模式下,通过读取QUADSPI_DR寄存器获得从 Flash 接收的数据。在内存映射模式下,读取的数据通过AHB直接发送回Cortex或DMA。数据阶段可一次发送/​接收1位(在单线SPI 模式中通过SO)、2位(在双线 SPI 模式中通过IO0/​IO1)或4位(在四线SPI模式中通过IO0/​IO1/​IO2/​IO3)。这可通过QUADSPI_CCR[15:​14] 寄存器中的ABMODE[1:​0]字段进行配置。若DMODE = 00,则跳过数据阶段,命令序列在拉高nCS时立即完成。这一配置仅可用于仅间接写入模式。 
 ==== 四、 实验程序 ==== ==== 四、 实验程序 ====
  
icore4tx_14.txt · 最后更改: 2022/04/02 11:58 由 sean