|
本帖最后由 newbiemike 于 2022-6-10 15:52 编辑
你好,我目前在使用XN297LBW.
我有看到FAQ文档,普通模式下发送转接收的注意事项。
3.7 普通模式下,芯片由接收状态转为发射时,为什么对端无法收到数据?
xn297l 接收转发射, 第一包发送的时间会延时, 延时的时间
=RX_SETUP_TIME+RX_ACK_TIME+ARD。发完之后需要加3ms 以上的延时。
接收转发射后,在CE_HIGH 的情况下,如果不往TX FIFO 写数据,TX 也会发射出
去,发送数据是随机的,而且此时的TX FIFO 无法清除,所以在接收转发送后,需要在
10us 内往TX FIFO 内写payload。
接收/发射转换的具体流程请参考《XN297L 软件设计和调试参考.pdf》3.6 节。
问题1:这里的10us,是指要开始写payload,还是说payload要10us内写完? 若是后者,则比较困难,单片机以及SPI速度都需要很快才行.
问题2:普通模式下,接收转发送的时序图,是否能给一个,感觉这部分描述得比较模糊。
问题3:我没有看到增强模式下接收转的发送描述,是否可以详细描述下芯片行为?以及相应的时序状态图。
在增强模式下接收转发送,我自己测试,发现必须要延时一段时间才能发送成功,具体逻辑如下。
其中XN297_TIME_STB2_Wait >=1500,连续发送接收比较稳定。若XN297_TIME_STB2_Wait < 1200+,则都无法发送成功。XN297_TIME_STB2_Wait 在1200~1400之间,发送不稳定,发送一段时间后对端再也收不到数据。
U32 XN297_TIME_STB2_Wait = 1500;
U32 XN297_TIME_Tx_Wait = 1000;
while(1) XN297_SendData(buf, 6);
void XN297_SendData(U8 *pData, U8 len)
{
if (len <= XN297_MAX_PACKET_LEN)
{
XN297_ClearCE();
XN297_WriteReg(REG_CONFIG, 0x8E);
XN297_SetCE();
HAL_WaitTimeUs(XN297_TIME_STB2_Wait);
XN297_CmdWriteData(CMD_W_TX_PAYLOAD_NOACK, pData, len);
HAL_WaitTimeUs(XN297_TIME_Tx_Wait);
#if 1
XN297_ClearCE();
XN297_Cmd(CMD_FLUSH_RX);
XN297_WriteReg(REG_CONFIG, 0x8F);
XN297_SetCE();
TMR_WaitTime(10);
if (XN297_IsDataReceived())
{
U8 buf[32];
XN297_ReadData(buf);
}
#endif
}
}
|
|