Panchip Cop.

查看: 7269|回复: 12

XN297L接收转发送问题

[复制链接]

1

主题

3

帖子

17

积分

注册客户

Rank: 3Rank: 3

积分
17
发表于 2022-6-10 15:49:45 | 显示全部楼层 |阅读模式
本帖最后由 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  
    }
}



回复

使用道具 举报

6

主题

50

帖子

1万

积分

磐启员工

Rank: 7Rank: 7Rank: 7

积分
10797
发表于 2022-6-10 19:30:36 | 显示全部楼层
本帖最后由 刘海兵 于 2022-6-10 19:42 编辑

问题1:这里的10us,是指要开始写payload,还是说payload要10us内写完? 若是后者,则比较困难,单片机以及SPI速度都需要很快才行.
答:    这里10us内开始写(不是写完)就可以了。

问题2:普通模式下,接收转发送的时序图,是否能给一个,感觉这部分描述得比较模糊。
答:    普通模式下接收和发射的时序图,都可以参考《XN297L 产品说明书V5.0.pdf》图5.2
(如附件图片所示,普通模式参考图中红框部分即可,后半部分为芯片自动切换时序)
图中的时间可以通过查看相应的寄存器配置计算,以图中PRX为例,当接收端收到数据后(图中位置④),程序切换为TX模式,往TX FIFO写完数据, 此时发射的流程可看做PTX中发射部分(从①处开始,到红框部分结束(SEND_DATA_TIME完成))。

此时正常的发射时间应该为 30us+EX_PA_TIME+TX_SETUP_TIME+TRX_TIME+SEND_DATA_TIME = 775.5us (基于1M速率,6bytes payload ,  BB_CAL为0x12,0xED0x67, 0x9C,0x46配置)。
文档中有提到,如果是普通模式下由接收转发射时,第一包发射的时间会变长RX_SETUP_TIME+RX_ACK_TIME+ARD = 896 us 。所以从RX->TX后,第一包数据发射时长为1671us。

问题3:我没有看到增强模式下接收转的发送描述,是否可以详细描述下芯片行为?以及相应的时序状态图。
答:    增强模式时序图如2所示,你这边程序在接收转发射后,第一包数据的时间大约在1671us左右,建议在延时超过这个值后再切换为接收状态。另外如果增强模式能满足需求建议使用增强模式,TX/RX切换的时间更短。




TX_RX_时序图.png
回复

使用道具 举报

1

主题

3

帖子

17

积分

注册客户

Rank: 3Rank: 3

积分
17
 楼主| 发表于 2022-6-10 22:27:21 | 显示全部楼层
本帖最后由 newbiemike 于 2022-6-10 23:01 编辑

谢谢你详细的解答。我目前考虑是两个XN297LBW相互收发(大概10ms相互收发一次),硬件简单成本低,距离不是主要考虑因素,由于LBW没有中断引脚,所以相互收发的timing上用增强模式比较困难。
目前是倾向于使用增强模式W_TX_PAYLOAD_NO-ACK,相互收发数据。因为增强模式下,可以发送动态长度的数据。所以想把XN297L的timing搞清楚,确认下通过两个XN297LBW相互收发数据是否可行。

问题1:10us内开始写数据,是指CSN拉低就可以,还是SPI需要发完W_TX_PAYLOAD,或者SPI需要发送完payload的第一个字节?
问题2:普通模式下,接收转发送,第一包数据发送的timing,请问是2.1还是2.2的timing?  这牵涉到数据实际发送出去的timing。
           2.1 RX_SETUP_TIME+RX_ACK_TIME+ARD -> 30us+EX_PA_TIME+TX_SETUP_TIME+TRX_TIME+SEND_DATA_TIME
           2.2 30us+EX_PA_TIME+TX_SETUP_TIME+TRX_TIME+SEND_DATA_TIME -> RX_SETUP_TIME+RX_ACK_TIME+ARD
