【TDA4系列】硬件分析与刷写程序的几种方式
TDA4 硬件分析
TDA4是AMP架构,AMP即非对称多处理器结构,简单理解为将好几种处理器集成在一块硅片上,并且不同的核运行不同的操作系统。TDA4一共有6个Cortex-R5F核,2个Cortex-A72核,2个C66核,1个C71核。如果把所有核都利用起来,需要写:
- 处于2个A72的Linux或者QNX的1份程序(其中openvx可以调用其他其他核的资源,OpenGL可以调用gpu的资源,2个A72是SMP架构,这里不做展开)
- 处于6个R5F核的5份程序(mcu1_0核mcu1_1互为lockstep核),
- 处于2个C66的2份程序,
- 处于1个C71的1份程序。
一共10份不同的程序,不同的程序为了完成同样目标,程序之间的数据交互就非常重要了。
一个核间通信的关注点:TDA4的所有核不管在硬件上还是软件上,在内存上都是互联互通的。A72核把需要传输数据放在指定地址上,mcu1_0到指定的地址上取出数据,便完成了核间的数据交互,逻辑上非常简单,而且数据传输的时候甚至都没有经过拷贝。实现共享内存首先得找到一块合适的内存用来交互数据,因为TDA4为了提高效率,大部分内存做了缓存(cacheable),如果做了缓存,因为内存的访问速度远远比cpu的高速缓存低,修改了变量的值后,并不会马上写入到内存上,而是先写入本地cpu的高速缓存中。“因为cpu架构不同,R5F是32位处理器,A72是64位处理器,因此注意结构体中不要有类似指针这样在不同架构中长度不同的成员。”
参考链接:https://blog.csdn.net/lyp90h/article/details/121231514
刷写程序
官方写了详细的教程:https://www.ti.com.cn/cn/lit/an/spracy5/spracy5.pdf?ts=1633654253207&ref_url=https%253A%252F%252Fwww.ti.com.cn%252Fproduct%252Fcn%252FTDA4VM-Q1
我总结一下
1 Flash Devices on TDA4
TDA4 板上使用的 OSPI 和 eMMC 闪存。图 2-1 描述了 SDK 中 flash 的默认布局
刷写 OSPI flash / eMMC boot partitions
补充一个知识点:
一个嵌入式 Linux 系统从软件的角度,通常可以分为四个层次。
(1) 引导加载程序。包括固化在固件(firmware)中的 boot 代码(可选),和 BootLoader
两大部分。
(2) Linux 内核。特定于目标板的定制内核以及内核的启动参数。
(3) 文件系统。包括根文件系统和建立于 Flash 内存设备之上的文件系统。
(4) 用户应用程序。特定于用户的应用程序。有时在用户应用程序和内核层之间可能还
会包括一个嵌入式图形用户界面。
最为熟知的分区方式同时也是最主流的主要有两种:MBR(Master Boot Record)和GPT(GUID PartitionTable)。前者应用于绝大多数使用BIOS引导的PC设备(苹果使用EFI的方式),而后者主要是针对MBR的一些缺点进行了改进同时还可以兼容MBR并且支持2TB以上的存储(MBR不支持2TB以上的存储设备)。
Android 4.0版本以后就是使用的GPT分区方式。注意,不管是MBR还是GPT,他们的分区都是指“逻辑上”的!!!即通过软件实现的,文件系统级别的。而我现在要说明的是eMMC本身自己的分区,即物理上的,不是通过软件就能实现的分区。
EMMC的分区有一些是AP不能修改的(如BOOT1、BOOT2和RPMB分区),有一些是可以通过特定的命令和寄存器就可以修改的(如Enhanced Partition和GPAP)。
EMMC的UDA 分区(User Data Area)就是AP及用户可以进行读写存储的区域,通常其大小为整块EMMC表示大小的93%左右,即4GB的eMMC UDA的区域只有4GB*93%=3809MB。
Flashing eMMC User Partition
刷写 eMMC 用户分区中的文件系统
2 可选工具进行OSPI 和 eMMC 闪存刷写
- Lauterbach(需要JTAG 接口)
- CCS-Based Flash Writer(需要JTAG 接口)
- UNIFLASH(需要UART接口)
- dfu-util(需要USB)
- U-boot(可以UART, MMCSD,Ethernet, DFU boot,JTAG)
补充一下硬件启动开关(不是很重要)
UART-boot
UART-boot是 TDA4VM 上支持的外设启动模式之一。 当 SD 接口等主要启动媒体不可用时,它非常有用。
ROM 支持通过 X-Modem 协议从 MCU_UART0 启动。
整个基于 UART 的启动 U-Boot,经历不同的阶段并使用不同的UART外设如下
这个细节有个ppt:https://e2e.ti.com/cfs-file/__key/communityserver-discussions-components-files/791/TDA4VM_2D00_UART_2D00_Boot_2D00_faq.pdf
DFU-Boot
DFU-Boot 可用于将映像传输到 TDA4 板以引导至 u-boot
1.将启动模式改为DFU启动模式并开机。
2. 在 HOST PC 上,运行以下命令
HOST $ sudo dfu-util -l
HOST $ sudo dfu-util -R -a bootloader -D <PATH_TO_BIN>/tiboot3.bin
HOST $ sudo dfu-util -R -a sysfw.itb -D <PATH_TO_BIN>/sysfw.itb
HOST $ sudo dfu-util -R -a tispl.bin -D <PATH_TO_BIN>/tispl.bin
HOST $ sudo dfu-util -R -a u-boot.img -D <PATH_TO_BIN>/u-boot.img# At this point, the u-boot will start executing. Halt at the u-boot prompt (u-boot logs will
appear on the MAIN UART 1st instance)
3 这时候你就u-boot了,你可以按任意键停止
SD Boot or any Other Boot Mode
如果板上有 SD 引导或任何其他引导模式功能,只需使用它来引导直到 u-boot,然后您就可以使用所有 u-boot 实用程序
配置Boot0分区和分区eMMC
需要进行一次性配置以允许 ROM 访问 eMMC 的 boot0 分区
# Run the below from u-boot prompt
# Write partition table to eMMC
setenv mmcdev 0
gpt write mmc 0 ${partitions}#one time only per board, to give ROM access to the boot partition, the following commands must be
used for the first time
mmc partconf 0 1 1 1
mmc bootbus 0 2 0 0
刷写OSPI
https://blog.csdn.net/Allen_Spring/article/details/120652422
Linux Boot Binaries
# Flash R5 SPL
/home/karan/sdk7_3/board-support/prebuiltimages/tiboot3.bin -d 3 -o 0
# Flash A72 SPL/home/karan/sdk7_3/board-support/prebuiltimages/tispl.bin -d 3 -o 80000
# Flash u-boot
/home/karan/sdk7_3/board-support/prebuiltimages/u-boot.img -d 3 -o 280000
# Flash sysfw.itb/home/karan/sdk7_3/board-support/prebuiltimages/sysfw.itb -d 3 -o 6C0000
# Flash phy training data
/home/karan/sdk7_3/ti-processor-sdk-rtos-j721e-evm-07_03_00_07/pdk_jacinto_07_03_00_29/
packages/ti/board/src/flash/nor/ospi/nor_spi_patterns.bin -d 3 -o 3FE0000
RTOS Boot Binaries
# Flash R5 SPL
/home/karan/sdk7_3/board-support/prebuiltimages/tiboot3.bin -d 3 -o 0
# Flash A72 SPL
/home/karan/sdk7_3/board-support/prebuiltimages/tispl.bin -d 3 -o 80000
# Flash u-boot
/home/karan/sdk7_3/board-support/prebuiltimages/u-boot.img -d 3 -o 280000
# Flash sysfw.itb
/home/karan/sdk7_3/board-support/prebuiltimages/sysfw.itb -d 3 -o 6C0000
# Flash phy training data(增强spi数据读取性能)
/home/karan/sdk7_3/ti-processor-sdk-rtos-j721e-evm-07_03_00_07/pdk_jacinto_07_03_00_29/
packages/ti/board/src/flash/nor/ospi/nor_spi_patterns.bin -d 3 -o 3FE0000
tips 分析下几个boot文件的调用顺序
https://software-dl.ti.com/jacinto7/esd/processor-sdk-linux-jacinto7/latest/exports/docs/linux/Foundational_Components/U-Boot/UG-General-Info.html
在基于 K3 架构的设备上,ROM 仅支持通过 MCU(R5) 启动。 这意味着引导加载程序必须在 R5 内核上运行。 为了满足这个约束,保证安全并有更快的启动时间,软件启动架构设计如下:
+------------------------------------------------------------------------+
| DMSC | R5 | ARM64 |
+------------------------------------------------------------------------+
| +--------+ | | |
| | Reset | | | |
| +--------+ | | |
| : | | |
| +--------+ | +-----------+ | |
| | *ROM* |----------|-->| Reset rls | | |
| +--------+ | +-----------+ | |
| | | | : | |
| | ROM | | : | |
| |services| | : | |
| | | | +-------------+ | |
| | | | | *R5 ROM* | | |
| | | | +-------------+ | |
| | |<---------|---|Load and auth| | |
| | | | | tiboot3.bin | | |
| | | | +-------------+ | |
| | | | : | |
| | | | : | |
| | | | : | |
| | | | +-------------+ | |
| | | | | *R5 SPL* | | |
| | | | +-------------+ | |
| | | | | Load | | |
| | | | | sysfw.itb | | |
| | Start | | +-------------+ | |
| | System |<---------|---| Start | | |
| |Firmware| | | SYSFW | | |
| +--------+ | +-------------+ | |
| : | | | | |
| +---------+ | | Load | | |
| | *SYSFW* | | | system | | |
| +---------+ | | Config data | | |
| | |<--------|---| | | |
| | | | +-------------+ | |
| | | | | | | |
| | | | | DDR | | |
| | | | | config | | |
| | | | +-------------+ | |
| | | | | | | |
| | |<--------|---| Start A53 | | |
| | | | | and Reset | | |
| | | | +-------------+ | |
| | | | | +-----------+ |
| | |---------|-----------------------|---->| Reset rls | |
| | | | | +-----------+ |
| | DMSC | | | : |
| |Services | | | +-----------+ |
| | |<--------|-----------------------|---->|*ATF/OPTEE*| |
| | | | | +-----------+ |
| | | | | : |
| | | | | +-----------+ |
| | |<--------|-----------------------|---->| *A53 SPL* | |
| | | | | +-----------+ |
| | | | | | Load | |
| | | | | | u-boot.img| |
| | | | | +-----------+ |
| | | | | : |
| | | | | +-----------+ |
| | |<--------|-----------------------|---->| *U-Boot* | |
| | | | | +-----------+ |
| | | | | | prompt | |
| | | | | +-----------+ |
| +---------+ | | |
| | | |
+------------------------------------------------------------------------+
刷写 emmc RAW
/home/karan/sdk7_3/board-support/prebuiltimages/tiboot3.bin -d 4 -o 0
/home/karan/sdk7_3/board-support/prebuiltimages/tispl.bin -d 4 -o 80000
/home/karan/sdk7_3/board-support/prebuiltimages/u-boot.img -d 4 -o 280000
/home/karan/sdk7_3/board-support/prebuiltimages/sysfw.itb -d 4 -o 6C0000
刷写eMMC UDA Partition Flashing With tinyrootfs
1、在u-boot等待
2、连接 CCS,使用 XDS110/XDS560v2 ,并使用适当的目标 ccxml(不包括 GEL 文件)
3、将tisdk-tiny-image.img加载到DDR地址0x80080000。 ext4文件
a. 启动目标 ccxml ,并连接到 CortexA72_0_0。
b. 打开内存浏览器并加载内存:查看 -> 内存浏览器 -> 加载内存。
c. 选择文件tisdk-tiny-image.img,文件类型选择二进制,点击下一步。
d. 设置起始地址为0x80080000,点击完成。
e. 根据所使用的 JTAG,加载它所花费的时间会有所不同。 预计 XDS110 为 1 小时,XDS560v2 为 20 分钟。
4、像加载到 RAM 中,使用 u-boot 刷入。
u-boot + CCS/JTAG
# Run the below command from u-boot prompt
=> part start mmc 0 rootfs# what ever the above command outputs, use that below (eg - 0x22)
=> mmc write 0x80080000 0x22 0x32000
# after the above completes
=> boot
【TDA4系列】硬件分析与刷写程序的几种方式相关推荐
- 运行python程序的两种方式交互式和文件式_执行Python程序的两种方式
交互式(了解) 交互式环境下,敲完一条命令按下enter键马上能看到结果,调试程序方便.程序无法永久保存,关掉cmd窗口数据就消失了. 命令行式(了解) 打开文本编辑器,在文本编辑器中写入一串字符. ...
- python有两个运行程序分别是什么_运行python程序的两种方式
[单选题]I wonder why ________ are so interested in action movies. [单选题]项目经理的职责不包括以下哪项内容 ? [简答题]结合项目的特点和 ...
- 运行python程序的两种方式交互式和文件式_教你如何编写、保存与运行 Python 程序...
第一步 接下来我们将看见如何在 Python 中运行一个传统的"Hello World"程序.Python教程本章将会教你如何编写.保存与运行 Python 程序. 通过 Pyth ...
- JavaScript系列-02 HTML嵌入js代码的第二种方式
javaScript系列 HTML中嵌入js代码的第二种方式 脚本块的方式 文章目录 javaScript系列 前言 一.了解脚本块的方式 1.1运行规则 二.执行原理 1.编写代码 2.效果 总结 ...
- 周一02.3运行python程序的两种方式
一.运行python程序的两种方式 方法一:交互式: 优点:输入一行代码立刻返回结果 缺点:无法永久保存代码 方法 ...
- ETH:Windows搭建ETH(区块链技术)利用Web端和小程序端两种方式调用ETH上的SC智能合约
ETH:Windows搭建ETH(区块链技术)利用Web端和小程序端两种方式调用ETH上的SC智能合约 目录 1.Geth安装.配置文件.与ETH节点交互 1.1.下载并安装好geth客户端 1.2. ...
- 运行Python程序的2种方式
运行Python程序有2种方式: 使用交互式的带提示符的解释器 传统的使用源文件的方式 1.第一种方式 打开解释器 输入代码按回车,即可运行 2.第二种方式 新建一个python文件(我在D盘下新建了 ...
- [译]使用Webpack提高Vue.js应用程序的4种方式
[译]使用Webpack提高Vue.js应用程序的4种方式 原文地址 Webpack是开发Vue.js单页应用程序的重要工具.通过管理复杂的构建步骤,您可以更轻松地开发工作流程,并优化应用程序的大 ...
- 执行 Python 程序的三种方式及Python 的 IDE —— `PyCharm`
执行 Python 程序的三种方式 3.1. 解释器 python / python3 Python 的解释器 # 使用 python 2.x 解释器 $ python xxx.py# 使用 pyth ...
- python打开方式包括_运行Python程序有两种方式:________和________。
运行Python程序有两种方式:________和________. 答: 交互式 文件式 自觉的人,心目中有一张蓝图,人生理想.但是不知道世界的游戏规则 答:× 山水画的鉴赏方法? 答:1.首先看风 ...
最新文章
- 国内 Java 开发者必备的两个神器:Maven国内镜像和Spring国内脚手架
- Bitdefender 服务器版安装程序官方下载
- 吴恩达机器学习(第三章)——线性代数回顾
- birt脚本for循环_Shell脚本编程2 for循环/while循环
- 海史密斯敏捷企业架构
- java数据库的优化_用Java向数据库中插入大量数据时的优化
- Linux学习总结(42)——Linux之Bash脚本入门学习
- 后缀数组 倍增法详解
- 服务器动态上下线监听案例
- ANTS Memory Profiler - NET内存泄漏分析工具
- ArcMap提取不规则线的坐标
- 雷达信号处理基础 ch1 note1
- 腾讯电子签小程序就能开收据了
- 免费开源网站系统html,全CMS开源系统
- JDK中的BitMap实现之BitSet源码分析
- 小结大学计算机基础课程内容报告,WORD制作新年贺卡和个人简历大学计算机基础课程设计报告书...
- 看完《一九四二》的感受--也写给正在找工作时迷茫的你
- regulator框架
- 风向值与风向描述定义
- 微信t服务器地址,微信地址怎么改?教你如何修改微信地址
热门文章
- 二级分类php代码,php smarty 二级分类代码和模版循环例子
- 实习成长之路:MySQL十:怎么给字符串字段加索引?
- Flutter之Flutter-Redux框架源码解析
- mysql自定义函数索引_MySQL自定义函数、视图、索引
- FFA 2021 专场解读 - 开源解决方案 / 流批一体
- 全网疯传的PDF干货合集,50个精选BAT等大厂大数据、算法落地经验,白拿不谢!...
- 找工作,如何写好一份漂亮的简历,给你借鉴一下
- 中职计算机专业学Excel,2013年中职计算机应用专业中文Excel电子表格处理实际操作练习.doc...
- python读取文件夹下所有图像_Python 读取指定文件夹下的所有图像方法
- python读取word文件内容_[python]读取word文档中的数据,整理成excel表