哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

i.MXRT系列的ROM API設(shè)計(jì)

電子設(shè)計(jì) ? 來(lái)源:電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2020-10-30 10:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是 i.MXRTxxx 系列 ROM API 設(shè)計(jì)細(xì)節(jié)。

痞子衡之前寫過(guò)兩篇文章 《利用 i.MXRT1xxx 系列 ROM 提供的 FlexSPI driver API 可輕松 IAP》、《其實(shí) i.MXRT1050,1020,1015 系列 ROM 也提供了 FlexSPI driver API》 基本把 i.MXRT1xxx 全系列的 ROM API 及其 FlexSPI NOR 驅(qū)動(dòng)設(shè)計(jì)都講清楚了,其實(shí) i.MXRTxxx 系列的 ROM API 設(shè)計(jì)跟 i.MXRT1xxx 系列的設(shè)計(jì)思路差不多(其實(shí)本就是同一個(gè)恩智浦研發(fā)小組負(fù)責(zé)的),僅有一些微小區(qū)別,本文痞子衡主要就是點(diǎn)出那些區(qū)別。

一、ROM 基址差異

ROM API 代碼首先是在 BootROM 里,BootROM 代碼是出廠前固化在 ROM 區(qū)域的。因?yàn)榧軜?gòu)設(shè)計(jì)的關(guān)系,i.MXRTxxx 系列和 i.MXRT1xxx 系列的 ROM 區(qū)域在系統(tǒng)內(nèi)存里的映射地址不同。

下表是 i.MXRTxxx 系列代表型號(hào) i.MXRT500 的部分系統(tǒng)內(nèi)存映射,可以看到 ROM 區(qū)域起始地址是 0x03000000(非安全域)。目前 i.MXRTxxx 都是 Cortex-M33 內(nèi)核,支持 TrustZone 特性,所以 0x13000000 也是 ROM 起始地址(安全域),為了通用性,我們認(rèn) 0x03000000 就可以了,這個(gè)地址在安全狀態(tài)和非安全狀態(tài)下都能被訪問(wèn)。


下表是 i.MXRT1xxx 系列代表型號(hào) i.MXRT1060 的部分系統(tǒng)內(nèi)存映射,可以看到 ROM 區(qū)域起始地址是 0x00200000。i.MXRT1xxx 系列都是 Cortex-M7 內(nèi)核,沒有 TrustZone 特性,不存在 i.MXRTxxx 上那樣的兩種狀態(tài)域下的地址。


二、API 基址備份位置差異

在 i.MXRT1xxx 系列 ROM API 介紹的文章里,痞子衡介紹過(guò) g_bootloaderTree 地址值被復(fù)制了一份放在了 BootROM 中斷向量表第 8 個(gè)向量的位置處(該向量為 ARMv7-M 架構(gòu)下未定義的系統(tǒng)向量),因此讀取 0x0020001c 處開始的 4bytes 便能找到 i.MXRT1xxx 系列的 g_bootloaderTree。

但是由于 i.MXRTxxx 是 Cortex-M33 內(nèi)核,屬于 ARMv8-M 架構(gòu),從下圖中可以看出 ARMv8-M 架構(gòu)下中斷向量表第 8 個(gè)向量是 SecureFault,已經(jīng)被定義了,因此 BootROM 把 g_bootloaderTree 地址值放到了第 9 個(gè)向量的位置處(該向量為 ARMv8-M 架構(gòu)下未定義的系統(tǒng)向量),故讀取 0x03000020 處開始的 4bytes 才能找到 i.MXRTxxx 系列的 g_bootloaderTree(這種方式在實(shí)際 API 調(diào)用中并不可取,至于原因嘛,先賣個(gè)關(guān)子)。

下面是 i.MXRT500 BootROM 工程的 startup 文件(IAR 版),g_bootloaderTree 確實(shí)在第 9 個(gè)向量處:

MODULE ?cstartup

;; Forward declaration of sections.
SECTION CSTACK:DATA:NOROOT(3)
SECTION .intvec:CODE:NOROOT(2)

EXTERN __iar_program_start
EXTERN g_bootloaderTree
PUBLIC __vector_table
PUBLIC __vector_table_0x1c

