基于SmartFusion2 的I2C 多主多从通信设计
2021-07-11陈世淼倪淑燕廖育荣
陈世淼,倪淑燕,廖育荣
(1.航天工程大学研究生院,北京 101407;2.航天工程大学电子与光学工程系,北京 101407)
随着电子科学技术的发展,卫星正在逐渐往小型化、集成化和模块化方向发展[1-2],其中立方体卫星是近年来微小卫星领域的热点。立方体卫星是用来进行简单的太空观察的星标准立方体模块或其组合体的小卫星,具有成本低、周期短、可批量生产的优势。目前,立方体卫星主要应用于对地观测和技术试验,并逐步在导航增强、空间安全和深空探测领域推广。立方体卫星由于体积、能源的限制,与大型卫星的性能仍有较大差距,所以在进行立方体卫星设计时,要选择能耗更低、功能密度更高的部组件[3-4]。目前,卫星上常用的X86、PowerPC 和SPARC 架构处理器功耗较高、功能密度低,常用的CAN、MIL-STD-1553B、IEEE 1394、SpaceWire 功耗较高、数据传输过程复杂,在立方体卫星上应用时会造成成本、能源和运算能力的浪费,性价比低。
针对以上问题,提出了一种适用于立方体卫星的基于SmartFusion2 芯片的I2C 总线多主多从通信设计。SmartFusion2是一种将ARM和FPGA结合的处理器,具有高安全性、高可靠性和低功耗等特点[5-7],通过其FPGA 的强大功能可以完成复杂系统的设计和实现,极大地提高立方体卫星的功能密度和适应性[8-10]。I2C 总线具有设计简单灵活、成本低和稳定性高的特点[11-13],适合作为立方体卫星上的总线来连接各部组件进行通信。在立方体卫星上应用Smart Fusion2 片上芯片和I2C 总线,将在提高其功能密度,降低成本方面,具有较高的实用价值。
1 I2C总线介绍
I2C 总线是一种两线制、双向通信、同步的串行总线[13],由数据线SDA 和时钟线SCL 构成通信线路,各个设备可以通过连接到总线上实现数据通信,各设备之间通过地址来区分[14-15]。SDA 引脚一般通过外部设备拉高。SDA 引脚上的数据变化可能仅在SCL 的低电平内发生,在SCL 引脚处于高电平期间,SDA 引脚上电平的变化将产生启动信号或结束信号。I2C 总线在传输过程中的3 种信号为启动信号、结束信号和应答信号。图1为信号电平变化图。
图1 信号电平变化图
启动信号:在SCL 处于高电平的条件下,SDA 由高电平到低电平的跳变将产生启动信号。
结束信号:在SCL 处于高电平的条件下,SDA 由低电平到高电平的跳变将产生结束信号。
应答信号:所有的地址和数据字节都发送完成后,接收设备将在第九个时钟周期发送一个零响应来确认它收到了每一个字节。这个零响应就是应答信号。
I2C 总线主要有两种信息传输模式——写入数据和读取数据。该设计为了简化程序设计,封装了一种写读模式——将写入数据和读取数据用一个重复的启动信号连接起来的一种信息传输模式。3 种传输模式的传输过程如下,传输帧格式如图2 所示。
图2 传输帧格式
I2C 主机通过监视SDA 线路来判断总线是否处于空闲状态。当总线空闲时,I2C 主机通过发送一个起始位来启动数据传输,之后是目标从设备的7 位串行地址和指示数据传输方向的读/写位。目标从机收到数据后发送一个确认信号来告诉主机已经完成对地址的接收。发送数据设备进行数据传输时每次传输一个字节的数据,接收设备接收到数据后,将发送一个确认位。当主机发送或传输完所有的数据后,将发送一个停止位来结束数据传输。在写读模式下,数据写入完成后,将再次发送一个起始位来进行读取模式,读取完成后由一个停止位来结束写读模式。
2 SmartFusion2芯片介绍
该设计选择的是M2S090TS-1FGG484,处理器采用ACTEL 的第四代65 工艺的片上系统产品:基于flash 架构,能够满足工业、军事、航空、通信和医疗领域的高安全性、高可靠性和低功耗的片上SoC 系统。
SmartFusion2 系列具有高的安全性、可靠性和低功耗特性,具体表现在:
1)采用了基于flash的最先进设计保护功能,可防止篡改、克隆和伪造,采用了先进的加密标准AES-256、安全散列算法SHA-256、384 位椭圆曲线密码引擎,彻底改变了FPGA 在安全性应用中的有效性。
2)具有零故障率(FIT)的SEU 免疫能力,在内部Cortex-M3、SRAM、以太网控制器、CAN 控制器、USB等模块中均采用了EDAC 校验功能。
3)静态功耗小于10 mW,在采用flash freeze 模式时,功耗可降至1 mW,唤醒时间小于100 μs。
SmartFusion2片上系统芯片被广泛应用于军工和航空领域,欧洲空中客车公司的A380大型客机上采用了大量SmartFusion2(每架超过1 000只)。该产品不在美国公禁运之列,所以可采购到军级产品,适用于卫星。并且该处理器在国防科大的微纳卫星天拓三号上进行了应用,已在轨飞行2.5年,在轨运行稳定可靠。
该设计选择的是SmartFusion2 开发板,其内部集成了166 MHz 的ARM Cortex-M3 硬核处理器,在SRAM、PLL 等普通外设的基础上,集成了高速乘法器、DDR2/3、CAN、USB 以及千兆以太等高级外设。图3 是SmartFusion2 的FPGA 逻辑资源图。
图3 SmartFusion2的FPGA逻辑资源图
3 程序设计
该设计通过使用SmartFusion2 安全评估开发板上的4 个I2C 外设来实现I2C 的多主多从信息传输,SmartFusion2 SoC FPGA开发板在MSS上提供两个I2C 外设,此外还可以通过FPGA 上的I2CIP核来实现另外两个I2C外设。I2C 的连接方式如图4所示,其中MSS I2C_0 和MSS I2C_1 由MSS提供,Core I2C_0 和Core I2C_1 由开发板上的FPGA模块生成,MSS I2C_0 和Core I2C_0是主机,MSS I2C_1 和CoreI2C_1 是从机。通过UART 接口将开发板与PC 机相连,可通过PC 机实现对主从组合、从地址、要读取的字节数和I2C 传输方式的选择。
图4 I2C主机从机连接图
3.1 程序主要函数
该程序主要通过上位机软件给开发板传输指令,从而进行写入和读取操作。在执行写入操作时,由于I2C 缓冲器可以最多存放1 024 个字节的数据,所以主机一次最多发送1 024 个字节的数据给从机,从机收到数据后将其存储在缓冲器里,并且根据收到数据的长度覆盖缓冲器的部分或所有数据。在执行读取操作时,主机读取从机缓冲器里的数据并将其显示到上位机软件。在执行写读模式时,主机先将数据发送给从机,然后再读取从机数据并显示到上位机软件。表1 为程序用到的主要函数。
表1 主要函数
3.2 硬件连接
该设计在SmartFusion2 安全评估开发板上运行,为了实现I2C 的多主多从设计,需要对开发板的一些跳线进行连接。在断电状态下将跳线J3 的引脚1 和引脚2 连接,将跳线J8 的引脚1 和引脚2 连接,将开发板的J18 通过USB 与PC 机连接来实现开发板与PC 机的通信。为了实现4 个I2C 外设之间的通信,需要将4 个外设的SCL 和SDA 分别用飞线连接,4 个外设的SCL 和SDA 管脚如表2 所示。
表2 SCL和SDL管脚表
3.3 调试结果
该设计可以通过串口执行以下操作:设置和读取MSS I2C 从机和Core I2C 从机的外部地址;MSS I2C主机或Core I2C 主机对MSS I2C 从机或Core I2C 从机执行读取或者写入数据操作;MSS I2C 主机或Core I2C主机对MSS I2C 从机或Core I2C 从机执行写读数据操作。程序的运行过程中还会执行错误检测和超时功能,写入地址、写入数据和写读数据成功后,串口将返回0x00,表示写入成功,0xFF 表示写入失败。
MSS I2C 主机的默认地址是0x20,Core I2C 主机的默认地址是0x30,MSS I2C 从机的默认外部地址是0x21,Core I2C 从机的默认外部地址是0x31。表3 为地址设置和读取的指令,图5 为串口调试的结果。
表3 地址的设置和读取指令
图5 地址设置和读取指令调试
MSS I2C 从机中默认存储的数据是0x11223344 5566778899AABBCCDDEEFF,Core I2C从机中默认储存的数据是0Xffeeddccbbaa998877665544332211。当写入I2C 从机的数据长度小于从机原来储存数据的长度时,写入的数据将替代相应位置的原数据,其他位置数据不变。表4 为读取和写入数据的指令,图6 为指令的调试图。
图6 读取和写入数据指令调试
表4 读取和写入数据指令表
I2C 主机执行写读操作时需要输入从机地址、写入读取的数据长度和数据,该过程是写入数据和读取数据的结合。表5 是写读模式的指令,图7 是写读数据的指令调试过程。
图7 写读数据指令调试
表5 写读数据指令表
4 结论
该设计以SmartFusion2 片上系统芯片为核心,通过芯片上的FPGA 扩展了I2C 外设,成功实现了I2C总线多主多从设备的读取数据、写入数据和写读数据。在进行立方体卫星设计时,采用设计简单灵活的I2C 总线有利于降低成本、减少功耗、简化设计。SmartFusion2 片上系统芯片是ARM 和FPGA 的结合,具有较高的灵活性,可通过FPGA 扩展立方体卫星所需功能,提高立方体卫星集成度。由此可见SmartFusion2 片上系统芯片和I2C 总线在立方体卫星研究领域具有较广的应用前景。接下来需要进一步开展的工作是进行SmartFusion2 片上系统芯片与立方体卫星部组件的通信调试,提高在立方体卫星平台上应用时的可靠性、实时性。