p2020 学习 (四) 复位、时钟、初始化
时间:2023-01-21 13:00:01
概述:芯片的复位、时钟和一些整体初始化,包括复位信号的定义及其选择。
复位、时钟和控制信号为芯片操作提供了许多选项。此外,在硬复位期间,选择了许多复位配置信号模式。
一、外部信号描述
系统控制信号 (System control signals)
2、时钟信号
二、访问 CCSR 寄存器
1、通过 CCSRBAR (CCSR base address register) 访问 CCSR,默认值为0xFF70_0000(CCSRBAR = 0xFF70_0000)手册中多次的初始值不同(0xFFE0_0000)。
2、更新 CCSRBAR 值,可重定位 1M 的 CCSR 空间。
1.在初始配置设备时,只需要一个主机或控制器进行更新 CCSRBAR 如果启动排序器(boot sequencer)初始化推荐 启动排序器设置 CCSRBAR 最终地址。 2、若果是在 PCIE 或者 RapidIO 配置此设备的外部主机,配置 CCSRBAR最终地址应在 e500 core 启动之前。 3、如果 e500 core 初始化设备,CCSRBAR 其他地址的最终地址应该被允许 IO 设备可在访问设备前设置。 |
2、当 e500 core 正在写CCSRBAR 应遵循以下序列: 1、读当前 CCSRBAR 的值,通过一个(load word)加载指令 同步指令(isync)。所有访问配置空间被迫完成 写一个新的值给 CCSRBAR 3.执行加载操作,不能访问配置空间或芯片SRAM,但必须是已经映射的有效地址(例如:boot rom)。 随后执行一个 isync 指令 4.重新读取地址 CCSRBAR 然后执行一个值 isync 指令 |
3.访问备用配置空间
可以通过 ALTCBAR 和 ALTCAR 寄存器 访问备用配置空间 bootsequencer,允许bootsequencer 访问备用 1M 大小的配置空间。通过串行 ROM 中加载正确bootsequencer 指令, 在ALTCBAR 可以与来自串行的基地址串行 ROM 结合生成映射提供的20位地址偏移量ALTCAR 指定目标的36位地址。因此,通过配置这些寄存器,引导排序器可以一次访问整个内存映射 1M 字节数据块.
ALTCAR寄存器中的启启动排序器完成配置操作后执行的启动代码应清除寄存器中的启动位置.这防止映射不正确的问题, 如果在目标栏中指定的地址中使用不同的目标映射,则配置后续的本地访问窗口。
4.引导页面转换(翻译)
1、在 e500 core 复位时,MMU 有一个 4K 字节的页面定义是 0x0_FFFF_Fnnn |
2.每个核心都有有效地址0x0_FFFF_FFFC为了获得这个指令,核心的第一个指令从有效地址0获得x0_FFFF_FFE0突然读取指导代码。对于位于不同地址的指导代码系统,芯片提供了指导页面转换和指导页面转换寄存器的能力(BPTR)控制。 注意引导页面转换以同样的方式影响两者e发起事务500。 |
3、(boot sequncer)引导排序器可以启用引导页面转换,或者当设备配置为引导保留模式时,外部主机可以设置引导页面转换。如果要执行转换到芯片定义的默认指导ROM页面以外的地址范围(指导ROM位置中定义的0x0_FF80_0000到0x0_FFFF_FFFF),外部主机或引导排序器还必须设置一个本地访问窗口来定义包含引导代码的目标接口的引导代码,因为BPTR只定义地址转换,而不是目标接口窗口。地址映射示例和启动排序器模式以获取更多信息。 |
5、boot sequncer
引导排序器是一个DMA引擎,它访问I2C串行在接口上ROM,并写入数据CCSR内存或备用配置基地址寄存器(altcbar)指向内存空间。 请参见访问备用配置空间。启动排序器通过重置引脚启用,如中所述。如果启动排序器启用,e在启动排序器完成操作之前,500核心将保持复位。有关更多细节,请参见I2C章节中的启动排序器模式。 |
三、 存位内存映射/寄存器定义 Reset Memory Map/Register Definition
本节描述了控制配置空间和引导代码访问的配置和控制寄存器,以及访问这些区域的指针。它还包含了启动排序器的简要描述CPU初始配置寄存器或内存在启动前释放 本表显示了本地配置控制寄存器的内存映射 |
1.状态寄存器基地址寄存器的配置、控制 (Reset_CCSRBAR)
用于配置访问的36个窗口中最重要的16个地址。基地址在一个 1M 对齐字节的边界
2、备用配置基地址寄存器 (Reset_ALTCBAR)
3.备用配置属性寄存器 (Reset_ALTCAR)
4、boot 页面转换寄存器 (Reset_BPTR)
四、功能描述
电源管理寄存器的各种复位芯片方法(POR)配置,设备时钟(CLK)。
1.2.暂时不写,暂时不帮助使用(复位操作、上电复位序列、上电复位配置、电压选择配置)
3、时钟 CLK
1.系统时钟和 DDR 控制器时钟 芯片需要输入时钟作为输入时钟 e500 core 与所有外设、接口相结合 core时钟源是同步操作的首选。 SYSCLK输入 (频率) 使用锁相环(PLL)创建核心复合总线(CCB)时钟(也称站台时钟) CCB 几乎所用的时钟的同步系统逻辑,包括L2高速缓存,以及其他内部块,如DMA和中断控制器。 CCB 时钟 还提供e500核中的pll和为本地总线内存控制器创建时钟的PLL。
divide-by-
n
CCB clock divider 表示 CCB 时钟的几分频。
DDR 控制器可以使用 CCB 时钟,因此 DDR的操作可以和平台同步,一个独立的时钟 DDRCLK 也可以通过PLL倍频产生 DDR 内存控制器时钟,在这种情况下,DDR 控制器操作同步 遵从 平台时钟。
|
2、这些高速时钟来自于 SerDes 块中的一个PLL, 该PLL由一个参考时钟(SD_REF_CLK/SD_REF_CLK)驱动,它的输入频率是所使用的协议和比特率的函数,如本表所示
|
3、最低频率要求 Minimum frequency requirements I/O端口选择描述了各种高速接口配置选项。必须考虑CCB时钟频率,才能正确操作这些接口。有关支持的特定频率,请参考设备硬件规格 |
4、以太网时钟 Ethernet clocks 以太网块相对于设备的其他部分进行异步操作。这些块使用由它们各自的PHY芯片提供的接收和传输时钟,加上千兆协议的125mhz时钟输入。数据传输在内部被同步到CCB时钟 |
5、真实时间时钟 Real time clock RTC 如图所示,实时时钟(RTC)输入可选地用于时钟e500核心计时器设施。RTC也可由芯片可编程中断控制器(PIC)全局定时器设备使用。RTC独立于e500核心时钟,旨在支持相对低频率的定时应用。RTC频率范围在设备硬件规范中规定,但最大值不应超过CCB频率的四分之一。在被分配到核心时基之前,RTC被采样并与CCB时钟同步。 核心时基的时钟源由HID0中的两个字段指定:时基启用(TBEN),并选择时基时钟(SEL_TBCLK)。如果启用了时间基(设置HID0[TBEN]),时钟源确定如下:HID0[SEL_TBCLK]=0,时间基每8更新CCB时钟HID0[SEL_TBCLK]=1,时间基更新在RTC的上升边缘时间基的默认来源是CCB时钟除以8。有关更多详细信息,请参阅PowerPCe500核心复杂参考手册。计时器控制寄存器组n(PIC_TCRn)提供了关于使用RTC信号来计时PIC单元中的全局计时器的附加信息。 |
五、初始化/应用程序信息
在引导ROM位置选择片上ROM(见表4-12),会使e500CPU从片上ROM获取数据。通过配置POR配置引脚[0:3]cfg_rom_loc来选择片上ROM。从eSPI和eSDHC的芯片上内存引导提供了两种不同的配置。
1、eSDHC boot overview 芯片支持从一个与 eSDHC 控制器接口连接的内存设备中加载启动代码。 此设备可以是 SD 卡或 MMC卡,或与这些设备兼容的其他变体。术语 SD/MMC用于指内存设备。 从 eSDHC 启动由芯片使用片上 ROM 支持,该 ROM 包含基本的 eSDHC 设备驱动程序和执行从 SD/MMC 块复制到任何目标内存的块复制的代码。在引导 ROM位置中选择片上 ROM(见表4-12),会使 e500CPU 从片上 ROM 获取数据。通过配置POR配置引脚 [0:3]cfg_rom_loc 来选择片上 ROM 。在引导之前,用户必须确保插入要从引导的 SD/MMC 卡。 在设备完成复位序列后,如果 ROM 位置选择了片上 ROM eSDHC 引导配置,则e500 核心从内部片上 ROM 执行代码。e500 核心配置 eSDHC 控制器,使其能够与外部 SD/MMC卡 通信。SD/MMC卡应包含一个特定的数据结构,其中包含控制字、设备配置信息和初始化代码。芯片上的 ROM 引导代码使用来自 SD/MMC卡内容的信息来配置设备,并通过 eSDHC 接口将初始化代码复制到目标存储器设备(例如,DDR)。在复制了所有的代码之后,e500核心开始从目标存储器设备执行该代码。 用户可以利用 eSDHC 引导功能。最简单的方法是让片上 ROM 将整个操作系统引导映像复制到系统内存中,然后跳转到它中以开始执行。然而,这可能是许多兆字节,在某些情况下可能是次优的,因为在引导过程中只使用了1位模式。 一个更高级的选择是让片上 ROM 只复制一个小的用户定制的子程序,它以最佳的方式配置 eSDHC 。然后,用户定制的子程序复制其余的引导代码的速度可能比片上 ROM 软件要快得多。例如,用户定制的子程序可以使用4位或8位 eSDHC接口,支持新的 SD 或 MMC 格式修订,或者基于芯片操作的确切频率的知识增加外部时钟频率 2、eSDHC boot features
3、SD/MMC card data structure SD/MMC卡应包含以字节表示的初始化代码长度、SD/MMC卡中的源地址、目标内存设备中的目标地址、执行起始地址,以及具有目标地址对及其各自数据的多个配置字 此图显示了所需的SD/MMC卡数据结构。 此表介绍了SD/MCC板卡的数据结构
0~29地址位,配置数据字段中的数据由e500核心复制到这个地址。地址的两个最小有效位(30-31)总是被认为是零,36位地址的上4位也是零。
3.2、关于与FAT12/FAT16/FAT32文件系统的兼容性的说明 根据应用程序,这里定义的SD/MMC卡数据结构与FAT12、FAT16或FAT32文件系统(记录在SD卡规范第2部分-文件系统规范v2.0等地方)之间可能需要兼容性 这种兼容性是可能的,但是在获取用户的代码之前,对处理器可以解析的配置字的数量施加了限制。通过确保控制字和配置字的整个数据结构包含在文件系统的前446字节(0x1BE)主引导记录码区内来实现兼容性 假定配置字从地址0x80开始,并且所有配置字(以EC=1结束配置的最后一个配置字除外)对每个配置地址/数据对占用8个字节,这规定了最多40个配置地址字的限制。在不需要与FAT主引导记录兼容的应用程序中使用更多的配置词。如果恰好使用了40个配置地址字,并且需要FAT12/FAT16/FAT32的兼容性,则必须省略最终的配置数据字,以确保数据结构适合小于446字节 请注意,FAT12、FAT16和FAT32标准对SD/MMC卡上必须存在的数据结构施加了额外的要求,例如分区表和主引导记录末尾的固定签名字。eSDHC引导过程不解释或要求这些特性,并且不在本文档的范围之内 此外,FAT12和FAT16定义了一个引导扇区,并在前0x36可寻址字节中定义了字段(这与本文档中定义的从SD/MMC引导的SD/MMC卡数据结构不冲突)。因此,FAT12和FAT16文件系统与已定义的数据结构完全兼容,即使它们也包含一个FAT引导扇区。但是,FAT32定义了一个引导扇区,其中包含前0x52可寻址字段。因此,FAT32文件系统兼容性只能在不需要此引导扇区信息的系统中使用FAT32文件系统 还要注意,用户代码是从源地址指定的SD/MMC卡存储空间的一个顺序区域复制的。引导ROM软件不查找或解析任何文件分配表,而且,引导ROM软件假定用户代码位于一个连续的内存地址范围内 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4、eSDHC控制器的初始配置 引导 ROM 软件使用 eSDHC 控制器配置 从eSDHC引导完成后,用户可以更改此配置以使用eSDHC界面的其他用途。ROM软件的启动,还会根据连接的SD/MMC卡支持的功能,自动更改某些配置 eSDHC控制器最初被配置为在以下配置中操作: 1、地址不变模式 (eSDHC.PROTCTL[EMODE] = 10) 2、SDHC_DAT[3] 不监控板卡的插入,GPIO4/SDHC_CD 引脚用于卡片检测 (eSDHC.PROTCTL[D3CD] = 0) 和全局实用程序 (PMUXCR[SDHC_CD] = 1) 3、1位模式 (eSDHC。PROTCTL[DTW] = 00) 4、关于 SD 时钟频率的选择,请参考系统控制 (eSDHC_SYSCTL) 中的SYSCTL[SCLKFS] 中提供的示例 5、在 eSDHC 总线上必须恰好有一个设备连接(并且必须在启动前插入该设备)。不支持共享一个总线的多个 MMC 设备 6、总线采用推拉模式(芯片垫驱动逻辑0和逻辑1)。如果要连接 MMC 卡,然后,SDHC_CMD和SDHC_DAT[0:7] 引脚需要弱外部上拉,以便在初始化期间与MMC开漏模式接口 7、 eSDHC_DMA 引擎不用于控制或配置字访问;相反,所有 eSDHC 数据传输都由处理器核心轮询 eSDHC 启动。并通过数据端口寄存器(xfertyp[DMAEN]=0) 访问数据。 eSDHCDMA 引擎用于用户代码访问 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
5、eSDHC控制器引导顺序 eSDHC引导ROM配置中的代码将执行以下事件序列: 1、eSDHC控制器按照eSDHC控制器的初始配置进行配置。 2、卡检测 3、SD/MMC 卡复位 4、执行 SD/MMC 卡电压验证 5、SD/MMC 卡标识 6、使用CMD9,读取SD/MMC卡的CSD(卡特定数据)寄存器 7、根据从SD/MMC卡的CSD寄存器返回的值,更新eSDHC的寄存器,以反映eSDHC控制器和与其连接它的SD/MMC卡共同支持的最大时钟频率 8、eSDHC开始从 SD 卡中读取 SD/MMC 数据结构 9、eSDHC开始从板卡中获取用户代码 10、如果在内存偏移量0x40处没有找到BOOT签名,或在读取控制和配置字或用户的代码时检测到读取CRC错误,那么它可能是由于SD/MMC存储卡上的一个坏块。为了抵消这种情况并提供错误恢复力,如果发生这种情况,eSDHC将返回到步骤8,从比以前获取的地址大0x200的地址获取数据。例如,如果有我失败的尝试,然后在下面的尝试,启动签名检查在偏移0x40+ix0x200。如果此序列失败24次,则视为系统启动失败 11、处理器核心将等待,直到用户代码DMA传输完成。 12、处理器核心会跳转到执行开始地址,以开始执行用户的代码。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
6、eSDHC引导错误处理 如果在任何阶段,引导加载程序代码检测到错误并不能继续,它将禁用eSDHC,并通过设置RSTCR[HRESET_REQ]发出芯片的硬件重置请求。 这可能发生在以下任何一种情况下: 1、在eSDHC读取24次的任何数据的偏移量0x40或CRC错误处没有找到BOOT签名 2、等待SD/MMC卡响应时超时 3、未插入卡 4、不支持引导的插入板卡类型不正确(如CE-ATA)。 5、SD/MMC卡和eSDHC没有相互支持的通用协议、电压或频率。 6、eSDHC读取到源地址(由SD/MMC数据结构的控制字指定),而没有看到EC=1配置Word 引导加载程序代码支持冗余,这允许引导即使在存在SD/MMC坏块的情况下也能成功。它通过在多达24个位置搜索引导签名来实现这一点。当没有找到BOOT签名或发现读取CRC错误时,引导加载程序将尝试下一个块。每个尝试的位置都具有512字节(0x200)的固定偏移量,这与SD/MMC卡的实际块大小无关 作为参考,图4-9提供了一个SD/MMC存储卡数据结构实例,该结构可用于最大的SD/MMC存储卡数据冗余。请注意,如果0x40+8x(N-1)+4≥0x200(其中N为配置字数),则需要注意确保0x40+ix0x200(对于所有2≤i≤24)的配置字不能包含BOOT签名。这确保引导加载程序代码不会错误地检测BOOT签名。这还减少了可以在一个设备上使用的引导代码的副本数。除了指向SD/MMC卡的源地址(偏移量0x50)的指针外,控制/配置字的每个副本通常是相同的,这对于每个副本可能是不同的。如果用户的代码部分足够大,其中24个副本不适合SD/MMC卡的容量(或者如果SD/MMC卡的容量也必须用于系统引导以外的功能特性),那么仍然需要支持最多24个控制/配置字的副本,但只有它们引用有限数量的用户代码部分。这也是可能的(0x200 = 512 字节对齐,24个源地址与用户代码冗余,防止SD/MMC 存在坏块问题)
|
五.2 eSPI boot ROM (4.6.2小结,工作无关,暂停)