8255 boot介绍及bring up经验分享

这篇文章会简单的介绍8255的启动流程,然后着重介绍8255在实际项目中新硬件上的bring up工作,可以给大家做些参考。

8255 boot介绍

下面这些信息来自文档:《QAM8255P IVI Boot and CoreBSP Architecture Technical Overview》 80-42847-11 Rev. AC,如果已经对这个文档比较熟悉可以跳过这个部分。如果没有看过,建议一定要认真看一遍。

1. After the chipset is reset, the SAIL and Qualcomm® Kryo™ CPU Gold core 0 comes out of reset. 
1a. SAIL configures the pre-built-in self-test (pre-BIST) and go into wait for interrupt (WFI) and hardware BIST controller unit (HBCU), which is a 
hardware controller performs the BIST on SAIL. SAIL PBL initializes hardware and loads SAIL hypervisor to run.
1b. SAIL hypervisor loads the SW1/SW2/SW3 images.
1c. APPS core0 executes application primary boot loader (APPS PBL) pre-BIST configuration and goes into WFI and wait for SAIL communication 
to run BIST on APSS. After Phase-1 BIST, SAIL sends post BIST reset to APSS, APSS reset and the Kryo Gold core 0, APPS PBL initializes 
hardware (timer, PRNG, clocks, and so on), enables caches and memory management unit (MMU), and detects the boot device according to 
the boot option configuration:
□ Default boot option for APSS: UFS
□ Default boot option for SAIL: NOR
□ Default boot option: Overridden by EDL cookie or force USB GPIO
2a. APPS PBL loads and authenticates XBL loader (region #1) from the boot device to the Boot IMEM.
2b. APPS PBL loads and authenticates XBL SDI (region #2) from the boot device to on-chip internal memory (OCIMEM).
2c. APPS PBL loads XBL SEC (region #0) from the boot device to boot IMEM. XBL SEC is a QTI-signed ELF segment, which locks xPUs. XBL 
SEC runs the security configuration in the EL3 mode
3. XBL SEC runs the security configuration in the EL3 mode and after it is done, it will inform SAIL hypervisor that APPS is ready for the phase 
BIST-II on DPU, Camera, CamNoc, NSP, Ethernet, PCIe, and so on.
4a. XBL loader will take over control and continue to load multi-image signature and integrity check (MISC).
4b. XBL loader loads and authenticates XBLConfig image.
4c. XBL loader loads SHRM.
4d. XBL loader loads and authenticates MISC image.
4e. XBL loader loads and authenticates the AOP image from the boot device to the AOP CodeRAM.
4f. XBL loader brings the AOP processor out of reset.
4g. XBL loader will then load and authenticate the CPU firmware. 
4h. XBL loader loads and authenticates Qualcomm® Trusted Execution Environment (TEE) into pseudo internal memory (pIMEM).
4i. XBL loader loads and authenticates Qualcomm® Hypervisor Execution Environment (HEE). 
4j. Loads and authenticates XBL core from XBL image.
4k. XBL jumps to XBL_SEC and XBL SEC transfers execution to the Qualcomm TEE.
5. Qualcomm TEE transfers the execution to Qualcomm HEE, Qualcomm HEE runs at EL2 mode. Qualcomm HEE configures SMMUs and 
provides virtualization support.
6. Qualcomm HEE transfers the execution to XBL core(region #3). It runs at nonsecure EL1 mode
7. Linux loader application (part of application boot loader firmware volume (ABL FV)) loads and authenticates the HLOS kernel with verified boot, 
jumps to HLOS. HLOS runs at nonsecure EL1 mode
8-13. HLOS Peripheral image loader (PIL) driver loads all subsystems iris firmware (FW), camera FW, audio FW, sensor FW, turing FW, deep 
learning FW images to DDR and configures the clocks and power rails, if necessary. HLOS PIL driver executes a secure channel manager 
(SCM) call to Qualcomm TEE to request a secure PIL driver, authenticates images, and Qualcomm HEE brings each subsystem out of reset.
QAM8255P Cold Boot Flow – Phase 2 BIST 

8255 bring up经验分享

这几天刚刚把新到的8255的硬件完成了bring up,中间遇到了挺多问题,趁着现在还有些印象抓紧记录一下。

8255 boot硬件框架

1,由于功能安全的要求,8255的boot流程和8155有很大的差异

2,MCU和SAIL(安全岛)在boot的流程中需要多次握手,且SAIL软件正常工作时才会放行MD(main domain)域的软件

3,MCU-SAIL之间通信方式为UART,同时SAIL会向外输出ERR_PIN1/PIN2来表明当前的异常状态

4,SAIL和MD之间是通过mailbox进行通信,他们之间也会做一些状态监控

5,这里的MD主域指的是APPS,即application processes,我们常说的A核

6,这里的MCU/VIP型号可能是TC397也可能是瑞萨的RH850系列

8255 bring up前期准备

bring up工作更像是阶段性的总结工作,对这一阶段的工作成果进行验证和总结,打个比喻,你可以认为bring up是一次期中考试。前期工作做的好不好,准备的充不充分,将会在这个时刻得到充分的验证。所以越是前期工作准备的越充分,bring up节点到来的时候,成功bring up的难度就越小,成功率就越高,软硬件的问题也就越少。

硬件设计阶段

在前期的硬件设计阶段,你需要:

1,参与硬件原理图设计的评审会

2,检查review pin mux/HSIS

文档准备

软件需要提前阅读熟悉下面几个文档:

QAM8255P IVI Boot and CoreBSP Architecture Technical Overview

Qualcomm® Snapdragon Ride™ Platform Automotive Reference (SA8775P/SA8650P/SRV1H/SRV1M/SA8255P/ SA8620P/SA7255P) Vehicle Interface Processor (Aurix) User Guide)

SoC-MCU Protocol – Boot and Safety Status Messages

MCU部分

1,搭建好MCU的开发环境

2,熟悉MCU芯片的各项功能,编写控制GPIO驱动,SPI/UART通信驱动

3,熟悉MCU-SAIL之间的通信方式,握手机制,阅读相关的文档

SOC部分

编译环境准备

1,准备好QNX的编译环境,下载好SDP包

2,下载8255 SDK软件包

3,编译好所有镜像文件

烧录环境准备

1,安装刷机软件,熟悉刷机流程

2,准备好相关的刷机工具,如USB线束等

8255 硬件bring up

MCU供电部分

MCU需要根据手册要求控制连接到PMIC的两个pin脚:PWR_EN和RESET。

这里的前提是MCU自己本身的bring-up已经完成!

这里我们就遇到了一些问题,在bring up MCU的时候,烧录完MCU的软件,重新上电之后发现MCU的晶振并没有起振。做了一些列的检查之后,发现硬件本身是没有问题的,问题出在软件上,这个MCU比较特殊,需要配置一些参数才能触发外部晶振起振(MCU内部自带一个时钟源)。

电源检测流程图:

8255 刷机

下面的每一个步骤都是在上一个步骤完成的前提下进行的:

1,需要确保MCU自身bring up 完成

2,MCU完成对PWR_EN/RESET两个pin的控制之后,需要硬件确认所有的供电是否正常才能进行下一步

3,通过FORCE_USB pin强制让SOC进入下载模式

4,SOC进入下载模式后,连接USB CABLE到PC上,这个时候应该在PC上识别到com设备,如果没有观察到COM设备,请回去检查前面的步骤,需要注意的是进入下载模式的COM设备是不需要安装特别驱动就能识别到的!

5,打开烧录软件,烧录nor-flash,UFS,需要注意的是在烧录nor-flash时,需要先擦在写(这里我们踩过坑),UFS需要做一次provision。

6,如果烧录成功,那么刷机软件会有相应的提示,否则会提示错误,这里导致烧录失败的原因有很多,比如DDR的问题,线束的问题,供电的问题等等,可以说烧录成功是bring up成功的一个里程碑的节点。

MCU-SAIL握手通信

MCU-SAIL之间需要有一些通信和握手,细节可以看下面这张图。

总结来说:

1,在MCU给SOC上电之后,MCU需要通过uart来查询SAIL的bootstatus,发送的数据帧格式长下面这样:

具体来说是:crc+cmd 0xB0 + 0x10 + 数据包长度64个字节 0x40 + 消息序列号,从0开始每次递增1 + data[0] ... data[58]. 下面是几个具体的发送帧示例:

数据包的总长度是64个字节

2,这个时候SAIL通常会返回一个256个字节数据帧来告诉MCU当前他的boot状态

一个正常的uart返回帧:

一个异常的返回帧:

需要注意的是,异常的时候返回的数据帧格式可能不是完全按照 第2点的帧格式返回的,但是也是可以解析出来哪里出了异常。比如上面返回的异常uart消息,我们可以按照协议解析出来哪里出了问题

比如这里读回来的异常状态帧数据:00 A0 10 0C 00 F0 B1 40 00 00 0D E0 04 00 E2 FF FF FF 

对应观察到的现象:

SAIL debug uart: 无任何输出

MD debug uart:输出下面日志之后,停住

Format: Log Type - Time(microsec) - Message - Optional Info
Log Type: B - Since Boot(Power On Reset),  D - Delta,  S - Statistic
S - QC_IMAGE_VERSION_STRING=BOOT.MXF.1.2-00286-LEMANS-1
S - IMAGE_VARIANT_STRING=SocLeMansAU
S - OEM_IMAGE_VERSION_STRING=ip-10-195-204-120
S - Boot Interface: UFS
S - Secure Boot: Off
S - Boot Config @ 0x00786064 = 0x000000c0
S - JTAG ID @ 0x00786130 = 0x101cf0e1
S - OEM ID @ 0x00786138 = 0x00000000
S - Serial Number @ 0x00786134 = 0x2b1b8fbf
S - OEM Config Row 0 @ 0x007841a8 = 0x0000000000000000
S - OEM Config Row 1 @ 0x007841b0 = 0x0000000000400000
S - Raw PTE Row 0 @ 0x00784158 = 0x300101cf
S - Core 0 Frequency, 1632 MHz
S - PBL Patch Ver: 2
D -      8341 - pbl_apps_init_timestamp
D -     35427 - bootable_media_detect_timestamp
D -       953 - bl_elf_metadata_loading_timestamp
D -       556 - bl_hash_seg_auth_timestamp
D -      6396 - bl_elf_loadable_segment_loading_timestamp
D -      4260 - bl_elf_segs_hash_verify_timestamp
D -      3164 - bl_sec_hash_seg_auth_timestamp
D -       826 - bl_sec_segs_hash_verify_timestamp
D -        12 - pbl_populate_shared_data_and_exit_timestamp
S -     59935 - PBL, End
B -     67557 - SBL1, Start
B -    198921 - SBL1 BUILD @ 14:24:59 on Sep 13 2023
B -    203404 - usb: usb2phy: PRIM success , 0x4
B -    206271 - usb: qusb_ldr_eud_init
B -    210724 - usb: eud_serial_upd , 0x2b1b8fbf
D -     12779 - sbl1_hw_init
D -         0 - init_partition_ids
D -         0 - boot_flashless_boot_init
D -         0 - boot_sail_pbl_edl_check
D -      4575 - sail_execute_bist_sequence
B -    234057 - UFS Boot LUN: 1
B -    243298 - UFS INQUIRY ID: KIOXIA  THGJFGT0T25BAZZA0100
D -     20130 - boot_media_init
D -         0 - boot_check_recoveryinfo_partition
D -         0 - boot_update_sbl_recovery_partition_ids
B -    260470 - BOOT_BANK_A
B -    265533 - Recovery: partition magic not set
B -    268003 - Recovery: Info missing
D -     12047 - boot_recovery_select_boot_partitions
D -         0 - boot_recovery_partitions_info_imem_init
D -        30 - boot_save_sbl_recovery_partition_info
B -    285907 - SAIL SS -  Image Load, Start
D -      4849 - SAIL SS -  Image Loaded, Delta - (0 Bytes)
D -         0 - boot_recovery_media_partial_init_return
D -        31 - boot_default_cdt_init
D -        92 - boot_cdt_init
B -    308660 - CDT -  Image Load, Start
D -      2745 - CDT -  Image Loaded, Delta - (0 Bytes)
D -        30 - shrm_load_cancel
B -    320097 - SHRM -  Image Load, Start
D -       762 - Auth Metadata
D -      1128 - Segments hash check
D -      9577 - SHRM -  Image Loaded, Delta - (35744 Bytes)
D -       610 - Auth Metadata
D -      5612 - sbl1_xblconfig_init
D -       183 - sbl1_xcfg_sw_feature_config_init
D -         0 - init-logstomedia
D -         0 - sbl1_xcfg_process_bds_entry_flag
B -    351848 - CDT Version:3,Platform ID:37,Major ID:1,Minor ID:0,Subtype:1
D -     20709 - sbl1_hw_platform_pre_ddr
D -         0 - devcfg init
B -    382073 - PMIC A:2.0 B:2.0 C:2.0 D:2.0 E:2.0 F:2.0 G:2.0 H:2.0
B -    493490 - PM: PSI: b0xe0_v0xd2
B -    495991 - PM: Device Init # SPMI Transn: 2454
D -    120628 - pm_device_init, Delta
B -    501633 - pm_driver_init, Start
B -    508557 - PM: Driver Init # SPMI Transn: 232
D -      3477 - pm_driver_init, Delta
B -    513223 - vsense_init, Start
D -         0 - vsense_init, Delta
B -    519964 - wait-for-bist, Start
B -    523166 - waiting for SAIL to finish MD P2 BIST

对于异常帧数据的解析及定位原因

返回的异常帧数据为:00 A0 10 0C 00 F0 B1 40 00 00 0D E0 04 00 E2 FF FF FF

00 A0 10 0C 00 F0: 这段数据应该是有特殊含义的,但是目前手头上没这块手册,所以不知道具体含义。

B1: 对应的是上图DATA0 数据域

40:对应DATA1

00: 对应DATA2,表明CORE1/2/3均处于未RELEASE的状态,CORE1/2/3均未处于START状态

00:对应DATA3,同样表明每个CORE的EL1状态

0D:表明SAIL一直处于BIST状态,MD没有在BIST状态

总结来说:

1,SAIL上的CORE1/2/3均处于未运行的状态,很有可能只有CORE 0处于running状态

2,SAIL一直处于BIST状态,说明BIST失败或者没有办法进入下一个阶段

3,MD不处于BIST状态,可能为未运行或者已经完成了BIST

回到 《QAM8255P IVI Boot and CoreBSP Architecture Technical Overview》中对于boot的流程的说明:

1,在PMIC给SOC正确上电之后,SAIL_PBL&MD_PBL都会无条件运行

2,SAIL_PBL会负责load SAIL_HYP镜像,并且跳转到SAIL_HYP上

3,SAIL_HYP会负责load SAIL SW1/2/3镜像

4,需要注意的是,这个时候MD的core 0也是同时在跑的

MD第一行日志

SAIL第一行日志

QNX bring up

Android bring up

成功启动Launcher

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/191302.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023年开发语言和数据库排行

2023年开发语言和数据库排行 一、开发语言相关1. Python1.1 Python优点1.2 Python缺点1.3 Python应用领域 2. C 语言2.1 C 语言优点2.2 C 语言缺点2.3 C语言应用领域 3. Java3.1 Java 优点3.2 Java缺点3.3 Java应用场景 4. C4.1 C 优点4.2 C 缺点4.3 C 应用场景 5. C#5.1 C# 优…

模拟退火算法MATLAB实现

介绍 算法试图随着控制参数T的降低,使目标函 数值f(内能E)也逐渐降低,直至趋于全局最 小值(退火中低温时的最低能量状态),算法 工作过程就像固体退火过程一样。 Metropolis准则——–以概率接受…

ROS话题(Topic)通信:通信模型、Hello World与拓展

文章目录 一、话题通讯模型二、Topic Hello World2.1 创建并初始化功能包2.2 确定Topic名称及消息格式2.3 实现发布者与订阅者(C版)2.4 实现发布者与订阅者(Python版)2.5 关于Topic Hello World的注意 拓展1:devel下其…

预览PDF并显示当前页数

这里写目录标题 步骤实例实例效果图 步骤 1.安装依赖 npm install --save vue-pdf2.在需要的页面&#xff0c;引入插件 import pdf from vue-pdf3.使用 单页pdf可以直接使用 <pdf :src"获取到的pdf地址"></pdf>多页pdf通过循环实现 html标签部分 &l…

Banana Pi BPI-M5 Boot Log 导出说明

准备&#xff1a; Preparation: 1、 一块bpi的开发板&#xff0c;一根ttl的串口线&#xff0c;以及一张烧录好镜像的sd/tf卡&#xff08;烧录到eMMC也行&#xff09;。 1. A BPI development board, a TTL serial port cable, and an SD/TF card with a burned image (it ca…

高并发架构设计(三大利器:缓存、限流和降级)

引言 高并发背景 互联网行业迅速发展&#xff0c;用户量剧增&#xff0c;系统面临巨大的并发请求压力。 软件系统有三个追求&#xff1a;高性能、高并发、高可用&#xff0c;俗称三高。三者既有区别也有联系&#xff0c;门门道道很多&#xff0c;全面讨论需要三天三夜&#…

Rust编程中的共享状态并发执行

1.共享状态并发 虽然消息传递是一个很好的处理并发的方式&#xff0c;但并不是唯一一个。另一种方式是让多个线程拥有相同的共享数据。在学习Go语言编程过程中大家应该听到过一句口号:"不要通过共享内存来通讯"。 在某种程度上&#xff0c;任何编程语言中的信道都类…

stm32超声波测距不准的解决方法(STM32 delay_us()产生1us)及stm32智能小车超声波测距代码(C语言版本)

首先要说明一下原理&#xff1a;使用stm32无法准确产生1us的时间&#xff0c;但是超声波测距一定要依赖时间&#xff0c;时间不准&#xff0c;距离一定不准&#xff0c;这是要肯定的&#xff0c;但是在不准确的情况下&#xff0c;要测量一个比较准确的时间&#xff0c;那么只能…

PHP中$_SERVER全局变量

在PHP中&#xff0c;$_SERVER 是一个全局数组变量&#xff0c;它包含了有关服务器和当前脚本的信息。$_SERVER 数组中的每个元素都是服务器环境的一个参数&#xff0c;如请求的方法、请求的 URI、客户端 IP 地址等。 PATH 系统环境变量的值&#xff0c;包含了多个目录的路径…

【Word自定义配置,超简单,图文并茂】自定义Word中的默认配置,比如标题大小与颜色(参考科研作图配色),正文字体等

▚ 01 自定义样式Styles中的默认标题模板 &#x1f4e2;自定义标题的显示效果&#xff0c;如下图所示&#xff1a; 1.1 自定义标题的模板Normal.dotm 1.1.1 选择所需修改的标题 新建一个空白Word文档&#xff0c;依次选择菜单栏的开始Home&#xff0c;样式Styles&#xff0c;…

Python生成随机数插件Faker的用法

目录 引言 一、Faker库的安装 二、Faker库的基本用法 1、导入Faker类 2、创建Faker对象 3、使用Faker对象生成随机数据 三、Faker库的高级用法 1、自定义数据生成规则 2、使用子模块进行特定领域的数据生成 3、与其他库结合使用 四、Faker库的应用场景 1、单元测试…

TCP与UDP

文章目录 TCP与UDP传输层的作用端口号UDPTCPUDP首部的格式TCP首部格式 TCP与UDP TCP/IP中有两个具有代表性的传输层协议&#xff0c;它们分别是TCP和UDP。TCP提供可靠的通信传输&#xff0c;而UDP则常被用于让广播和细节控制交给应用的通信传输。总之&#xff0c;根据通信的具…

MTK Camera2 的OPEN API流程认知

MTK的设计架构 再了解Camera的open api调用之前我们&#xff0c;需要了解Camera的架构&#xff0c;这样才能提高阅读代码的效率。 代码跟读&#xff1a; 在这个图中大致介绍了OpenCamera的具体调用&#xff0c;下面我们逐步分析Camera的open调用流程。 逐步分析 一、 我们抛…

如何使用PHPStudy本地快速搭建网站并实现远程访问

文章目录 [toc]使用工具1. 本地搭建web网站1.1 下载phpstudy后解压并安装1.2 打开默认站点&#xff0c;测试1.3 下载静态演示站点1.4 打开站点根目录1.5 复制演示站点到站网根目录1.6 在浏览器中&#xff0c;查看演示效果。 2. 将本地web网站发布到公网2.1 安装cpolar内网穿透2…

Flutter笔记:绘图示例 - 一个简单的(Canvas )时钟应用

Flutter笔记 绘图示例 - 一个简单的&#xff08;Canvas &#xff09;时钟应用 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_2855…

【算法|动态规划 | 区间dp No.2】AcWing 1068.环形石子合并

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【AcWing算法提高学习专栏】【手撕算法系列专栏】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&a…

内衣洗衣机和手洗哪个干净?好用的内衣洗衣机推荐

在日常生活中&#xff0c;我们的衣服不可避免地会沾染上各种细菌、毛发和污渍&#xff0c;将它们与贴身衣物混合清洗&#xff0c;很容易发生交叉感染&#xff0c;而被感染后&#xff0c;贴身衣物也有可能导致我们人体引起皮肤病。这也是为什么大部分人都喜欢用手洗的原因&#…

Android WebView专题

WebView 专题 第一个WebView程序&#xff1a;加载远程网址 Layout添加WebView组件&#xff1b; <WebViewandroid:id"id/webView_first"android:layout_width"match_parent"android:layout_height"match_parent"/>初始化组件&#xff0c;加…

Socket网络编程(服务端和客户端代码示例)

本文主要讲解Socket网络编程。 首先介绍socket&#xff0c;包括TCP和UDP通信过程&#xff1b;然后介绍常用的函数&#xff1b;最后编写client-server例子&#xff0c;并进行测试。 文章目录 Socket介绍TCP通信过程服务器端通信过程&#xff1a;客户端通信过程&#xff1a; UDP通…

SA实战 ·《SpringCloud Alibaba实战》第13章-服务网关:项目整合SpringCloud Gateway网关

大家好,我是冰河~~ 一不小心[SpringCloud Alibaba实战》专栏都更新到第13章了,再不上车就跟不上了,小伙伴们快跟上啊! 在《SpringCloud Alibaba实战》专栏前面的文章中,我们实现了用户微服务、商品微服务和订单微服务之间的远程调用,并且实现了服务调用的负载均衡。也基于…