打印

又是NRF24L01,status0x0e,发送数据缓冲区wr_tx_pload没能成功写进去

[复制链接]
2215|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
arios0409|  楼主 | 2017-6-20 20:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,查看各个寄存器值都有正确写入,按照调试方法失能了一些功能,如果status0x2e则为发送成功。
现在的问题是这样的,读取wr_tx_pload发现一只是0,也就是没有写进去,但我的写函数是好的,因为写地址成功了。到底是为什么为什么为什么!!!太纠结了

相关帖子

沙发
dirtwillfly| | 2017-6-20 23:16 | 只看该作者
如果怀疑没写进去,可以用逻辑分析仪观察一下时序看看

使用特权

评论回复
板凳
arios0409|  楼主 | 2017-6-21 10:13 | 只看该作者
dirtwillfly 发表于 2017-6-20 23:16
如果怀疑没写进去,可以用逻辑分析仪观察一下时序看看

并不是怀疑,因为就是没有写进去啊,地址写进去能读出来的,数据就是没有读出来,所以压根没写的进去

使用特权

评论回复
地板
dirtwillfly| | 2017-6-21 12:10 | 只看该作者
arios0409 发表于 2017-6-21 10:13
并不是怀疑,因为就是没有写进去啊,地址写进去能读出来的,数据就是没有读出来,所以压根没写的进去 ...

观察一下时序看是否符合NRF24L01的要求

使用特权

评论回复
5
ningling_21| | 2017-6-21 16:21 | 只看该作者
arios0409 发表于 2017-6-21 10:13
并不是怀疑,因为就是没有写进去啊,地址写进去能读出来的,数据就是没有读出来,所以压根没写的进去 ...

换个芯片试试

使用特权

评论回复
6
arios0409|  楼主 | 2017-6-22 12:35 | 只看该作者

恩,换过还是不行,要不我帖下部分程序您给撇两眼?

使用特权

评论回复
7
arios0409|  楼主 | 2017-6-22 12:41 | 只看该作者
uchar SPI_Write_Buf(uchar reg,uchar *pBuf,uchar bit)
{
        uchar status2,uchar_ctr;
        Low_24L01_CSN;
        status2=SPI_RW(reg);
       
        for(uchar_ctr=0;uchar_ctr<bit;uchar_ctr++)
                SPI_RW(*pBuf++);
        High_24L01_CSN;
        return(status2);
       
       
}


void init_NRF24L01(void)
{
        SPI_init();
        Low_24L01_CE;
        Low_24L01_SCK;
        High_24L01_CSN;
}

uchar nRF24L01_TxPacket(uchar *tx_buf)
{
        uint sta=0;
        uchar TX[32]={0};
        Low_24L01_CE;
        SPI_RW_Reg(WRITE_REG+STATUS,0xff);
        SPI_RW_Reg(FLUSH_TX,0);
        SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);
        _delay_ms(1);
        SPI_RW_Reg(WRITE_REG+EN_AA,0x00);
        SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x01);
        SPI_RW_Reg(WRITE_REG+SETUP_AW,0x03);
        SPI_RW_Reg(WRITE_REG+SETUP_RETR,0x00);
        SPI_RW_Reg(WRITE_REG+RF_CH,0x40);
        SPI_RW_Reg(WRITE_REG+RF_SETUP,0x07);
        SPI_RW_Reg(WRITE_REG+CONFIG,0x0e);
        SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH);
        _delay_ms(1);
        SPI_Read_Buf(WR_TX_PLOAD,TX,TX_PLOAD_WIDTH);
        if (TX[0])
        {
                sta=1;
        }
       
        //High_24L01_CE;
        _delay_ms(1);
        return(sta);
}


下面是while 里的,就是读,看看有没有写进去。所以上面没有激活发送
                nRF24L01_TxPacket(TX_BUF);
                _delay_ms(1);
               
                show_status();
                SPI_Read_Buf(WR_TX_PLOAD,TX_BUF1,32);
                //SPI_Read_Buf(TX_ADDR,TX_BUF1,6);
                display(TX_BUF1[0]);
                //display(test[11]);

使用特权

评论回复
8
arios0409|  楼主 | 2017-6-22 12:41 | 只看该作者

uchar SPI_Write_Buf(uchar reg,uchar *pBuf,uchar bit)
{
        uchar status2,uchar_ctr;
        Low_24L01_CSN;
        status2=SPI_RW(reg);
       
        for(uchar_ctr=0;uchar_ctr<bit;uchar_ctr++)
                SPI_RW(*pBuf++);
        High_24L01_CSN;
        return(status2);
       
       
}


