【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


  • 3
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值