跳转到主要内容

Cortex-M0

ARM架构抗辐射MCU首次升空,搭载在NASA SpaceX CRS-10货运飞船开展实验

Lee_ /

NASA成功发射SpaceX CRS-10货运飞船进行第十次国际空间站商业货运任务。SpaceX CRS-10搭载了一个电子辐射效应实验,关键是该实验由美国Vorago公司的ARM架构抗辐射MCU进行控制。2016年,NASA宣布将选择ARM Cortex-A53处理器构建下一代空间电子产品平台,计划于2020年发射。可见,ARM技术在航天工业中势头越来越猛。此次搭载实验是由美国空军实验室和NASA联合支持,标志着基于ARM的耐极端环境抗辐射微处理器首次部署于空间系统。

<strong>抗辐射存储器实验 </strong>

空间环境下,存储器暴露于高能质子和辐射粒子的辐射环境下,当这些粒子轰击存储器或其他微电路时将导致存储器位信息错误,这将导致电子设备故障或危及任务。

为解决这一问题,研究人员设计了抗辐射电子存储器实验——RHEME(监测空间存储器),RHEME将持续一年监测空间粒子辐射对存储器的影响。该实验采用了VORAGO公司基于ARM Cortex-M0的抗辐射微控制器进行控制。该微控制器采用VORAGO HARDSIL®工艺制造,抗辐射且耐受极端温度环境。实验结果将有助于空间用存储器的错误检测、纠正和消除。该实验是挑战空间环境、实现下一代空间计算的重要一步。

在Cortex-M系列上如何准确地做us级延时?

editor /

前几天刚好同事问起在Cortex-M上延时不准的问题,在网上也没找到比较满意的答案,干脆自己对这个问题做一个总结。

根据我们的经验,最容易想到的大概通过计算指令周期来解决。该思路在Cortex上并不是很适用:一方面MCU从Flash取指是有延时的,另一方面Cortex的指令集不是固定周期的,特别从M3加入分支预测后,分支指令在Cortex-M不同型号上的结果都不相同。因此除了指令周期外,我们需要考虑的东西还有很多,才能得到正确的结果。

<strong>不带分支预测器的情况</strong>

仍然先从不带分支预测器的Cortex-M0开始,通过计算指令周期延时的实现代码如下:

void delay_us(us) {
delay_ntimes((us * sysclk - 8) / 4);
}
__asm void delay_ntimes(unsigned int n)
{
L1
SUBS R0, #1
BCS L1
BX LR
}

从这段代码可发现两个主要问题: