你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【转】STM32F10X芯片DTU产品设计心得

[复制链接]
feixiang20 发布时间:2017-5-19 23:35
最近使用STM32F103RBT6设计了一个小产品,在此分享一下设计中的心得体会;% g8 O1 b$ Y1 }, W8 M
1. 芯片选型
/ K# M6 b4 x% F: Z( K; F" _. |最初仅着够用和可扩展的思路,及需要3个UART,选择了64PIN的芯片STM32F103R8T6;在华强北买样片时,发现RB的芯片价格差不多,而FLASH容量达到128KB;所以第一版硬件选择了STM32F103RBT6,芯片20KB RAM, 128KB FLASH。做到后面升级功能时,需要加上RSA签名校验,RSA使用1024bits密钥的话需要6KB左右的STACK,一个RSA KEY变量就是4KB左右,所以20KB的内存基本上干不了其他什么活了。 最终选择了STM32F105RBT6, 64KB RAM, 跑个RSA 2048bits都足够用了。又在华强北买芯片时,老板说STM103RB芯片涨价到15块钱, 而STM32F105RB可以卖到9块,批量更低,有点瞎猫碰到死耗子的感觉,呵呵。
9 L- l8 k2 J3 z% C8 `# X: `从103换到105时,PIN2PIN是兼容的,但以下两点需要注意:+ ?4 K( P4 z) Q# L5 n  Y, w
a. F103使用内部8MHz RC振荡器,可以倍频到64MHz工作;但F105使用RC振荡器倍频上不去,如果使用外部晶振,可以倍频到72MHz,我的产品涉及到UART通信,接了外部晶振,所以不是问题;开始使用RC倍频到36Mhz,RSA签名验证需要0.5秒。结合RAM占用需要10KB,需要的同行可以此作为RSA移植参考。% W/ ]0 H1 k& |; l" V
b. FLASH的block大小不同,F103是1KB block, 而F105是2KB block。在FLASH上保存设置参数,或涉及分区时,要注意区别。. k# r4 Z) s, y+ k

2 e' |& p9 N/ z; V
9 s0 T  H% C( Z+ J& U
2. 开发生产工具选择
  ]- h( |- m7 a' u3 ea. 采用STM32CubeMX生成驱动代码;跟随ST主流,接受新东西,减少重复制造轮子。$ m9 S' `5 ~4 ?& u; V3 N
我的产品中对驱动生成代码的唯一修改是,在UART的接收函数中,将中断程序接收到的数据直接扔进一个环形buffer;原来的接收函数评估收发可以,做产品真不好用。! P3 u8 u! \- `$ y+ X
b. 采用Atollic TrueSTUDIO for ARM 7.1.2开发环境  N) \. B6 U8 Z, r) b. U- u
STM32CubeMX可以直接生成这个软件的工程;最早使用过EMIDE, EMBLOCK,说实话都不好用。$ o2 f" Z8 Z5 Z" R, F8 n
c. 使用STLINK,而不是JLINK
9 a* `% ~% R* S3 d$ _硬件接口只拉了SWD的4条信号线(VCC/GND/SWDCLK/SWDIO),用JLINK及其不稳定。用ST很稳定。
! u0 l8 ^1 q7 x# L3 I# @d. 烧录使用STM32 ST-LINK Utility  N& p2 |9 M; x* l$ m
这个工具最方便的地方在于,可以在控制台脚本中调用。在cygwin脚本中,用法如下:
1 a: }- M8 G8 t5 W; ?' j0 p- lSTLINK="/cygdrive/c/Program Files/STMicroelectronics/STM32 ST-LINK Utility/ST-LINK Utility/ST-LINK_CLI.exe"( x/ a; w. o4 J# O, U8 i
1 A0 v6 L: r5 g" K7 H) h
* w) R" [5 L' J8 c# m: W
"$STLINK" -V -P factory.bin  0x0801F800  // FACTORY6 a5 h. g) K8 b. Y3 T
( r1 N! _8 U, H1 ~
( s6 C4 s0 m0 y! X% T
使用该工具,可以实现生产自动化。但速度不是很快,可能只适合小批量的生产。
2 P8 z4 R& X! V5 A0 H: B6 Ve. 升级使用Flash Loader Demo
4 @* ~& a, K9 p6 G- u4 @在硬件上预留了跳线,可以强制进入UART1的程序刷新; 适用于客户现场没有stlink,通过串口强制更新程序。% h  g/ s* a1 {: n: E
f. 在线升级
% K/ |" H1 E- O  ?6 ?0 k由于我的产品就是个3G的DTU模块, 客户那边流量也不是问题, 所以我设计了一套在线升级的功能。 PC软件只能自己定制设计了,MCU侧,先下载缓存升级包,然后进入BOOTLOADER,验证设计包完整后, 将缓存数据刷新到程序运行区域。7 d9 }" J3 V' w- ^% A) m, b8 v
在此为Cortex M3灵活的中断向量映射方法点赞!: Y# }3 j+ S- d" x. Y
& P$ t) Q  {+ G9 d7 g2 h- v
收藏 2 评论3 发布时间:2017-5-19 23:35

举报

3个回答
feixiang20 回答时间:2017-5-19 23:35:52
, o- }: ~9 d/ ~/ L! W
3. 防止解密的一些设计0 ~; ]& v. C7 }! k
设计目标:防止解密者克隆芯片程序到其他芯片后,直接运行。
- U4 B$ p8 c% F3 n" Q6 |5 g  M' C从目前了解的情况看,单机运行的程序是不能防止解密者反汇编破解的;又听说STM32芯片的芯片ID都已经可以被改写, FLASH读保护加密了也可以读出数据。基于这些信息, 我也只能做到为破解的人制造一点点的麻烦。主要采取了如下一些措施:
$ z* B# e) s5 V' R1 \6 d( D; e$ R/ ha. 读出3G模块的MEID或IMEI号,替代MCU的芯片ID。但该方法无法避免反汇编NOP等方法破解2 O; |! k; v2 H5 k1 ^3 U7 d9 b
b. 对MCU的芯片ID及其他配置信息进行签名,启动时进行验证;
2 X  K8 Q! I/ G$ d, qc. 程序被分为BOOTLOADER/APP两部分,将一些控制功能分开放入这两个阶段中运行。以前需要破解一个程序,现在需要破解两个。
% `" r& F) z# }; @d.升级时,对升级包进行签名校验
# s; a+ H- @1 `# X3 ]# ?: ze. 将一些控制逻辑,加密后放入3G模块当中。 MCU好破解,3G模块破解就没那么容易了。
# e, F, J% j& O! _  b: s  Wf. 白盒加解密算法将算法和密钥混合在一起, 是比较安全的。但没有找到合适的代码可以移植。 有懂得人麻烦提供一些信息,谢谢!* G$ i* w1 o0 T) |% l9 y2 W. {7 {
作为方案公司,需要保护自己的劳动成果,采取这些措施,也就是防个君子,防不了小人。
0 Q* B0 ~1 ~4 R$ A
/ v+ N& y1 e, P* L; P4. 性能的调优
) V5 f9 _4 q% H, ~# r当前DTU的环回测试速度可以稳定跑在1KB/s, 但没有达到UART 115200bps的十分之一。可以优化的地方在于:
$ a# {! b! T8 |& {+ d( C+ p& O' ga. MCU与3G模块采用UART连接,但是baudrate采用115200*2 bps;
; W3 C% f; h7 G3 R; wb. MCU与3G模块采用USB连接接,STM32F105的芯片USB应该可以做HOST" j- P, P& @' t& |; b# b7 E4 g7 b

