QSPI配置字,硬编码为0x01占几个字节是什么意思

I2C 接口_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
阅读已结束,下载本文需要
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩17页未读,
定制HR最喜欢的简历
你可能喜欢您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
第8章 Zynq平台的启动和配置.ppt 113页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
你可能关注的文档:
········
* BootROM错误输出码 ILLEGAL_RETURN 0x8103 如果切换功能没有正确地启动所加载的应用,并且处理器从没有认可的函数返回时,发生ILLEGAL_RETURN。这将引起锁定。 DECRYPTION_FAILED 0x8110 如果在解密安全启动镜像时,发生问题。发生DECRYPTION_FAILED和AUTHENTICATION_FAILED。 AUTHENTICATION_FAILED 0x8111 如果在解密安全启动镜像时,发生问题。发生DECRYPTION_FAILED和AUTHENTICATION_FAILED。 IMAGE_HEADER_FORMAT_ERROR 0x8201 如果其它错误检查不能覆盖镜像的出现的问题,则发生IMAGE_HEADER_FORMAT_ERROR。这也是空白Flash设备的状态。这将引起锁定。 BootROM
--调试状态 * BootROM错误输出码 REGISTER_INIT_FAILED 0x8202 如果在加载和启动前,由BootROM将数据写到寄存器时出现问题,则产生REGISTER_INIT_FAILED。这个错误由超出范围的目标地址触发。这将引起锁定。 BAD_IMAGE_START_ADDRESS 0x8203 当镜像的开始地址不是0或者不在用于XIP的正确地址范围内时,比如:起始地址表示线性四-SPI地址范围。但是,镜像将要加载到NOR时,发生BAD_IMAGE_START_ADDRESS。这将引起锁定。 BootROM
--调试状态 BootROM
--调试状态 EXECUTE_IN_PLACE_ERROR 0x8204 当镜像被加密或者启动源表示NAND,而镜像的头部表示它是一个XIP镜像时,则发生EXECUTE_IN_PLACE_ERROR。这将引起锁定。 BAD_IMAGE_CHECKSUM 0x8205 如果头部的校验和不正确,则发生BAD_IMAGE_CHECKSUM。这将触发黄金镜像搜寻NOR,NAND和QSPI启动模式。这将引起锁定。 EXCEPTION_TAKEN_FAIL 0x8300 EXCEPTION_TAKEN_FAIL是灾难性的。这表示由于一些原因,触发了BootROM异常。任何中断或者异常被认为是一个错误。这引起锁定。 * BootROM错误输出码 * BootROM之后的PS状态,取决于: 是否使能安全模式。 设置的模式引脚。 是否有错误。 当退出BootROM时,模式引脚将影响下面: 哪个MIO使能,以及I/O标准的设置。 模式设置还暗示了启动外设的设置。 比如:如果选择四-SPI为启动源,为了从Flash读取,需要使能所需的MIO,以及对四-SPI控制器进行必要的设置。 BootROM
--BootROM后安全性 * BootROM
--BootROM后安全性 在BootROM之后的PS状态,通常是: 如果使能安全模式,AES引擎访问BootROM。 如果Zynq-7000设备非安全启动,则禁止AES引擎。 默认时,在完成安全的PS第一级启动时,加密逻辑保持使能。当AES使能时,用户负责维护PCAP-ICAP接口。
* 在退出安全性前,BootROM锁定DevC模块内的大量的 比特位。下表给出了BootROM锁定了比特位。 BootROM
--BootROM后安全性 Dev_CFG锁定寄存器 比特位置 比特位名字 锁定状态 4 AES_FUSE_LCOK 1 3 AES_EN_LOCK 1(1) 2 SEU_LOCK 0 1 SEU_LOCK 1 0 DBG_LOCK 0
注意:只在NON_SECURE启动模式下,锁定ES_EN_LOCK比特。 * JTAG调试接口的关键包括: 当从非安全方式启动失败的时候,BootROM使能JTAG访问。这样,能读取RE-BOOT_STATUS寄存器。当使能JTAG时,可以使用类似于XMD一个调试工具对处理器进行充分的访问。 如果在安全模式启动下,发生失败。BootROM禁止AES引擎,清除OCM,清除PL,停止CPU。当禁止JTAG时,导致不能读取REBOOT_STATUS值。 BootROM
--BootROM后安全性 * CPU0负责启动CPU1上的额外代码。 在上电复位时,BootROM保持CPU1本质上是复位状态。 禁止所有的东西,但是修改一些通用的寄存器,将其设置在等待WFE指令的状态。   要求CPU0有少量的协议来启动CPU1上的应用。 当CPU1接收到一个系统事件时,立即读取地址0xFFFFFFF0的内容,然后跳转到那个地址。如果在更新目标地址位置0xFFFFFFF0前,发布了SEV命令,则CPU1继续处于WFE状态。 BootROM
正在加载中,请稍后...
25页62页67页32页79页63页77页104页67页24页21ic官方微信-->
ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU
STM32F7-discovery QSPI接口使用心得
资深技术员, 积分 369, 距离下一级还需 131 积分
资深技术员, 积分 369, 距离下一级还需 131 积分
资深技术员, 积分 369, 距离下一级还需 131 积分
资深技术员, 积分 369, 距离下一级还需 131 积分
1.QuadSPI接口的特点。与普通的SPI Flash接口相比,quadSPI可以接四位数据线,传输速率大大提高
STM32F7的quad-spi接口有三种模式
(1)indirect mode(间接模式):所有操作都是用的QUADSPI寄存器,通常在对FLASH寄存器配置时用这种模式
(2)status polling mode(状态轮询模式):外部Flash的状态寄存器查询使用的是这种模式,如果开启中断,可以产生中断信号
(3)memory-mapped mode(内存映射模式):外部flash映射到MCU的地址空间,可以视为内部闪存,读写数据用的这种模式
STM32F7的quad-spi接口主要特点:
(1)三种工作模式
(2)Dual-Flash模式,可以同时接两片Flash,共用CLK和CS片选线。这样可以最多同时传输8位数据(4+4)
(3)支持SDR和DDR
(4)间接模式的DMA通道
(5)内嵌接收和发送FIFO
(6)支持FIFO threshold, timeout, operation complete, access error四种中断
Quad-spi完整的命令格式由5部分组成,分别是Instruction,Address,Alternate-bytes,dummy-cycles和Data这5个阶段,时序图如图所示
总结一下特点:
(1)每个阶段都可以选择是 1bit(SO/SI线 single SPI mode),2bit(IO0/IO1线 dual SPI mode),和4bit(IO0/IO1/IO2/IO3线 quad SPI mode)传输,
(2)写数据时,dummy cycle可以为0;读数据时,为了保证足够的转换时间,因为之前是写数据,现在要变成读,至少要1个dummy cycle
(3)这5个阶段都不是必须的,可以没有
(4)indirect mode模式,数据读取时通过QUADSPI_DR寄存器;memory-mapped mode模式,数据直接返回和输出通过AHB总线或者DMA
(5)SDR和DDR模式的区别:两者的instruction阶段都是CLK信号的下降沿数据传输;在DDR模式中,Address,Alternate-bytes和Data这3个阶段都是上升沿和下降沿都有数据传输
(6)F7有32-byte FIFO,可以设置threshold(阈值),接收数据数目超过该值时,FTF(FIFO threshold flag)=1
资深技术员, 积分 369, 距离下一级还需 131 积分
资深技术员, 积分 369, 距离下一级还需 131 积分
资深技术员, 积分 369, 距离下一级还需 131 积分
资深技术员, 积分 369, 距离下一级还需 131 积分
3.STM32F7-Discovery的quad-spi flash使用的是micron公司的N25Q128A系列,有128Mbit容量,后面附上数据手册,原理图如图所示
这里主要说明quad-spi flash代码流程分析
论坛可以下载STM32Cube_FW_F7_V1.1.0压缩包,我也是从里面的例程中学习的。
选择STM32Cube_FW_F7_V1.1.0/project/STM32746G-Discovery/example/QSPI/QSPI_ExecuteInPlace例程
(1)Flash配置寄存器初始化&&/* Initialize QuadSPI ------------------------------------------------------ */
&&QSPIHandle.Instance = QUADSPI;& && && &
&&HAL_QSPI_DeInit(&QSPIHandle);
& && &&&
&&/* ClockPrescaler set to 2, so QSPI clock = 216MHz / (2+1) = 72MHz */
&&QSPIHandle.Init.ClockPrescaler& &&&= 2;& && && && && && && && && && && && && && && && && && && && && & // &span style=&background-color: rgb(255, 255, 255);&&查阅手册可知,最大频率108MHz,这里为什么不用1呢??&/span&
&&QSPIHandle.Init.FifoThreshold& && &= 4;& && && && && && && && && && && && && && && && && && && && && &&&// FIFO的阈值为4bytes,
&&QSPIHandle.Init.SampleShifting& &&&= QSPI_SAMPLE_SHIFTING_HALFCYCLE;
&&QSPIHandle.Init.FlashSize& && && & = POSITION_VAL(0x1000000) - 1;& && && && && && && && & //0xMB,
&&QSPIHandle.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_2_CYCLE;& && &&&//nCS stay high for at least 2 clock cycles between commands
&&QSPIHandle.Init.ClockMode& && && & = QSPI_CLOCK_MODE_0;& && && && && && && && && && && && &//Clk stays low while nCS is released
&&QSPIHandle.Init.FlashID& && && && &= QSPI_FLASH_ID_1;& && && && && && && && && && && && && && && &&&//选择第1片flash
&&QSPIHandle.Init.DualFlash& && && & = QSPI_DUALFLASH_DISABLE;
&&
&&if (HAL_QSPI_Init(&QSPIHandle) != HAL_OK)
&&{
& & Error_Handler();
&&}复制代码(2)使能写操作
&&/* Enable write operations ------------------------------------------ */
&&sCommand.InstructionMode& &= QSPI_INSTRUCTION_1_LINE;& && && && &
&&sCommand.Instruction& && & = WRITE_ENABLE_CMD;
&&sCommand.AddressMode& && & = QSPI_ADDRESS_NONE;
&&sCommand.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;
&&sCommand.DataMode& && && & = QSPI_DATA_NONE;
&&sCommand.DummyCycles& && & = 0;
&&sCommand.DdrMode& && && &&&= QSPI_DDR_MODE_DISABLE;
&&sCommand.DdrHoldHalfCycle&&= QSPI_DDR_HHC_ANALOG_DELAY;
&&sCommand.SIOOMode& && && & = QSPI_SIOO_INST_EVERY_CMD;
&&if (HAL_QSPI_Command(&QSPIHandle, &sCommand, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
&&{
& & Error_Handler();
&&}
&&
&&/* Configure automatic polling mode to wait for write enabling ---- */
&&sConfig.Match& && && &&&= 0x02;
&&sConfig.Mask& && && && &= 0x02;
&&sConfig.MatchMode& && & = QSPI_MATCH_MODE_AND;
&&sConfig.StatusBytesSize = 1;
&&sConfig.Interval& && &&&= 0x10;
&&sConfig.AutomaticStop& &= QSPI_AUTOMATIC_STOP_ENABLE;
&&sCommand.Instruction& & = READ_STATUS_REG_CMD;
&&sCommand.DataMode& && & = QSPI_DATA_1_LINE;
&&if (HAL_QSPI_AutoPolling(&QSPIHandle, &sCommand, &sConfig, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
&&{
& & Error_Handler();
&&}复制代码
资深技术员, 积分 369, 距离下一级还需 131 积分
资深技术员, 积分 369, 距离下一级还需 131 积分
资深技术员, 积分 369, 距离下一级还需 131 积分
资深技术员, 积分 369, 距离下一级还需 131 积分
首先使用indrect mode,使用1bit instruction传输,命令是 WRITE_ENABLE_CMD,无其他4个阶段
源码中定义& &#define WRITE_ENABLE_CMD& && && && && && && &0x06;
这里要查阅芯片手册
确实是一致的。
接着使用automatic polling mode,命令是READ_STATUS_REG_CMD,读status register
automatic polling mode有如下功能,它将查询的得到的值和设置的Match值比较,只比较Mask中bit=1的位,设置可以为AND或者OR模式,
查阅手册:
确实是bit1,即mask=0x02,当该位为1时,说明写使能,故match=0x02;
(3)擦除flash的第一个sector& && &&&/* Erasing Sequence -------------------------------------------------- */
& && &&&sCommand.Instruction = SECTOR_ERASE_CMD;& &//块擦除,64KB one sector
& && &&&sCommand.AddressMode = QSPI_ADDRESS_1_LINE;
& && &&&sCommand.Address& &&&= qspi_& && && && && && && && &&&//qspi_addr=0
& && &&&sCommand.DataMode& & = QSPI_DATA_NONE;
& && &&&sCommand.DummyCycles = 0;
& && &&&if (HAL_QSPI_Command_IT(&QSPIHandle, &sCommand) != HAL_OK)
& && &&&{
& && && & Error_Handler();
& && &&&}复制代码(4)等待擦除完毕,使用automatic polling mode查询,这里还是读status register,但读的是bit0位,而且预期值bit0=0;查阅手册
资深技术员, 积分 369, 距离下一级还需 131 积分
资深技术员, 积分 369, 距离下一级还需 131 积分
资深技术员, 积分 369, 距离下一级还需 131 积分
资深技术员, 积分 369, 距离下一级还需 131 积分
&&/* Configure automatic polling mode to wait for memory ready ------ */&&
&&sCommand.InstructionMode& &= QSPI_INSTRUCTION_1_LINE;
&&sCommand.Instruction& && & = READ_STATUS_REG_CMD;
&&sCommand.AddressMode& && & = QSPI_ADDRESS_NONE;
&&sCommand.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;
&&sCommand.DataMode& && && & = QSPI_DATA_1_LINE;
&&sCommand.DummyCycles& && & = 0;
&&sCommand.DdrMode& && && &&&= QSPI_DDR_MODE_DISABLE;
&&sCommand.DdrHoldHalfCycle&&= QSPI_DDR_HHC_ANALOG_DELAY;
&&sCommand.SIOOMode& && && &= QSPI_SIOO_INST_EVERY_CMD;
& && &&&//bit0:write in progress 0:ready 1:busy
&&sConfig.Match& && && &&&= 0x00;
&&sConfig.Mask& && && && &= 0x01;
&&sConfig.MatchMode& && & = QSPI_MATCH_MODE_AND;
&&sConfig.StatusBytesSize = 1;
&&sConfig.Interval& && &&&= 0x10;
&&sConfig.AutomaticStop& &= QSPI_AUTOMATIC_STOP_ENABLE;
&&if (HAL_QSPI_AutoPolling_IT(&QSPIHandle, &sCommand, &sConfig) != HAL_OK)
&&{
& & Error_Handler();
&&}复制代码(5)写使能并且写数据
/* Enable write operations ----------------------------------------- */
& && && & QSPI_WriteEnable(&QSPIHandle);
& && && && && && && && && && && && && & //QUAD INPUT FAST PROGRAM Data In:DQ[3:0];Address In:DQ0
& && && & /* Writing Sequence ------------------------------------------------ */
& && && & sCommand.Instruction = QUAD_IN_FAST_PROG_CMD;
& && && & sCommand.AddressMode = QSPI_ADDRESS_1_LINE;
& && && & sCommand.Address& &&&= qspi_& && && && && && && && && && && && && && && & //qspi_addr=0
& && && & sCommand.DataMode& & = QSPI_DATA_4_LINES;
& && && & sCommand.NbData& && &=& && && && && && && && && && && && && && && && && && && &//size = QSPI_PAGE_SIZE = 256
& && && & if (HAL_QSPI_Command(&QSPIHandle, &sCommand, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
& && && & {
& && && && &Error_Handler();
& && && & }
& && && & if (HAL_QSPI_Transmit_DMA(&QSPIHandle, flash_addr) != HAL_OK)& && && &//flash_addr = (uint8_t *)(&Load$QSPI$Base);
& && && & {
& && && && &Error_Handler();
& && && & }复制代码看到这里就不得不提一下scatter file文件
打开这个文件,STM32746G-DISCOVERY.sct
资深技术员, 积分 369, 距离下一级还需 131 积分
资深技术员, 积分 369, 距离下一级还需 131 积分
资深技术员, 积分 369, 距离下一级还需 131 积分
资深技术员, 积分 369, 距离下一级还需 131 积分
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
LR_IROM1 0xx&&{& & ; load region size_region
&&ER_IROM1 0xx&&{&&; load address = execution address
& &*.o (RESET, +First)
& &*(InRoot$Sections)
& &.ANY (+RO)
&&}
&&RW_IRAM1 0xx&&{&&; RW data
& &.ANY (+RW +ZI)
&&}
&&QSPI 0xx&&{
& &*.o (.qspi)
&&}
}复制代码可以看到和一般的scatter file(分散加载描述文件)相比,多了一个QSPI执行域,
学过的都知道,这里表示链接时,将所有目标文件的.qspi段放在QSPI执行域,
再看一下F7的内存映射
在0x到0x9FFF FFFF有一个Quad SPI,这就是memory-mapped mode的由来。
因此上面flash_addr = (uint8_t *)(&Load$$QSPI$$Base) = 0x; DMA传输就是将 0x处开始的size = 256bytes的数据传递到flash,模式是indrect read mode
(6)判断传输是否完成,判断的方法同步骤4
(7)重复5、6步直到传输完max_size = (uint32_t)(&Load$$QSPI$$Length)=&&0x
(8)设置dummy-cycle的值,配置为memory-mapped mode,命令是 QUAD_OUT_FAST_READ_CMD=0x6B,就是说映射完后,相对于内部flash
/* Configure Volatile Configuration register (with new dummy cycles) */
& && && && &QSPI_DummyCyclesCfg(&QSPIHandle);
& && && && &/* Reading Sequence ------------------------------------------------ */
& && && && &sCommand.Instruction = QUAD_OUT_FAST_READ_CMD;
& && && && &sCommand.DummyCycles = DUMMY_CLOCK_CYCLES_READ_QUAD;
& && && && &sMemMappedCfg.TimeOutActivation = QSPI_TIMEOUT_COUNTER_DISABLE;
& && && && &if (HAL_QSPI_MemoryMapped(&QSPIHandle, &sCommand, &sMemMappedCfg) != HAL_OK)
& && && && &{
& && && && &&&Error_Handler();
& && && && &}复制代码
资深技术员, 积分 369, 距离下一级还需 131 积分
资深技术员, 积分 369, 距离下一级还需 131 积分
资深技术员, 积分 369, 距离下一级还需 131 积分
资深技术员, 积分 369, 距离下一级还需 131 积分
(9)执行.qspi段的代码 /* Execute the code from QSPI memory ------------------------------- */
& && && & GpioToggle();复制代码注意#if defined(__CC_ARM)
#pragma arm section code = &.qspi&
#pragma no_inline
static void GpioToggle(void)
#elif defined(__ICCARM__)
static void GpioToggle(void) [url=home.php?mod=space&uid=72445]@[/url] &.qspi&
#elif defined(__GNUC__)
static void __attribute__((section(&.qspi&), noinline)) GpioToggle(void)
#endif
{
&&BSP_LED_Toggle(LED1);
&&/* Insert delay 200 ms */
&&HAL_Delay(200);
}复制代码
助理工程师, 积分 1217, 距离下一级还需 783 积分
助理工程师, 积分 1217, 距离下一级还需 783 积分
助理工程师, 积分 1217, 距离下一级还需 783 积分
助理工程师, 积分 1217, 距离下一级还需 783 积分
多谢分享,学习了。。。
扫描二维码,随时随地手机跟帖
技术新星奖章
人才类勋章
您需要登录后才可以回帖12位ad转换器的分辨率是多少_中华文本库
高分辨率AD转换电路的设计毕业设计_工学_高等教育_教育专区。高分辨率 A/D ...果送交控制器,产生 16 位 A/D 转换结果,最后通过 LED 显示器来对转换结果...
与 AD 芯片的转换一个点所需时间有关, 例如: AD...常有 12 位、14 位、16 位等(12 位 分辨率,...分辨率与 A/D 转换器的位数有确定的关系,可以表示...
概述 AD2S1210是一款10位至16位分辨率旋变数字转换器,集成 片上可编程正弦波...12 35 2 单位 V V V mA mA mA 条件/注释 6 温度范围如下:A、B级:–...
则 8 位 D/A 转换器的分辨率为( 1 2 ?1 8 ...?12.75V , v o max ? 0V 2) 输入 D=...? 32 ? 40 V 8 4 9.5 由 AD7520 组成双...
标签: AD 精度 分辨率 LSB 的精度、 关于 A/D 的精度、分辨率与 LSB 误差...(-3LSB 失调误差)—(-5LSB 增益误差))的 12 位转换器输出的编码范围为 3...
12页 免费 SFPCI-6021 经济型AD DA卡... 24页 ...因此,在分辨率位数一定的情况下采集信号时,采集频率...嵌入播放器: 普通尺寸(450*500pix) 较大尺寸(630...
数字分辨率可达 12 位;外接电路简单,只需接入几个外部元件就可方便构成 V/F ...AD650既 能用作电压频率转换器, 又可用作频率电压转换器。AD650的满刻度频率...
ad信噪比分析及高分辨率_电子/电路_工程科技_专业资料。ad信噪比分析及高分辨率...2.1 电路设计与器件选择 本电路主要由模/数转换器 ADC、输入电路、输出屯路...
AD转换器与DA转换器_工程科技_专业资料。A/D转换器与 转换器与D/A转换器 ...分辨率为5V/ 28 = 19.5 mV 12位的DA转换器,分辨率为5V/ 212 = 4.8 mV ...
单位是LSB(即最低位所表示的量)。当然,像有的AD如△—∑系列的AD,也用Linearity error 来表示精度。为什么有的AD很贵,就是因为INL很低。分辨率同为12bit的两...}

我要回帖

更多关于 硬编码字符串 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信