越来越多厂商跟进Cortex-M23/33/35P了,大概进程如下.
- ARM 发布M23/M33内核
- 新唐最先发布M2351(M23内核)
- Microchip发布SAML10/SAML11(M23内核)
- NXP最先发布LPC5500(M33内核)
- ST发布STM32L5(M33内核)
- NXP发布i.MX 600
- ARM 发布M35P内核
他们都有一个特点,就是没有MPU,取而代之是TrustZone-M(下面简称SAU),目前已经量产的有新唐M2351.
先说说MPU的缺点:
- 只能设置2^n次方保护区域大小.
- 只能管理4G大小(32位单片机地址空间只有4G,但是再64位单片机就不同了.)
- MPU的可以被任意可执行代码配置(只要代码不在XN属性的地方,就有可能改变MPU配置.)
再看TrustZone特征:
- 任意大小可配置
- 安全区和非安全区,非安全区就算代码是可执行的,也不能修改配置.这是由于安全区所在的总线可以访问所有资源,而非安全区,只能访问部分资源.
- 安全区和非安全区之间不能自由切换,必须通过中转,中转是受保护的.
- 存在内存中的资源加密存放,就算别的程序窃取到其中的内存片段,也无法知道具体内容.
所以,可以理解成TrustZone是MPU的Plus版本,如果之前对MPU一点都不了解,那么这个上手就有点难度了.大多数Cortex-A都带了TrustZone,可以提前了解下,但是有一些小小的差别.
i.MX我还是挺看好的,就是封装很蛋疼.