DATA

__vector_table
DCD sfe(CSTACK)
DCD Reset_Handler
DCD DefaultISR
DCD HardFault_Handler
DCD DefaultISR
DCD DefaultISR
DCD UsageFault_Handler
__vector_table_0x1c
DCD SecureFault_Handler
DCD g_bootloaderTree
DCD 0
DCD 0
DCD SVC_Handler
DCD DefaultISR
DCD 0
DCD DefaultISR
DCD SysTick_Handler
;; ...

三、API 原型定義差異

下面是 i.MXRTxxx 系列 ROM API 原型定義及其實(shí)例(適用 i.MXRT500/600),基本形式跟 i.MXRT1xxx 差不多,但是 API 功能更豐富,除了 FlexSPI NOR 驅(qū)動(dòng),還有 iap api、USB low-level driver、otp driver 等(我們知道,i.MXRTxxx 與 LPC 系列同根同源,LPC 系列 ROM 里一般都會(huì)集成很多經(jīng)典 SDK 驅(qū)動(dòng),比如內(nèi)部 flash、low power 驅(qū)動(dòng),有了這些穩(wěn)定的驅(qū)動(dòng) API,LPC 系列的用戶手冊(cè)里甚至都會(huì)省去這些 IP 的寄存器介紹,直接就是 API 的介紹)。

typedef struct
{
void (*runBootloader)(void *arg);
uint32_t version;
const char *copyright;
const bootloader_context_t *runtimeContext;
const kb_interface_t *kbApi;
const usb_driver_interface_t *usbDriver;
const USBD_API_T *lpcUsbDriver;
const flexspi_nor_flash_driver_t *flexspiNorDriver;
const ocotp_driver_t *otpDriver;
const skboot_authenticate_interface_t *skbootAuthenticate;
} bootloader_api_entry_t;

//! @brief Static API tree.
__root const bootloader_api_entry_t g_bootloaderTree @".rom_api_tree_section" = {
.runBootloader = bootloader_user_entry,
.version = MAKE_VERSION('K', 3, 0, 0),
.copyright = "Copyright 2019 NXP.",
.runtimeContext = &g_bootloaderContext,
.kbApi = &g_romApiInterface,
.usbDriver = &g_usbDriverInterface,
.flexspiNorDriver = &g_flexspiNorFlashDriverInterface,
.otpDriver = &g_otpDriverInterface,
.skbootAuthenticate = &g_skbootAuthenticateInterface,
};

四、API 實(shí)例鏈接差異

i.MXRT1xxx 系列 ROM API 實(shí)例 g_bootloaderTree 都是讓鏈接器自由鏈接的,因此每個(gè)具體型號(hào)的實(shí)際 ROM API 鏈接地址沒有一致的規(guī)律可循(這也是為什么要在中斷向量表里固定位置統(tǒng)一保存一份),而這點(diǎn)在 i.MXRTxxx 上有了改進(jìn),i.MXRTxxx 里將 g_bootloaderTree 放到了 .rom_api_tree_section 段里,在鏈接文件里將該段固定鏈接在 ROM 區(qū)域最后 4KB 處(BootROM 代碼沒有把全部 ROM 空間用盡)。

下面是 i.MXRTxxx BootROM 源文件中 g_bootloaderTree 的定義,加了段修飾。此外還有額外的 k_romcrc,標(biāo)示 API 實(shí)例區(qū)域的結(jié)束。

__root const bootloader_api_entry_t g_bootloaderTree @".rom_api_tree_section" = {
.runBootloader = bootloader_user_entry,
.version = MAKE_VERSION('K', 3, 0, 0),
.copyright = "Copyright 2019 NXP.",
.runtimeContext = &g_bootloaderContext,
// ...
};

__root const uint32_t k_romcrc @".romcrc" = 0xdeadbeef;

下面是 i.MXRTxxx 鏈接文件(IAR 工程)中 .rom_api_tree_section 段的處理(i.MXRT500 型號(hào)示例,ROM 空間是 192KB)。你可能好奇為啥 ROM_API_TREE_xx 等值是放在 0x13000000 開始的安全域 ROM 空間映射,BootROM 屬于上電啟動(dòng)第一級(jí),負(fù)責(zé)芯片系統(tǒng)的安全和啟動(dòng),當(dāng)然是工作在安全狀態(tài)下,可以訪問(wèn)安全域地址空間。

