DP]|}8~L 原创:ICCCCC
#[yl;1) obolDha 前言:
4344PBj 2Hwf:S'
Tou~U[V+ S]g)^f'a65 一、开箱
liP{Mu/LO Oh4WYDyT
?EAqv] !P3|T\|]+
*60)Vo.= k8V0-.UL}
ttVSgKAsm Ec
7M'~1 二、在线仿真测试
W%cPX0 9ksrr{tW 测试环境:MDK v5.30
\c}r6xOr Ft!~w#&- 测试芯片:STM32F429BIT6
"iGc'?/+ K$]B"
s 建立测试工程项目过程略过,直接进入设置,仿真设备选择CMSIS-DAP,如下所示:
TaT&x_v^~a +]vl8, 4@
\ y",Qq? qJj5J;k 点击Settings进行设置,如下所示:
iL1so+di ?3N86Qj
#
t
Ki6u 7HFO-r118
\0*LfVr;P z\
pT+9&
>WX'oP(< \YS\*'F
$7YLU{0 tH(#nx8 Pack选项,可以使能或者不使能,如果异常就切换。
So`"z[5 rnE'gH(V' 都设置好,回到主界面,点击下载,如下所示:
3)\qts5 1Tr=*b %f
ek!N eu> L 3@wdC~0 [img]https://z3.ax1x.com/2021/10/28/5bhwDO.png[/img]
^yTN(\9 >,vuC4v- 下载成功。点击主界面Debug按钮,进入仿真状态,如下所示:
kzXW<V9 g\'84:*J\ [img]https://www.z4a.net/images/2021/10/28/40.png[/img]
h+(s/o?\ V485Yn!$( [img]https://z3.ax1x.com/2021/10/28/5bhDVe.png[/img]
9~I WGj? -',Y;0b% 全速运行,一切正常,点击暂停,可以正常查看各种变量数据等。
B.#0kjA} |D:0BATRP [img]https://z3.ax1x.com/2021/10/28/5bh0bD.png[/img]
'L/TaP/3 MJ08@xGa 测试环境:MDK v5.30
7Y:s6 R| wf1DvsJQl 测试芯片:STM32H743XIH6
iX p8u** do7{ 测试组件:EventRecorder
l !v#6#iq 8<!9mgh Debug配置上差不多,需要注意的是Trace选项里的Clock要跟目标单片机时钟一致,如下所示:
ZrS!R[ EMbsKG [img]https://z3.ax1x.com/2021/10/28/5bhrUH.png[/img]
oZtz"B D(|$6J 0 配置好后进入仿真状态,全速运行,时间测试及printf正常显示,代码执行时间准确,10MHz的带宽完全满足,效果如下所示:
Q2JjBV< iI0 'z=J [img]https://z3.ax1x.com/2021/10/28/5bhc8I.png[/img]
hd-ds~ve rfoCYsX' [img]https://z3.ax1x.com/2021/10/28/5bhs5d.png[/img]
pE N`&'4 _Ar,]v 在线仿真完结。
O~VUViS6$ H1M>60* 三、UID加密操作
i,T{SV b87o6"j UID 加密设置是创芯工坊研发的目前市面上烧录器在授权控制上较为强大的加密版本,不但提供了随机的内置离线授权方法,一键生成动态的项目代码,同时提供了在线授权服务器(目前市面上提供此功能的只有 Segger 的 Secure Flash)支持第三方基于创芯工坊提供的授权服务器模板自建授权服务器,支持在线非对称授权方案,创芯工坊技术团队提供全程技术支持,支持离线 ICWKEY ECDSA非对称授权算法。
|0-L08DW CuNHDYQ&3 [img]https://z3.ax1x.com/2021/10/28/5bh6PA.png[/img]
} _z~:{Y !ZW0yCwLQ 本次先使用<内置离线授权>,芯片使用STM32F429BIT6,配置如下:
_P:P5H8 eSU8/9B [img]https://z3.ax1x.com/2021/10/28/5bhg2t.png[/img]
GkFNLM5' `( Gk_VAa 密钥储存地址在芯片flash最后倒退12字节位置,密钥长度选择12字节,小端模式。点击UID矩阵编码按钮,打开窗口如下所示:
Fu$sfq {r)M@@[ [img]https://z3.ax1x.com/2021/10/28/5bhWKf.png[/img]
U"]i.J1 sx\7Z#| [img]https://www.z4a.net/images/2021/10/28/16353823221.png[/img]
NQ!F` =fPO0Ot; [img]https://z3.ax1x.com/2021/10/28/5bh2xP.png[/img]
\
PqV| oP6G2@3P/ 导出源码:导出源码功能将用户设置好的信息,导出为 MDK Source Code(如果用户 IDE 为其他格式,请包含对应的源码和头文件即可使用),导出的源码 Demo 如下图所示:
3Y8
V?* 1| R?Qou!*] [img]https://z3.ax1x.com/2021/10/28/5bhfr8.png[/img]
t {}1f @gOgs 主要文件就是cortex_chipid_binding.c与cortex_chipid_binding.h,本小节只讲使用,不解析程序。
H@:@zD!G[ cS"6%:hQ 编译并保存:编译并保存功能将用户设置好的 Power Writer 内置授权功能同步到PowerWriter 硬件,同时导出源码供用户使用。
v5o%y:~ l M$7/ 其他选项请根据自己需求配置,保存项目为f429bit6uid.pkg。
T9A5L"-6T qDW/8b\ ^ 准备个正常的MDK项目,复制cortex_chipid_binding.c与cortex_chipid_binding.h到项目下,打开工程,如下所示:
@ 2_&ti Zj;!7ZuT1 使用的是安富莱电子的例子,板子是V6开发板。
</QSMs VbYapPu4b! [img]https://z3.ax1x.com/2021/10/28/5bhhqS.png[/img]
X1"nq]chGy JiR|+6"7
main.c文件加入#include "cortex_chipid_binding.h"头文件,打开工程选项,C/C++里选择C99模式,因为导出的代码编写方式是变量就近定义,默认的C89是不支持这种骚写法,如下所示:
{ex]_V> K]l)z* I [img]https://z3.ax1x.com/2021/10/28/5bh5Vg.png[/img]
S EmD's T5h[{J^ [img]https://z3.ax1x.com/2021/10/28/5bhIaQ.png[/img]
-E1}mL}I` LmE-&
全项目编译,报如下错误:
K0]Wb=v ;D:v@I$I .\Flash\Obj\output.axf: Error: L6220E: Load region LR_IROM1 size (2097232 bytes) exceeds limit (2097152 bytes). Region contains 2087436 bytes of padding and 0 bytes of veneers (total 2087436 bytes of linker generated content).
3^Y-P8.zdB #z.x3D@^r6 意思是数据越界了,查看代码发现是cortex_chipid_binding.c里的指定了一个地址,这个地址就是存放密钥的地址,本意是告诉编译器我要占用12字节空间,可是编译器编译时还在这个位置后面放了代码,所以导致越界。
x@=7M'vr% mqL+W const static char mKey[UID_KEY_LENGTH] __attribute__((section(UID_KEYADDR_INNER)))
Z"jo
xZ eu=2a> 解决方法就是禁止这行代码,把cortex_chipid_binding.h的UID_KEYADDR_PLACEHOLDER_EN宏设置为0,如下所示:
gnGw7V ~08v]j
q #define UID_KEYADDR_PLACEHOLDER_EN 0 //Key Store Addr In Flash Enable/Disable Placeholder
'Vd>"ti *bx cq 再次编译通过,在main.c文件里加上密钥判断,代码如下:
X)~-MY*p sMx\WTyz [img]https://z3.ax1x.com/2021/10/28/5bh7Ps.png[/img]
o&zV8DE_v /<@tbZJ*8 再次编译无错误,加载编译好的程序到烧录器,如下所示:
YAog;QL OsXQWSkj~ [img]https://z3.ax1x.com/2021/10/28/5bho5j.png[/img]
uRIr,U^ =3'wHl 保存项目,在线烧录到目标单片机,如下所示:
`t
-3(>P +j,;g#d [img]https://z3.ax1x.com/2021/10/28/5bhHGn.png[/img]
vuf|2!kh/ C1J'. ! 开发板运行跑马灯,说明密钥校验通过。
0Ju{6x(|
_!CH 四、创芯工坊发布固件
3A5" % |8B[yr.b 这个应用是创芯工坊平台的一大核心功能,也是一大创新。简单来讲就是为开发者和使用者提供一个平台,开发者在平台上发布程序,使用者购买然后烧录程序。
sXWMXQ3 X {$gdz8S9 这节我们来看批量离线模式,适用于大批量烧录。
O_ cK4 1^COR+>L 打开创芯工坊官网www.icworkshop.com,登陆账号,进入用户中心,如下所示:
/[OMpP @."R9s [img]https://z3.ax1x.com/2021/10/28/5bhb2q.png[/img]
&V"&