请求应答链路双向透传设计
SPI、NFC 的数据块交换通常由一端发起,对端只能应答。对端有数据时也不能主动发送,只能等下一轮请求。
CH58X 的 NFC-A 实现见 两个 CH58X 芯片通过 NFC-A 实现 FIFO 数据透传。
协议处理直接写进传输层时,协议变化会牵动 SPI 或 NFC 代码。把协议解析放到上层,SPI 和 NFC 只负责数据透传。
两端各放一组发送 FIFO 和接收 FIFO:请求带走 A 的数据,应答带回 B 的数据。原有问答时序不变,上层得到一条双向字节通道。
单向发起与双向 FIFO 搬运
每轮只做两次搬运:
- 请求:A 发送 FIFO → B 接收 FIFO。
- 应答:B 发送 FIFO → A 接收 FIFO。
某一侧没数据时,该方向留空,另一侧照常传。数据太多就分批。
ACK 前保留当前批次
发送 FIFO 一旦出队,传输失败时很难原样放回。当前批次先进入待确认区,收到匹配的 ACK 才释放。超时就重发;ACK 丢失时,接收端用批次序号识别重复数据,已经入队的批次不再写第二次。
FIFO 出队后的保存位置和回写风险,见 FIFO 出队数据应进入消费者暂存区。
空请求保留对端发送机会
A 没有数据时仍按约定节奏发空请求。B 才有机会在应答中送出自己的 FIFO,A 也能在下一轮确认 B 的上一批。B 积累多批数据时,需要连续多轮才能搬完。
ACK 只确认数据入队
接收 FIFO 满时不回成功 ACK,发送方继续保留当前批次。这样不会把没接纳的数据算成成功。
ACK 只说明数据已经进入接收 FIFO,不代表业务命令已经执行。透传层管轮询、分批、序号、ACK、重试和 FIFO 搬运;业务层只管消息含义。