void init_NRF24L01(void)
{
        SPI_init();
        Low_24L01_CE;
        Low_24L01_SCK;
        High_24L01_CSN;
}

uchar nRF24L01_TxPacket(uchar *tx_buf)
{
        uint sta=0;
        uchar TX[32]={0};
        Low_24L01_CE;
        SPI_RW_Reg(WRITE_REG+STATUS,0xff);
        SPI_RW_Reg(FLUSH_TX,0);
        SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);
        _delay_ms(1);
        SPI_RW_Reg(WRITE_REG+EN_AA,0x00);
        SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x01);
        SPI_RW_Reg(WRITE_REG+SETUP_AW,0x03);
        SPI_RW_Reg(WRITE_REG+SETUP_RETR,0x00);
        SPI_RW_Reg(WRITE_REG+RF_CH,0x40);
        SPI_RW_Reg(WRITE_REG+RF_SETUP,0x07);
        SPI_RW_Reg(WRITE_REG+CONFIG,0x0e);
        SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH);
        _delay_ms(1);
        SPI_Read_Buf(WR_TX_PLOAD,TX,TX_PLOAD_WIDTH);
        if (TX[0])
        {
                sta=1;
        }
       
        //High_24L01_CE;
        _delay_ms(1);
        return(sta);
}


下面是while 里的,就是读,看看有没有写进去。所以上面没有激活发送
                nRF24L01_TxPacket(TX_BUF);
                _delay_ms(1);
               
                show_status();
                SPI_Read_Buf(WR_TX_PLOAD,TX_BUF1,32);
                //SPI_Read_Buf(TX_ADDR,TX_BUF1,6);
                display(TX_BUF1[0]);
                //display(test[11]);

使用特权

评论回复
9
ningling_21| | 2017-6-23 11:01 | 只看该作者
arios0409 发表于 2017-6-22 12:41
uchar SPI_Write_Buf(uchar reg,uchar *pBuf,uchar bit)
{
        uchar status2,uchar_ctr;

用这个试试
/********************************************/
/* 函数功能:检测24L01是否存在              */
/* 返回值;  0  存在                        */
/*           1  不存在                      */
/********************************************/           
uchar NRF24L01_Check(void)
{
        uchar check_in_buf[5]={0x11,0x22,0x33,0x44,0x55};
        uchar check_out_buf[5]={0x00};

        NRF_SCK=0;
        NRF_CSN=1;   
        NRF_CE=0;

        NRF24L01_Write_Buf(WRITE_REG+TX_ADDR, check_in_buf, 5);

        NRF24L01_Read_Buf(READ_REG+TX_ADDR, check_out_buf, 5);

        if((check_out_buf[0] == 0x11)&&\
           (check_out_buf[1] == 0x22)&&\
           (check_out_buf[2] == 0x33)&&\
           (check_out_buf[3] == 0x44)&&\
           (check_out_buf[4] == 0x55))return 0;
        else return 1;
}

使用特权

评论回复
10
ningling_21| | 2017-6-23 11:02 | 只看该作者
arios0409 发表于 2017-6-22 12:41
uchar SPI_Write_Buf(uchar reg,uchar *pBuf,uchar bit)
{
        uchar status2,uchar_ctr;

用这个试试
/********************************************/
/* 函数功能:检测24L01是否存在              */
/* 返回值;  0  存在                        */
/*           1  不存在                      */
/********************************************/           
uchar NRF24L01_Check(void)
{
        uchar check_in_buf[5]={0x11,0x22,0x33,0x44,0x55};
        uchar check_out_buf[5]={0x00};

        NRF_SCK=0;
        NRF_CSN=1;   
        NRF_CE=0;

        NRF24L01_Write_Buf(WRITE_REG+TX_ADDR, check_in_buf, 5);

        NRF24L01_Read_Buf(READ_REG+TX_ADDR, check_out_buf, 5);

        if((check_out_buf[0] == 0x11)&&\
           (check_out_buf[1] == 0x22)&&\
           (check_out_buf[2] == 0x33)&&\
           (check_out_buf[3] == 0x44)&&\
           (check_out_buf[4] == 0x55))return 0;
        else return 1;
}

使用特权

评论回复
11
jzh001| | 2017-8-7 10:42 | 只看该作者
请问楼主问题解决了吗

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

13

帖子

1

粉丝