define symbol __ICFEDIT_region_ROM_API_TREE_start__ = 0x1302f000;
define symbol __ICFEDIT_region_ROM_API_TREE_end__ = 0x1302f0ff;
define symbol __ICFEDIT_region_ROM_CRC_CHECKSUM_start__ = 0x1302fffc;
define symbol __ICFEDIT_region_ROM_CRC_CHECKSUM_end__ = 0x1302ffff;

define region ROM_API_TREE_region = mem:[from __ICFEDIT_region_ROM_API_TREE_start__ to __ICFEDIT_region_ROM_API_TREE_end__];
define region ROM_CRC_CHECKSUM = mem:[from __ICFEDIT_region_ROM_CRC_CHECKSUM_start__ to __ICFEDIT_region_ROM_CRC_CHECKSUM_end__];

place in ROM_API_TREE_region { section .rom_api_tree_section };
place in ROM_CRC_CHECKSUM { section .romcrc };

基于上面的設(shè)計(jì),你才會(huì)在 i.MXRT500 參考手冊(cè)里 Non-Secure Boot ROM 章節(jié)看到如下 ROM API 地址及結(jié)構(gòu)信息圖(圖中僅標(biāo)了常用的 API 功能函數(shù)),實(shí)際 ROM API 調(diào)用時(shí),App 的執(zhí)行其實(shí)都是經(jīng)過(guò) ROM 引導(dǎo)和認(rèn)證的,App 中既可以訪問(wèn)安全域地址(0x1302f000)來(lái)調(diào)用 API,也可以訪問(wèn)非安全域地址(0x0302f000)來(lái)調(diào)用 API。


最后再來(lái)回答前面賣的關(guān)子,為什么 i.MXRTxxx 系列通過(guò) BootROM 中斷向量表第 9 個(gè)向量值來(lái)訪問(wèn) ROM API 這種方式并不可?。科鋵?shí)從 BootROM 煞費(fèi)苦心地將 g_bootloaderTree 固定鏈接在 ROM 區(qū)域最后 4KB 處,你就能看出其用意。如果你掛上調(diào)試器直接訪問(wèn) i.MXRTxxx 的 ROM 區(qū)域前 20KB 的空間,你會(huì)發(fā)現(xiàn)無(wú)法訪問(wèn),在 App 里 AHB 方式讀這個(gè)區(qū)域,也會(huì)直接產(chǎn)生 HardFault,因?yàn)?BootROM 里做了特殊設(shè)計(jì)故意隱藏了前 20KB 空間,這個(gè)空間里存放了 BootROM 想要保護(hù)的數(shù)據(jù)和代碼,至于內(nèi)容是啥,純屬機(jī)密,恕不奉告,哈哈。

至此,i.MXRTxxx 系列 ROM API 設(shè)計(jì)細(xì)節(jié)痞子衡便介紹完畢了,掌聲在哪里~~~

