请求应答链路双向透传设计

SPI、NFC 的数据块交换通常由一端发起,对端只能应答。对端有数据时也不能主动发送,只能等下一轮请求。

CH58X 的 NFC-A 实现见 两个 CH58X 芯片通过 NFC-A 实现 FIFO 数据透传

协议处理直接写进传输层时,协议变化会牵动 SPI 或 NFC 代码。把协议解析放到上层,SPI 和 NFC 只负责数据透传。

两端各放一组发送 FIFO 和接收 FIFO:请求带走 A 的数据,应答带回 B 的数据。原有问答时序不变,上层得到一条双向字节通道。

请求应答链路搬运双方 FIFO 数据并捎带确认

单向发起与双向 FIFO 搬运

每轮只做两次搬运:

某一侧没数据时,该方向留空,另一侧照常传。数据太多就分批。

ACK 前保留当前批次

发送 FIFO 一旦出队,传输失败时很难原样放回。当前批次先进入待确认区,收到匹配的 ACK 才释放。超时就重发;ACK 丢失时,接收端用批次序号识别重复数据,已经入队的批次不再写第二次。

FIFO 出队后的保存位置和回写风险,见 FIFO 出队数据应进入消费者暂存区

空请求保留对端发送机会

A 没有数据时仍按约定节奏发空请求。B 才有机会在应答中送出自己的 FIFO,A 也能在下一轮确认 B 的上一批。B 积累多批数据时,需要连续多轮才能搬完。

ACK 只确认数据入队

接收 FIFO 满时不回成功 ACK,发送方继续保留当前批次。这样不会把没接纳的数据算成成功。

ACK 只说明数据已经进入接收 FIFO,不代表业务命令已经执行。透传层管轮询、分批、序号、ACK、重试和 FIFO 搬运;业务层只管消息含义。