问题3:增强模式下,接收转发送后,你提到第一包数据发送时间跟普通模式是一致的.
           3.1 这个1671us是只针对W_TX_PAYLOAD命令,对吗? 1671us是包含了等待ACK的时间?
           3.2 这个1671us,对于W_TX_PAYLOAD_NO-ACK命令,是否不适用?因为我实际测试下来,感觉不需要这么多时间。我程序里,是使用的W_TX_PAYLOAD_NO-ACK命令。
           3.3 我现在疑惑的地方,增强模式下接收切换为发送模式,CE拉低,CONFIG切换为0x8E, 然后CE拉高之后,HAL_WaitTimeUs(XN297_TIME_STB2_Wait); 这里XN297_TIME_STB2_Wait约1.5ms或更多,然后写入payload,对端可以收到数据。若XN297_TIME_STB2_Wait较小,CE拉高之后等待时间短,就写入payload,则对端无法收到数据。请问这里是有什么讲究么? 或者能否给个参考的流程,增强模式下,接收转发送(W_TX_PAYLOAD_NO-ACK)的流程?
回复

使用道具 举报

6

主题

50

帖子

1万

积分

磐启员工

Rank: 7Rank: 7Rank: 7

积分
10797
发表于 2022-6-13 11:22:04 | 显示全部楼层
你好,请问接收端查询status的频率如何(多久查询一次收到数),如果查询的频率在几十us左右,使用增强模式是不好存在问题的。如果查询的频率在ms级别,可能导致发射端收不到ACK PAYLOAD(但是可以收到芯片自动回应的ack信号,具体可以参考FAQ描述)。如果查询频率比较慢,另外一种解决方式是
提前把需要回复的数据(ack_pyalod)写入到TX FIFO中,这样接收端在收到数据的时候可以把回应的数据及时发送到发射端,这样是否能满足需求?

你上面提到的这种属于非标准应用(增强模式下再手动切换TX/RX, 因为增强模式本身的设计就是自动切换TX/RX),虽然使用的是W_TX_PAYLOAD_NO_ACK命令,但还是和普通模式下是存在一些差异的,所以不能全参考《XN297L 产品说明书V5.0.pdf》图5.2的时序图。所以建议还是用常规的普通模式TX/RX切换或者增强模式。你应用中提到可能每次发射的数据长度是动态的,可否使用软件协议解决(每次发最大长度,数据中带长度位)。

另外上面提到的几个问题:问题1 CSN拉低就可以了。   问题2 普通模式下接收转发射第一包发射的实际变长这个问题,这个应用中规避就好了,没有时序参考。 问题3,4如上所示,这种非标应用,没有做过多的测试。建议还是使用普通模式TX/RX切换或增强模式。
回复

使用道具 举报

1

主题

3

帖子

17

积分

注册客户

Rank: 3Rank: 3

积分
17
 楼主| 发表于 2022-6-13 21:44:13 | 显示全部楼层
刘海兵 发表于 2022-6-13 11:22
你好,请问接收端查询status的频率如何(多久查询一次收到数),如果查询的频率在几十us左右,使用增强模式 ...

好的,谢谢你。我试下普通模式和增强模式,从协议上想办法。

测试代码,是循环在查询,4M SPI下,基本20+us就能查询一次。但实际代码不可能让单片机一直查询。
回复

使用道具 举报

0

主题

1

帖子

1

积分

新注册客户

Rank: 1

积分
1
发表于 2023-4-7 14:29:31 | 显示全部楼层
本帖最后由 风云 于 2023-4-7 14:30 编辑

请问如何购买XN297LBW呢?
48652774@qq.com
回复

使用道具 举报

0

主题

41

帖子

41

积分

注册客户

Rank: 3Rank: 3

积分
41
发表于 2023-5-16 23:28:06 | 显示全部楼层
谢谢楼主学习学习
回复

使用道具 举报

0

主题

41

帖子

41

积分

注册客户

Rank: 3Rank: 3

积分
41
发表于 2023-5-17 17:14:17 | 显示全部楼层
谢谢楼主,学习学习
回复

使用道具 举报

0

主题

41

帖子

41

积分

注册客户

Rank: 3Rank: 3

积分
41
发表于 2023-5-17 17:16:47 | 显示全部楼层
谢谢楼主,学习学习
回复

使用道具 举报

0

主题

41

帖子

41

积分

注册客户

Rank: 3Rank: 3

积分
41
发表于 2023-5-17 17:17:07 | 显示全部楼层
谢谢楼主,学习学习
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表