% n* E/ M, Z  Z' u; [6 L  a4 p
5. 功耗调优
7 t( t5 R2 N2 F4 M5 t) QTBD
; u" x( [6 L) C. Q) o% @
feixiang20 回答时间:2017-5-19 23:36:12
6. DTU功能的设计难点1 A$ m9 a; H" @7 \0 ?1 v
a.AT命令错位:当前MCU与Modem通过AT命令交互,没有协议或规格要求一条AT命令必须在多长时间之内必须返回;AT命令超时时间设置短了,会导致重复多发AT命令,可能导致Modem命令执行中断或后续数据大量的返回,最终导致解析程序处理AT命令错位,或MCU不能获得Modem的正确状态;超时时间设置长了, 出了问题不能及时处理。这个参数与Modem/网络状态都有关系,需要根据实际情况调试确认。
$ B8 K. Y+ O2 Y/ h7 N! \3 @. p3 v3 Tb. Modem返回数据解析错位或丢失。通过压力测试可以发现/复现/解决,工作量的问题,但有时处理起来令人恼火,需要多一些耐心。
) H! F  U9 [- ]c. 资源总是有限的,尤其是RAM, 收发缓存RAM大小配置要合适;缓存越大越好。
6 \7 @! s0 v% x! {/ `- W1 |+ @+ C4 f2 D( o* v
7. 可以拓展的空间
# s1 t( J/ M6 k6 }4 n$ @现在的网络模块大都采用TCP协议连接,并且数据都是明码跑在网络上,如果在MCU中实现SSL/TLS,则可以实现身份鉴权/数据加密等功能。不过相应的芯片可能要采用STM32F4系列了,它们支持硬件RNG, AES,OTP, CRC。
: y. q1 i5 w& f0 K+ [% q6 o, H3 T/ ?2 A6 R
8. 其他帮助我们提高效率的工具
8 G% {  _; _' C8 s) c) H# T3 @2 z: `a. beyondcompare# n8 u; i8 Y. M. r5 @4 w
b. sourceinsight
$ b7 \: `/ v2 f8 [c. snv/git: w9 r3 h5 \5 e2 d
d. cygwin/shell
harvardx 回答时间:2018-5-26 00:14:26
没有show个基础版dtu的源代码么

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版