dfq5P!' 原创:ICCCCC
way-Q7 Mhw\i&*U 前言:
v)2@;Q W}1h~rNy
j{'@g[HW uQ.VW/> 一、开箱
!f\6=Z?>3 .*g;2.-qv&
w65
$ R 5+O#5"v_
#B)`dA0a , 0rC_)&B
t hDE
1h 2WOdTM{u 二、在线仿真测试
~1h-LbFI2 $mOK|=tI_ 测试环境:MDK v5.30
t(MlZ>H vu.f B4 测试芯片:STM32F429BIT6
_n{6/ HnqZ7%jeN 建立测试工程项目过程略过,直接进入设置,仿真设备选择CMSIS-DAP,如下所示:
K~WwV8c9; ;mb
6i_
2h6F j& q 9pcEm4? 点击Settings进行设置,如下所示:
o&~z8/?LA 9aC>gye!
-}juj;IVv vP'R7r2Yx
Ve8`5
h OboM3_
Yazpfw 7'd es(vWf'
ZdHWSfO)O |R*fw(=W Pack选项,可以使能或者不使能,如果异常就切换。
&/, BFx" 8LwbOR" 都设置好,回到主界面,点击下载,如下所示:
(|5g`JDG ?I 1@:?Qi
a Ts_5q TniZ!ud [img]https://z3.ax1x.com/2021/10/28/5bhwDO.png[/img]
TCF[iE{ ~ab"q% 下载成功。点击主界面Debug按钮,进入仿真状态,如下所示:
*qBMt[a 9HEc=,D| [img]https://www.z4a.net/images/2021/10/28/40.png[/img]
<ZrZSt+< 1ck2Gxn [img]https://z3.ax1x.com/2021/10/28/5bhDVe.png[/img]
LZ ID|- Z?hBn`. 全速运行,一切正常,点击暂停,可以正常查看各种变量数据等。
&:jE+l W# y)ukRv [img]https://z3.ax1x.com/2021/10/28/5bh0bD.png[/img]
l>&)_:\ % NS]z ;G 测试环境:MDK v5.30
D1O7S]j ESASsRzk 测试芯片:STM32H743XIH6
+dh]k=6 ,_lwT}*w 测试组件:EventRecorder
1=(i{D~ HKcipDW Debug配置上差不多,需要注意的是Trace选项里的Clock要跟目标单片机时钟一致,如下所示:
WuGm~<NS 4'rk3nT8 [img]https://z3.ax1x.com/2021/10/28/5bhrUH.png[/img]
3nK'yC Il;'s 配置好后进入仿真状态,全速运行,时间测试及printf正常显示,代码执行时间准确,10MHz的带宽完全满足,效果如下所示:
v @N8v ?0;b}Xl-
[img]https://z3.ax1x.com/2021/10/28/5bhc8I.png[/img]
*}w.xt `g :<$3} [img]https://z3.ax1x.com/2021/10/28/5bhs5d.png[/img]
I@L-%#@R1 6OTxtk 在线仿真完结。
{2:H`|x \K?./* 三、UID加密操作
d=4MqX r a*IJ)'S UID 加密设置是创芯工坊研发的目前市面上烧录器在授权控制上较为强大的加密版本,不但提供了随机的内置离线授权方法,一键生成动态的项目代码,同时提供了在线授权服务器(目前市面上提供此功能的只有 Segger 的 Secure Flash)支持第三方基于创芯工坊提供的授权服务器模板自建授权服务器,支持在线非对称授权方案,创芯工坊技术团队提供全程技术支持,支持离线 ICWKEY ECDSA非对称授权算法。
esu6iU@ BkqIfV%O [img]https://z3.ax1x.com/2021/10/28/5bh6PA.png[/img]
a5)[?ol kkOYC?zE? 本次先使用<内置离线授权>,芯片使用STM32F429BIT6,配置如下:
v*BA\& w pCS]2 [img]https://z3.ax1x.com/2021/10/28/5bhg2t.png[/img]
VBCj.dw MA-$aN_( 密钥储存地址在芯片flash最后倒退12字节位置,密钥长度选择12字节,小端模式。点击UID矩阵编码按钮,打开窗口如下所示:
5^d%+*l;q @i)tQd!s [img]https://z3.ax1x.com/2021/10/28/5bhWKf.png[/img]
;Ok11wOw Io"=X!k [img]https://www.z4a.net/images/2021/10/28/16353823221.png[/img]
bo -Gh` (wY%$kW4 [img]https://z3.ax1x.com/2021/10/28/5bh2xP.png[/img]
<WbD4Q<3? #/jHnRrQ 导出源码:导出源码功能将用户设置好的信息,导出为 MDK Source Code(如果用户 IDE 为其他格式,请包含对应的源码和头文件即可使用),导出的源码 Demo 如下图所示:
\qTn"1bQ 7R2)Klt [img]https://z3.ax1x.com/2021/10/28/5bhfr8.png[/img]
/w!' [ m9B3]H 主要文件就是cortex_chipid_binding.c与cortex_chipid_binding.h,本小节只讲使用,不解析程序。
~V|!\CB <m6I)}K 编译并保存:编译并保存功能将用户设置好的 Power Writer 内置授权功能同步到PowerWriter 硬件,同时导出源码供用户使用。
F#<PFT4i Z?Q2 ed*j 其他选项请根据自己需求配置,保存项目为f429bit6uid.pkg。
sw@2
?+ b{dzbmak 准备个正常的MDK项目,复制cortex_chipid_binding.c与cortex_chipid_binding.h到项目下,打开工程,如下所示:
Sl_zO?/PF #b" IX`5 使用的是安富莱电子的例子,板子是V6开发板。
m5x>._7le i ('EBO
[img]https://z3.ax1x.com/2021/10/28/5bhhqS.png[/img]
Ti/iD2g h?1pGz)[C main.c文件加入#include "cortex_chipid_binding.h"头文件,打开工程选项,C/C++里选择C99模式,因为导出的代码编写方式是变量就近定义,默认的C89是不支持这种骚写法,如下所示:
Y3zO7*-@ =}"hC`3e [img]https://z3.ax1x.com/2021/10/28/5bh5Vg.png[/img]
{oJa8~P &S-& 'ZAY [img]https://z3.ax1x.com/2021/10/28/5bhIaQ.png[/img]
{Jy%h8n* Em]T.'y 全项目编译,报如下错误:
N7jRdT2k% nRE}F5k .\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).
%8{_;-f p.\KmEx 意思是数据越界了,查看代码发现是cortex_chipid_binding.c里的指定了一个地址,这个地址就是存放密钥的地址,本意是告诉编译器我要占用12字节空间,可是编译器编译时还在这个位置后面放了代码,所以导致越界。
+8Px` v1L 7lj-Z~1 const static char mKey[UID_KEY_LENGTH] __attribute__((section(UID_KEYADDR_INNER)))
jh?7+(Cw dDuA%V0 解决方法就是禁止这行代码,把cortex_chipid_binding.h的UID_KEYADDR_PLACEHOLDER_EN宏设置为0,如下所示:
qlxW@| .>nd@oU #define UID_KEYADDR_PLACEHOLDER_EN 0 //Key Store Addr In Flash Enable/Disable Placeholder
z$V8<&q LK%B6-;~- 再次编译通过,在main.c文件里加上密钥判断,代码如下:
&Egn`QU ^/BE=$E\ [img]https://z3.ax1x.com/2021/10/28/5bh7Ps.png[/img]
0* "j:V i|O7nB@ 再次编译无错误,加载编译好的程序到烧录器,如下所示:
g`6wj|@ =W dB,#`tc=, [img]https://z3.ax1x.com/2021/10/28/5bho5j.png[/img]
% b&BLXW 6;b 'j\jG 保存项目,在线烧录到目标单片机,如下所示:
SWGa%6| [O)Zof [img]https://z3.ax1x.com/2021/10/28/5bhHGn.png[/img]
C/vLEpP{(/ Q+Fw =Xw 开发板运行跑马灯,说明密钥校验通过。
$P@cS1sB +UsR 四、创芯工坊发布固件
mT>p:G 9]w0zUOL6 这个应用是创芯工坊平台的一大核心功能,也是一大创新。简单来讲就是为开发者和使用者提供一个平台,开发者在平台上发布程序,使用者购买然后烧录程序。
a?MtY
EK2 hpyre B 这节我们来看批量离线模式,适用于大批量烧录。
^MW%&&,BL \O?B9_ 打开创芯工坊官网www.icworkshop.com,登陆账号,进入用户中心,如下所示:
lG+ltCc$9 qR<DQTO< [img]https://z3.ax1x.com/2021/10/28/5bhb2q.png[/img]
Tz-cN 3d<HIG^W} 点击我是开发者,如下所示:
k$ M4NF~$ Xda<TX@- [img]https://z3.ax1x.com/2021/10/28/5bhqx0.png[/img]
8JrGZ8Q4RM (R}X(u 点击程序发布,如下所示:
N9PM.nbd% \xZBu" [img]https://z3.ax1x.com/2021/10/28/5bhOMV.png[/img]
&aQ)x wE \c?*k 为了方便测试,价格选择赠送,指定对象就是使用者账号。
MB 5[Js| htRZ}e [img]https://z3.ax1x.com/2021/10/28/5bhjqU.png[/img]
^k(eRs;K i+Dgw 型号根据自己项目单片机来选,pkg文件是使用pw软件打包好的文件,这里继续使用上节打包的文件。固件密钥是指pw打包时的密码,一定要正确,否则无法解析文件,编程模式选择离线。点击确认发布即可。
M(E_5@?3 .%<&W1 [img]https://z3.ax1x.com/2021/10/28/5bhXrT.png[/img]
7x]nY. \ oMe]dK 使用者需要下载创芯工坊客户端,如下所示:
11T\2&Q 4<K`yU]" [img]https://www.z4a.net/images/2021/10/28/32.png[/img]
-8jqC6mQ =4
H K [img]https://z3.ax1x.com/2021/10/28/5bhxZF.png[/img]
h3IkOh4|h 3ky+qoe 安装后登陆账号,如下所示:
gWo~o]f v`w?QIB] [img]https://www.z4a.net/images/2021/10/28/34.png[/img]
W>bW1h @]tGfr;le& 第一个既是我们刚才推送的程序,连接好PW200烧录器,点击下载固件,如下所示:
gc~h!%'.I HXHPz4 [img]https://www.z4a.net/images/2021/10/28/35.png[/img]
`6$b1qv, a0.3$ [img]https://www.z4a.net/images/2021/10/28/16353821721.png[/img]
mX?{2[ EXcj F [img]http://changhee.cn/data/attachment/forum/202110/28/083538bgddg93242y3kkng.png[/img]
{wXN kq z\Y^x9 [img]https://www.z4a.net/images/2021/10/28/16353819001.png[/img]
')-(N
um cZzZNGY^ts 这里测试的芯片是STM32F429BIT6,FLASH容量为2MB,SN位置我们放在0x081FFFFC地址,占用4字节。序列号初值我们设置为0x00000001,为了方便验证SN写入成功与否,选项字节的读保护设置为无保护,如下所示:
O*{H;7Pv z=_{jjs [img]http://changhee.cn/data/attachment/forum/202110/28/083538cs1b32gwtnnr85bw.png[/img]
(NC>[ cB}2(`z9
B 点击执行里的全功能自动编程,操作如下所示:
9y*!W DOIWhd5: [img]https://www.z4a.net/images/2021/10/28/38.png[/img]
F\rSYjMyk y;Ln ao7i 现在我们来读取0x081FFFFC地址数据,操作如下所示:
jGhg~-m
;j>d"i36& [img]http://changhee.cn/data/attachment/forum/202110/28/083542coout9zf5dohdoki.png[/img]
:t
S"sM 5(7MQuRR 成功读取到0x00000001,为什么是01 00 00 00?因为使用小端储存模式。
I?g__u=n~ 9prsL#Fn 结语:
=hOa
0X= ] *VF Ws 时间有限,只测了小部分功能,不得不说power writer确实很强大,不管是烧录安全还是烧录速度方面,都表现非常不错,基本满足了工程师开发调试的所有要求。而且还支持STM32、STM8、GD32等十几个品牌芯片。还是非常值得推荐的。