審核編輯 黃昊宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • ROM
    ROM
    +關(guān)注

    關(guān)注

    4

    文章

    579

    瀏覽量

    89357
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    2466

    瀏覽量

    66988
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    淘寶按圖搜索API技術(shù)實(shí)現(xiàn)詳解

    ? 一、接口基礎(chǔ)說(shuō)明 淘寶按圖搜索API(商品圖像搜索接口)允許開發(fā)者通過(guò)上傳商品圖片,獲取淘寶平臺(tái)上的相似商品列表。核心原理是通過(guò)圖像特征提取與匹配算法實(shí)現(xiàn),其技術(shù)流程如下: $$ begin
    的頭像 發(fā)表于 03-13 16:43 ?201次閱讀
    淘寶按圖搜索<b class='flag-5'>API</b>技術(shù)實(shí)現(xiàn)詳解

    i.MXRT1064無(wú)法通過(guò)串行連接到MCU Boot Utility怎么解決?

    我有一個(gè)使用 i.MXRT1064 的定制板,我正在嘗試使用 SDP 串行下載協(xié)議連接到程序。MCU Boot Utility 無(wú)法連接到啟動(dòng)模式開關(guān) 1:0 設(shè)置為 01 的芯片。
    發(fā)表于 03-10 06:45

    拼多多API應(yīng)用:社交分享驅(qū)動(dòng)銷量飆升!

    將詳細(xì)介紹拼多多API的應(yīng)用方法,結(jié)合技術(shù)實(shí)現(xiàn)步驟和代碼示例,幫助開發(fā)者利用社交分享驅(qū)動(dòng)銷量飆升。 拼多多API簡(jiǎn)介 拼多多開放平臺(tái)提供了一系列API,涵蓋商品管理、訂單處理和社交分享
    的頭像 發(fā)表于 12-24 15:43 ?407次閱讀
    拼多多<b class='flag-5'>API</b>應(yīng)用:社交分享驅(qū)動(dòng)銷量飆升!

    淘寶京東拼多多API:電商供應(yīng)鏈優(yōu)化的關(guān)鍵鑰匙

    = sqrt{frac{sum_{i=1}^n (d_i - bar23t9px9irg3)^2}{n}} $$ 二、三大平臺(tái)API能力解析 淘寶API : ? # 商品庫(kù)存實(shí)時(shí)同步示例import
    的頭像 發(fā)表于 12-01 14:43 ?357次閱讀
    淘寶京東拼多多<b class='flag-5'>API</b>:電商供應(yīng)鏈優(yōu)化的關(guān)鍵鑰匙

    如何通過(guò)API獲取1688平臺(tái)商品詳情

    獲取商品詳情,包括API概述、訪問(wèn)方法、請(qǐng)求示例和代碼實(shí)現(xiàn)。 1. API概述 1688平臺(tái)提供了一系列開放API接口,允許開發(fā)者獲取商品信息、訂單數(shù)據(jù)等。其中,獲取商品詳情的
    的頭像 發(fā)表于 11-11 14:00 ?1329次閱讀
    如何通過(guò)<b class='flag-5'>API</b>獲取1688平臺(tái)商品詳情

    教你如何使用API

    一、了解API API(Application Programming Interface)即應(yīng)用程序編程接口,是一種使不同的應(yīng)用程序能共享數(shù)據(jù)和功能的軟件工具。API可以通過(guò)網(wǎng)絡(luò)、軟件或硬件實(shí)現(xiàn)
    的頭像 發(fā)表于 11-09 17:48 ?1462次閱讀

    恩智浦i.MXRT1180的FlexSPI NOR啟動(dòng)連接方式

    最近屬于i.MXRT11xx陣營(yíng)的第二代旗艦i.MXRT1180正式發(fā)布了,今天咱們就來(lái)介紹它的FlexSPI NOR啟動(dòng)連接方式,在閱讀本文前最好把FlexSPI NOR啟動(dòng)連接方式(RT1060)先看完,對(duì)i.MXRT1xx
    的頭像 發(fā)表于 11-08 10:20 ?6542次閱讀
    恩智浦<b class='flag-5'>i.MXRT</b>1180的FlexSPI NOR啟動(dòng)連接方式

    Python調(diào)用API教程

    隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,API(Application Programming Interface)的應(yīng)用越來(lái)越廣泛。API是指一系列預(yù)先定義好的接口,用于以標(biāo)準(zhǔn)化的形式、規(guī)范的方式、安全高效地完成
    的頭像 發(fā)表于 11-03 09:15 ?1144次閱讀

    教你如何使用API接口獲取數(shù)據(jù)!

    一、了解API API(Application Programming Interface)即應(yīng)用程序編程接口,是一種使不同的應(yīng)用程序能共享數(shù)據(jù)和功能的軟件工具。API可以通過(guò)網(wǎng)絡(luò)、軟件或硬件實(shí)現(xiàn)
    的頭像 發(fā)表于 11-03 09:14 ?730次閱讀

    亞馬遜商品評(píng)論API接口技術(shù)指南

    ? 一、API接口概述 亞馬遜商品評(píng)論API(Product Reviews API)允許開發(fā)者通過(guò)程序化方式獲取指定商品的用戶評(píng)價(jià)數(shù)據(jù)。該接口返回結(jié)構(gòu)化數(shù)據(jù),包括: 評(píng)論內(nèi)容及評(píng)分(1-5星
    的頭像 發(fā)表于 10-21 15:40 ?642次閱讀
    亞馬遜商品評(píng)論<b class='flag-5'>API</b>接口技術(shù)指南

    RESTful API設(shè)計(jì)原則: 構(gòu)建易用、可擴(kuò)展的API接口

    在當(dāng)今微服務(wù)架構(gòu)和分布式系統(tǒng)盛行的時(shí)代,RESTful API已成為系統(tǒng)間通信的核心橋梁。優(yōu)秀的API設(shè)計(jì)不僅能提升開發(fā)效率,還能顯著降低系統(tǒng)維護(hù)成本。本文將深入探討如何遵循REST
    的頭像 發(fā)表于 10-20 13:45 ?1431次閱讀

    代購(gòu)系統(tǒng) API 介紹

    1. 用戶相關(guān) API 用戶注冊(cè) POST /api/users/register 參數(shù):username, email, password, phone 返回:user_id, token 用戶
    的頭像 發(fā)表于 10-08 09:21 ?403次閱讀

    多個(gè)i.MXRT共享一顆Flash啟動(dòng)的方法與實(shí)踐(下)

    在 《多個(gè)i.MXRT共享一顆Flash啟動(dòng)的方法與實(shí)踐(上)》 一文里痞子衡給大家從理論上介紹一種多 i.MXRT 共享 Flash 啟動(dòng)的方法,但是理論雖好,如果沒有經(jīng)過(guò)實(shí)踐驗(yàn)證切實(shí)可行,不過(guò)是紙上談兵,所以今天痞子衡就找了兩個(gè) i
    的頭像 發(fā)表于 06-05 10:04 ?1276次閱讀
    多個(gè)<b class='flag-5'>i.MXRT</b>共享一顆Flash啟動(dòng)的方法與實(shí)踐(下)

    多個(gè)i.MXRT共享一顆Flash啟動(dòng)的方法與實(shí)踐(上)

    有些客戶應(yīng)用會(huì)采用多顆 i.MXRT 芯片設(shè)計(jì)一主多從的硬件架構(gòu)(目的不一,或仿多核 MCU 系統(tǒng)、或拓展 GPIO 數(shù)量),因?yàn)?i.MXRT 片內(nèi)無(wú)非易失性存儲(chǔ)器,這時(shí)候?yàn)檎麄€(gè)系統(tǒng)配置合適的啟動(dòng)設(shè)備保證每個(gè) i.MXRT
    的頭像 發(fā)表于 06-05 10:01 ?1231次閱讀
    多個(gè)<b class='flag-5'>i.MXRT</b>共享一顆Flash啟動(dòng)的方法與實(shí)踐(上)

    如何獲取 OpenAI API Key?API 獲取與代碼調(diào)用示例 (詳解教程)

    OpenAI API Key 獲取與使用詳解:從入門到精通 OpenAI 正以其 GPT 和 DALL-E 等先進(jìn)模型引領(lǐng)全球人工智能創(chuàng)新。其 API 為開發(fā)者和企業(yè)提供了強(qiáng)大的 AI 能力集成途徑
    的頭像 發(fā)表于 05-04 11:42 ?1.8w次閱讀
    如何獲取 OpenAI <b class='flag-5'>API</b> Key?<b class='flag-5'>API</b> 獲取與代碼調(diào)用示例 (詳解教程)
    广灵县| 商城县| 浏阳市| 云龙县| 黄龙县| 古蔺县| 平舆县| 济宁市| 桦南县| 东丽区| 江口县| 恩施市| 讷河市| 巴楚县| 兴宁市| 当涂县| 元江| 恩平市| 诸暨市| 平谷区| 蓬溪县| 徐闻县| 开鲁县| 盐边县| 农安县| 鹤庆县| 桐乡市| 灵台县| 睢宁县| 昌都县| 新昌县| 罗平县| 盘锦市| 西峡县| 乌兰县| 松原市| 天峨县| 邯郸县| 潜江市| 中西区| 五原县|