bangbangji 发表于 2021-2-27 20:38:12

24l01室内几米远有1%左右的丢包率正常么?如何改善?

本帖最后由 bangbangji 于 2021-2-27 22:37 编辑

淘宝上买的模块,发射端带天线,单方向传输。

开启了应答和自动重传,大概还有1%左右的丢包率,这个现象正常吗?


5楼有代码,帮忙分析下有无问题

zzh90513 发表于 2021-2-27 21:02:32

开了应答,接收端要跟发送端一样才行,因为应答信号是从接收端发出,如果发射功率不够或者没天线不行;

zirong0804 发表于 2021-2-27 21:32:54

或者换个芯片si4432

bangbangji 发表于 2021-2-27 21:43:22

zzh90513 发表于 2021-2-27 21:02
开了应答,接收端要跟发送端一样才行,因为应答信号是从接收端发出,如果发射功率不够或者没天线不行; ...

这里确实有点问题
不过现在看好像不是应答没收到,只是单纯的发送方往接收方发的时候丢了。
如果是应答没有收到,那么发送端会重发,那么接收端可能会收到两帧相同的数,目前没有发现相同数的。

bangbangji 发表于 2021-2-27 22:36:36

贴一下代码,发送端:
        CE_L;//CE=0;    // chip enable
        CS_H;//CSN=1;   // Spidisable
        SCK_L;//SCK=0;   //
       
                SPI_RW_Reg(WRITE_REG_24L01 + STATUS, 0xff); // clear irq flag
                SPI_RW(FLUSH_TX); //clear tx fifo
                SPI_RW(FLUSH_RX); //clear rx fifo
       
        SPI_Write_Buf(WRITE_REG_24L01 + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);    // Writes TX_Address to nRF24L01
        SPI_Write_Buf(WRITE_REG_24L01 + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // RX_Addr0 same as TX_Adr for Auto.Ack
        SPI_Write_Buf(WR_TX_PLOAD, TxBuf, TX_PLOAD_WIDTH); // Writes data to TX payload
                SPI_RW_Reg(WRITE_REG_24L01 + EN_AA, 0x01);      // Enable Auto.Ack:Pipe0
        SPI_RW_Reg(WRITE_REG_24L01 + EN_RXADDR, 0x01);// Enable Pipe0
        SPI_RW_Reg(WRITE_REG_24L01 + SETUP_RETR, 0x12); // 500us , 10 retrans...
        SPI_RW_Reg(WRITE_REG_24L01 + RF_CH, ch_freq);      // Select RF channel 40
        SPI_RW_Reg(WRITE_REG_24L01 + RF_SETUP, 0x07);   // TX_PWR:0dBm, Datarate:2Mbps, LNA:HCURR
        SPI_RW_Reg(WRITE_REG_24L01 + CONFIG, 0x0e);   // Set PWR_UP bit, enable CRC(2 bytes) & Prim:TX. MAX_RT & TX_DS enabled..
        CE_H;
       
        while(IRQ_D == 1); //µÈ´ý·¢ËÍÍê±Ï



接收端:
        if(first_flag == 0)
        {//只初始化时运行1次
                first_flag = 1;
                CE_L;//CE=0;    // chip enable
                CS_H;//CSN=1;   // Spidisable
                SCK_L;//SCK=0;   //
               
                SPI_RW_Reg(WRITE_REG_24L01 + STATUS, 0xff); // clear irq flag
                SPI_RW(FLUSH_TX); //clear tx fifo
                SPI_RW(FLUSH_RX); //clear rx fifo
               
                        SPI_Write_Buf(WRITE_REG_24L01 + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);    // Writes TX_Address to nRF24L01
                        SPI_Write_Buf(WRITE_REG_24L01 + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // Use the same address on the RX device as the TX device
                        SPI_RW_Reg(WRITE_REG_24L01 + EN_AA, 0x01);      // 1 Enable Auto.Ack:Pipe0
                        SPI_RW_Reg(WRITE_REG_24L01 + EN_RXADDR, 0x01);// Enable Pipe0
                        SPI_RW_Reg(WRITE_REG_24L01 + RF_CH, freq);      // Select RF channel 40
                        SPI_RW_Reg(WRITE_REG_24L01 + RX_PW_P0, TX_PLOAD_WIDTH); // Select same RX payload width as TX Payload width
                        SPI_RW_Reg(WRITE_REG_24L01 + RF_SETUP, 0x07);   // TX_PWR:0dBm, Datarate:2Mbps, LNA:HCURR
                        SPI_RW_Reg(WRITE_REG_24L01 + CONFIG, 0x0f);   // Set PWR_UP bit, enable CRC(2 bytes) & Prim:RX. RX_DR enabled..
                CE_H;
               
                HAL_Delay(2);
        }
       
        if(IRQ_D == 0)
        {
                i = SPI_Read(STATUS);
                if(i&(1<<6)) // STATUS's bit6 is rx flag
                {
                        SPI_Read_Buf(RD_RX_PLOAD,RxBuf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer
                        SPI_RW_Reg(WRITE_REG_24L01 + STATUS, 0xff); // clear irq flag
                        SPI_RW(FLUSH_TX); //clear tx fifo
                        SPI_RW(FLUSH_RX); //clear rx fifo
                        send_uart_byte_array(1, RxBuf, 32);
                }
        }

menglogic 发表于 2021-2-28 14:18:47

本帖最后由 menglogic 于 2021-2-28 14:26 编辑

原来做用24L01 做遥控器时,距离几米也是有发现丢包的,不排除是其它WIFI之类的同频干扰。看网上资料要提高通信稳定性跳频是需要的。我这遥控器不需要很高的实时性,当丢包后延时再发送。

kitten 发表于 2021-2-28 15:19:49

无线的方式肯定存在丢包问题,空间电磁干扰太多了。加了应答和自动重发还丢数据,只能说明你的代码应答逻辑不够严谨。
页: [1]
查看完整版本: 24l01室内几米远有1%左右的丢包率正常么?如何改善?