请从官网下载 TD4VM 技术参考手册,地址如下:
(freetech-MCU 底层软件- TDA4 内容交流与分享)
第一章 介绍
1.1 芯片概述
总体介绍了异构芯片 TDA4VM 的核与芯片域:
- MAIN 域:A72 核、R5F 核、DSP 核
- MCU 域:R5F核
- WKUP域:M3 核(DMSC)
1.2 芯片框图
下图为芯片顶层的设计框图,更形象的列出了不同芯片域设计与外设:
1.3 芯片的MAIN 芯片域
介绍了 main 域的处理器,以及总体介绍了main 域的外设功能:
1.4 芯片的 MCU 芯片域
介绍了 mcu 域的处理器,并总体介绍了 mcu 域外设的功能:
1.5 芯片的 WKUP 域
介绍了 wukp域的处理器,并总体介绍了 wkup 域外设的功能:
1.6 芯片ID
芯片 ID 存储在CTRLMMR_WKUP_JTAGID 寄存器中,值为:
第二章 内存映射
2.1 MAIN 域内存映射
此章节展示了 MAIN 域外设在内存中的寄存器位置,请查看手册。
2.2 MCU 域内存映射
此章节展示了 MCU 域外设在内存中的寄存器位置,请查看手册。
2.3 WKUP 域内存映射
此章节展示了 WKUP 域外设在内存中的寄存器位置,请查看手册。
2.4 处理器视角下内存映射
以 mcu_r5f 视角下内存映射举例:
这个类似内核外设的寄存器位置分布,因为有 VIC,TCM 相关的东西。
RAT 是 Region-based Address Translation,基于区域的地址翻译。
2.5 RAT
位于 region 的32位内存地址可以翻译为48 位内存地址。
第三章 系统互连
3.1 系统互联概述
芯片上所有模块与子系统通过系统互连实现对任意内存的访问。
也就是说任一处理器核可以访问所有内存映射。
系统互联可以分为如下模块:
- CBASS0
- INFRA_CBASS0
- MCU_CBASS0
- WKUP_CBASS0
上述模块是相互链接的,用于传输任意处理器核对内存或寄存器的读写访问。
第四章 芯片启动与初始化
4.1 初始化启动概述
芯片上电后,先运行固化在 ROM 中的代码,ROM 中的代码会初始化一些必要的外设,比如时钟,启动设备等。
根据 SBL 启动经验,总结如下:
Power on ————> Rom Code ————> SBL
4.2 启动处理(运行 SBL 之前的处理)
4.2.1 MCU ROM 代码架构概述
MCU ROM 代码负责采用 BOOT_MODE pin 并从指定的启动外设中读取启动镜像。
MCU ROM 代码也需要验证启动镜像的合法性,MCU ROM 代码架构如下:
Rom Code 软件模块总结如下:
- Main 循环:包含所有逻辑事件处理的主循环;
- X.509 : 验证启动镜像的合法性;
- LOG and Trace: 日志与错误记录模块;
- System: 提供系统服务:时间、中断处理;
- Protocol: 提供协议级处理,比如使用串口读取启动镜像时,需要的 XMODEM 协议
- Driver: 提供外设驱动,比如 OSPI/QSPI,MMCSD 驱动,用于从启动设备读取镜像。
4.2.2 DMSC ROM 代码架构概述
DMSC 即 WKUP 域的核,负责整个芯片的设备管理与安全控制。
DMSC 的 ROM 代码…不清楚
设备管理:即从核的复位启动是由 DMSC 来使能的。
安全控制:解析 X.509? 镜像合法性验证?
4.2.3 启动处理流图(ROM代码运行流图)
ROM 代码主要实现下述功能:
1.对 BOOT_MODE pins 进行采样,初始化并配置必要的外设,比如 PLL与启动外设;
2.从启动外设中读取镜像,并验证;
3.启动从核,并运行镜像。
由 DMSC 执行 SBL 核的复位启动。
DMSC ROM 会配置一个 180 s 的看门狗,SBL 需要加载 TI 提供的固件给 DMSC 运行,这个固件会管理这个看门狗:
4.2.4 MCU_ONLY 启动与 NORMAL 启动
如果用户置位了 MCU_ONLY pin (比如通过拨码开关),那么此时芯片只能从 MCU 域启动,ROM 中的代码只采样 MCU_BOOTMODE pins,且只能从 MCU 域的外设读取启动镜像。
NORMAL 启动则需要采样所有的 BOOT MODE pins,可以从 MAIN 域外设中读取启动镜像。
4.3 BOOT MODE pin
4.3.1 MCU_BOOTMODE pin 映射
当使用 MCU_ONLY 模式启动时,只采样 MCU_BOOTMODE pins 的值。
MCU_BOOTMODE pin 映射如下:
引脚位域功能如下:
- MCU[0:2]: 设置参考时钟源频率(外部晶振频率?);
- MCU[3:5]: 设置启动模式;
- MCU6: 设置是否使用 MCU_ONLY 模式;
- MCU[8:9]: 上电自检设置。
4.3.2 BOOTMODE pins 映射
当 MCU_ONLY 引脚没有置位时(拨码开关没有拉高),ROM 中的代码会同时采样 BOOTMODE pins 与 MCU_BOOTMODE pins,来共同确认启动模式。
BOOTMODE pins 映射如下:
引脚位域功能如下:
- BOOTMODE0: 与 MCU[3:5] 共同确认启动模式;
- BOOTMODE[1:3]: 设置备用启动模式;
- BOOTMODE[4:6]: 设置启动模式的参数配置,比如 OSPI、QSPI 启动时的片选,时钟速率等等;
- BOOTMODE[7]:设置备用启动模式的参数配置,比如 MMCSD 端口选择。
4.3.3 -4.3.15 详细介绍了各个启动模式的配置与流程
4.3.16 PLL 配置
MCU[0:2]: 可以设置参考时钟频率。
4.4 启动参数表
启动参数表给 ROM 的代码使用,主要根据 BOOTMODE pins 的采样值与内建数据来填充。
比如根据 BOOTMODE pins 确定启动外设。
4.5 启动镜像格式(SBL 镜像格式)
启动镜像的整体格式为一个 X.509 认证头,后跟随启动镜像:
4.6启动模式
该章节简略介绍了各个启动模式的初始化启动处理与加载处理。
4.7 启动内存映射
4.7.1 内存布局与 MPU 设置
MCU ROM 代码运行在 MCU_R5F 上,芯片上电启动时,需要配置 MPU,ROM 的代码对 MPU 的设置如下图:
MPU 中,数值越大的 region,拥有更高的属性优先级。
4.7.2 MCU ROM 全局内存使用
ROM Code 使用下列地址存储版本号:
4.7.3 ROM 代码保留未使用的内存
主要是对片上 1MB 的RAM空间的分配,ROM 代码直接运行在片上RAM后半截?(还是类似flash的片上运行)?
文章评论