大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是利用IAR自带CRC完整性校验功能的一次实践(为KBOOT加BCA). 痞子衡之前写过两篇关于IAR中自带CRC校验功能的文章 <在IAR开发环境下为工程开启CRC完整性校验功能的方法>.<探析开启CRC完整性校验的IAR工程生成.out和.bin文件先后顺序>,算是把这个功能细节介绍得比较清楚了,但是俗话说得好,理论懂得再多,不能用于实践那等于没学.今天痞子衡就利用这个功能来解决一个实际需求: 一.KBOOT中BCA…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下为工程开启CRC完整性校验功能的方法. CRC校验在嵌入式领域里的应用非常广,比如在通信领域,CRC检验值可以作为数据包的一部分,用于检查一包数据传输过程中是否发生了比特错误,如果CRC校验失败,那么接收方可以通知发送方要求该包数据重新传输,这样能大大增加数据传输的可靠性.同时CRC在应用程序完整性验证方面也有广泛应用,相比和检验,CRC校验纠错能力更强:相比签名校验,CRC校验在速度方面又占优势,因此它是一个各方…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR启动函数流程里的段初始化函数__iar_data_init3实现. 本篇是 <IAR启动函数流程及其__low_level_init设计对函数重定向的影响> 一文的后续,在上篇文章里我们在 IAR 软件安装目录下找到了标准启动函数 __iar_program_start() 相关源文件,并且分析了 __iar_program_start() 函数里的全部动作.我们知道了其中负责 .data/.bss/.textrw 段初始化…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR启动函数流程及其__low_level_init设计对函数重定向的影响. 上一篇文章 <IAR下RT-Thread工程自定义函数段重定向失效分析> 里我们找出了影响 IAR 链接器处理自定义程序段重定向的原因,主要跟 __low_level_init() 函数有关,这个函数属于 IAR 底层设计,它在 IAR 启动函数 __iar_program_start() 中会被自动调用. __iar_program_start()…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR启动函数流程里段初始化实现中可用的压缩选项. 接着 <IAR启动函数流程之段初始化函数__iar_data_init3实现> 一文,咱们再深入一步.对于 .bss 段的初始化,其实没什么好说的,就是简单的清零操作,但是 .data/.textrw 段的初始化工作是可以做一点文章的,尤其是当这些段数据量非常大的时候,可以增加一些压缩处理(链接阶段做压缩,并且自动插入相应解压函数进镜像文件,启动初始化时做解压),以减小最终程序镜…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT系列中数据协处理器DCP使用SNVS Master Key加解密的注意事项. i.MXRT不仅仅是处理性能超强的MCU,也是安全等级极高的MCU.如果大家用过痞子衡开发的一站式安全启动工具 NXP-MCUBootUtility,应该会从其 用户手册 3.3节中了解到i.MXRT支持的几种安全启动等级,其中HAB加密启动方式和BEE/OTFAD加密启动方式中都提及了一种神秘的密钥 - SNVS Master Key,今天痞…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1xxx系列MCU时钟相关功能引脚作用. 如果我们从一颗 MCU 芯片的引脚分类来看芯片功能,大概可以分为三大类:电源.时钟.外设功能.作为嵌入式开发者,大部分时候关注得都是外设功能引脚,而对于时钟相关引脚往往不太在意,其实有些时候利用时钟功能引脚也能助你定位问题.今天痞子衡就带你梳理一下 i.MXRT1xxx 系列的时钟系统以及相关功能引脚: 一.时钟系统简介 目前 i.MXRT1xxx 系列主要分为 i.MXRT10…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是ARM Cortex-M功能模块. ARM Cortex-M处理器家族发展至今(2016),已有5代产品,分别是CM0/CM0+.CM1.CM3.CM4.CM7. 1.Cortex-M兼容特性 为了能做到Cortex-M软件重用,ARM公司在设计Cortex-M处理器时为其赋予了处理器向下兼容.软件二进制向上兼容特性. 首先看什么是二进制兼容,这个特性主要是针对软件而言,这里指的是当某软件(程序)依赖的头文件或库文件分别升级时,软件…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是开启CRC完整性校验的IAR工程生成.out和.bin文件先后顺序问题. 痞子衡之前写了一篇 <在IAR开发环境下为工程开启CRC完整性校验功能的方法>,有同事在使用CRC校验功能时遇到了关于.out/.bin文件先后生成顺序的问题.我们在线调试IAR工程时,调试器下载的其实是可执行文件(.out),CRC校验功能在.out文件里没有任何歧义,但是更多时候我们会使用镜像文件(.bin)来下载量产,有时候CRC校验功能在.bin文件…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT系列ROM中的FlexSPI驱动API实现IAP. 痞子衡的技术交流群里经常有群友提问: i.MXRT中的FlexSPI驱动API到底怎么用啊?这个问题已经出现过好几次了,本来痞子衡不打算专门为这个写文章的,因为这部分内容在芯片手册System Boot章节里的最后一节ROM APIs里其实介绍得非常详细了,但是既然还是有不少朋友在问这个,看起来手册里的内容藏得有点深,这么好的东西被埋没太可惜了,那么今天痞子衡就跟大家再…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下将关键函数重定向到RAM中执行的三种方法. 嵌入式项目里应用程序代码正常是放在 Flash 中执行的,但有时候也需要将代码中的一些函数重定向到 RAM 中去执行,这些函数包括 Flash 擦写操作函数(假定 Flash 本身有 RWW 限制),对执行时间要求特别高的中断响应函数或核心算法函数(假定 RAM 中代码执行速度超过 Flash)等等,这些被重定向到 RAM 中执行的函数我们通常称其为关键函数. 前段时间痞…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下RT-Thread工程函数重定向失效分析. 痞子衡旧文 <在IAR下将关键函数重定向到RAM中执行的方法> 里介绍了三种关键函数重定向方法,不过这三种方法只是写法形式不同,本质上没啥区别,都是利用 IAR 链接器特性将函数重定向到工程数据段(RW)所在 RAM 里. 对于 i.MXRT 这种拥有多块地址非连续的 RAM 的芯片,其实我们也可以单独将这些重定向函数放到一个指定的 RAM 里,不一定非得跟数据段放在同…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下将整个源文件代码重定向到任意RAM中的方法. 痞子衡旧文 <在IAR下将关键函数重定向到RAM中执行的方法> 里介绍了三种关键函数重定向方法,不过这三种方法只是写法形式不同,本质上没啥区别,都是利用 IAR 链接器特性将函数重定向到工程数据段(RW)所在 RAM 里. 对于 i.MXRT 这种拥有多块地址非连续的 RAM 的芯片,其实我们也可以单独将这些重定向函数放到一个指定的 RAM 里,不一定非得跟数据段放在…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170下在线联合调试双核工程的方法(基于IAR). 前段时间痞子衡写过一篇<双核i.MXRT1170之单独在线调试从核工程的方法>,那篇文章介绍了如何单独在线调试从核工程的方法.当我们把主核工程和从核工程分别调稳定之后,底下便开始需要双核联调,验证双核通信交互相关功能.今天痞子衡就给大家介绍下 IAR 开发环境下双核工程联调的三种方法: 一.测试准备 首先需要准备好测试环境,包含必要的软件和硬件,痞子衡的环境如下:…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是MCUXpresso IDE下将源码制作成Lib库方法及其与IAR,MDK差异. 程序函数库是一个包含已经编译好代码和数据的函数集合,这个库文件里的函数可以供其他程序调用.被放进库文件里的代码通常具有一定通用性,是经过高度抽象的,这样可以避免重复造轮子.程序函数库设计可以使得程序的开发工作更加模块化,更容易重新编译,也更方便升级. 嵌入式开发里有时候也会需要涉及函数库文件,除了模块化开发以及方便升级特点外,有时候也是为了对源代码进行…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR下调试信息输出机制之硬件UART外设. 在嵌入式世界里,输出打印信息是一种非常常用的辅助调试手段,借助打印信息,我们可以比较容易地定位和分析程序问题.在嵌入式应用设计里实现打印信息输出的方式有很多,本系列将以 IAR 环境为例逐一介绍 ARM Cortex-M 内核 MCU 下打印信息输出方法. 本篇是第一篇,我们先介绍最常见的输出打印信息方式,即利用 MCU 芯片内的硬件 UART 外设.本篇其实并不是要具体介绍 UART…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR下调试信息输出机制之半主机(Semihosting). 在嵌入式世界里,输出打印信息是一种非常常用的辅助调试手段,借助打印信息,我们可以比较容易地定位和分析程序问题.在嵌入式应用设计里实现打印信息输出的方式有很多,本系列将以 IAR 环境为例逐一介绍 ARM Cortex-M 内核 MCU 下打印信息输出方法. 上一篇文章 <IAR下调试信息输出机制之硬件UART外设> 里我们介绍了利用 MCU 芯片内的硬件 UART 外设…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR在线调试时设不同复位类型可能会导致i.MXRT下调试现象不一致. 做Cortex-M内核MCU嵌入式软件开发,可用的集成开发环境(IDE)非常多.经典的GCC咱们就不提了,选择不同MCU主控,如果MCU来自知名大厂,厂商也会配套推出专用IDE(比如恩智浦半导体的MCUXpresso IDE,意法半导体的TrueSTUDIO.STM32CubeIDE).除此以外,还有几个来自专门软件公司的独立IDE,比如Keil MDK.IAR…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是JLink Script文件基础及其在IAR下调用方法. JLink可以说是MCU开发者最熟悉的调试工具了,相比于其他调试器(比如DAPLink.ST-LINK.I-jet等),JLink除了性能强大之外,还胜在其配套各种软件小工具相当方便易用.JLink工具玩得熟的老司机一定在J-Link Commander命令行工具(即\SEGGER\JLink_Vxxx\JLink.exe)下敲过命令,读写内存.下载文件.操控内核无所不能.这…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是IAR开发环境下i.MXRT的串行NOR Flash下载算法设计. 在i.MXRT硬件那些事系列之<在串行NOR Flash XIP调试原理>一文中,痞子衡简单提了一下串行NOR Flash下载算法的概念,并没有介绍具体设计细节,关于NOR Flash下载算法每个IDE都有自己的一套设计,虽然基本设计理念是一样的,但是细节方面还是有区别.在前面的文章里,痞子衡分别介绍过<J-Link下算法设计>.<Keil MD…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是利用i.MXRT1xxx系列内部DCP引擎计算Hash值时需特别处理L1 D-Cache. 关于i.MXRT1xxx系列内部通用数据协处理器DCP模块,痞子衡之前写过一篇文章 <SNVS Master Key仅在i.MXRT10xx Hab关闭时才能用于DCP加解密> 介绍了DCP基本功能和AES加解密使用注意事项,实际上DCP模块除了对AES加解密算法支持外,还支持经典的Hash算法(SHA-1/SHA-256/CRC32).…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是MCUXpresso IDE下SDK工程在Build配置上与IAR,MDK差异. 恩智浦 SW 团队每个季度都会公布 SDK.Tool 官网下载量,其中 MCUXpresso IDE 下载量一直稳步上升,这个恩智浦自家 IDE 其实在欧美和台湾地区是非常受欢迎的,在中国普及率稍微低一点,主要是国内的嵌入式开发者还是更熟悉 IAR/MDK 这两个经典的 IDE.人嘛,都不愿意轻易离开自己的舒适区. 今天痞子衡要介绍的是 MCUXpre…
痞子衡主导的"学术"项目 <RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计> v1.0 版发布近 4 个月了,部分客户已经在实际项目开发调试中用上了这个超级下载算法,目前反馈还可以,但这个超级下载算法远未到成熟状态,痞子衡正在策划 v2.0 版本. RT-UFL v1.0下载地址: https://github.com/JayHeng/RT-UFL/archive/refs/tags/v1.0.zip 超级下载算法 RT-UFL v1.0 版本主要针对 Se…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR内部C-SPY调试组件配套宏文件(.mac)用法. 痞子衡之前写过一篇 <JLink Script文件基础及其在IAR下调用方法>,那篇文章介绍了 J-Link 硬件调试器配套的 .JLinkScript 文件功能及用法,今天我们要讲的主角 .mac 文件之于 IAR 内部 C-SPY 调试组件的作用就像 .JLinkScript 之于 J-Link 调试器的作用一样,.mac 文件也是为了完成在 IAR 下的特殊调试需求而…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170下单独在线调试从核工程的方法(基于IAR). 两年前痞子衡写过一篇<双核i.MXRT1170之Cortex-M7与Cortex-M4互相激活之道>,那篇文章从离线启动的角度介绍了跑双核应用的基本方法,基本上把双核启动…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT部分型号上新增的FlexSPI Remap功能. OTA升级设计几乎是每个量产客户都绕不开的话题,产品发布后免不了要做固件(App)升级以修复bug或者增加新特性.升级App是个麻烦事,因为处理不好,App被破坏了导致启动不了,产品就容易变砖,变了砖即使能救回来,也非常影响用户体验. 如今基于i.MXRT的客户量产产品越来越多,关于OTA安全升级的客户支持也越来越多.早期的i.MXRT型号(比如i.MXRT1050/10…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1xxx的系统中断延迟时间. 在 <Cortex-M系统中断延迟及其测量方法简介> 一文里,痞子衡介绍了 Cortex-M 中断延迟的基本概念及一种用 GPIO 模块来测量中断延迟时间的方法,今天我们就在 i.MXRT1xxx 系列芯片上用这种方法实测一下中断延迟: 一.官方指标 恩智浦 i.MXRT1xxx 系列目前有很多型号,都是基于 Cortex-M7 内核,主频从 500MHz 到 1GHz 不等.拿该系列第一…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT1170 Raw NAND启动时间. 关于i.MXRT1170这颗划时代的MCU,痞子衡去年10月在其刚发布的时候,专门写过一篇文章介绍过其特点(详见 <终于可以放开聊一聊i.MXRT1170这颗划时代MCU了>),眼看着其上市日期越来越近了,恩智浦软硬件技术支持团队也正在紧锣密鼓地开发SDK以及参考设计.因为官方首次在i.MXRT1170 EVK板上(Rev.B)放了一片旺宏的Raw NAND芯片,而i.MX…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是为i.MXRT设计更新Segger J-Link Flash下载算法文件. 想要在Flash中调试,基本是离不开Flash下载算法的,毕竟要先将代码烧写进Flash,然后才能调试.主流MCU开发环境(MCUX / IAR / Keil)以及调试工具(J-Link)的Flash下载算法设计思路基本都差不多,简单的说,就是把Flash擦写操作的底层驱动代码可执行文件通过JTAG/SWD预先加载到MCU内部RAM里,然后继续从JTAG/S…
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRTxxx系列ROM API设计细节. 痞子衡之前写过两篇文章 <利用i.MXRT1xxx系列ROM提供的FlexSPI driver API可轻松IAP>.<其实i.MXRT1050,1020,1015系列ROM也提供了FlexSPI driver API> 基本把i.MXRT1xxx全系列的ROM API及其FlexSPI NOR驱动设计都讲清楚了,其实i.MXRTxxx系列的ROM API设计跟i.MXR…