工具与软件:
您好!
我们已开发出一种由 CC2642作为直通模式的应用。 该解析器通过低功耗蓝牙连接移动应用、解析命令并通过 SPI 线路将其发送到主 MCU。
时钟频率- 3 MHz
设置- POL0 PHA1
时钟极性-低
时钟相位-上升沿
CC2642充当 SPI 从器件、主 MCU 是 SPI 主器件。 CS 配置为软件驱动、其中 CC2642在调用 SPI Transfer ()之前等待主设备就绪(HW 引脚中断)。 由于此器件由电池供电、因此为了节省功耗、我们有两个 SPI 握手信号、一个是 SRDY -从设备就绪、另一个是 MRDY -主设备就绪。 任何人都可以通过先将各自的线路置为有效来向其他人发起请求、然后等待其他线对将另一对线置为逻辑低电平。 PIN HW Interrupt 会检测此断言、我们会在这段时间内启动时间并调用 SPI Transfer 将产生相应的数据。 一次 MRDY 被取消置位、CC2642了解可能有数据作为响应或新请求可用。 上层可以理解这一点、因为它遵循协议。
最近、我们修复了超时计时器(用于消息交换超时的协议计时器)和 MRDY 生效同时发生的竞态条件。 (我之前在社区上发布了同样的主题)。 我们已经将 MRDY 使中断处理程序的执行置于关键段中、因为这段代码会停止计时器。
最近、我们观察到、当我们从主 MCU 收到请求时、RX 缓冲区中有一个位翻转、这会使 CRC 错误和数据包被 CC2642 MCU 丢弃。 当我们将 MRDY 中断代码保存在关键段中时(使用 ICALL API)、发生的频率要大得多。
我们使用 Saleae Logic Pro 16验证了电压电平和时钟信号是正确的。 请建议我们是否需要在示波器上看到它?
请帮助我指南说明 SPI RX 缓冲区中可能发生数据损坏的所有可能情况。
谢谢。此致、
Chinmay Lotake.