在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!) 创芯人才网--重磅上线啦!
查看: 6822|回复: 13

[求助] nrf24le1无线芯片的2线模块不能工作

[复制链接]
发表于 2014-5-25 13:10:04 | 显示全部楼层 |阅读模式
20资产
编写了一段驱动nrf24le1内部的iic模块的程序,功能是作为master,其先给2线上的slave器件写2字节的数据,然后再从同一个slave器件上读4字节数据。该段程序能实现功能,但是不稳定,有时能够通信成功,有时通信到一半的时候,芯片死机了(中断程序也不能运行)。通过示波器观察,发现,原因是数据发送过程中,SCL信号自动被拉低(有时一字节数据没发送完,SCL信号就被拉低了),熟悉nrf24le1的高手请帮帮忙!写iic程序的函数如下:void  write_cmd(unsigned char addr,unsigned char cmd,unsigned char dat1,unsigned char dat2){            unsigned char deviceaddr=addr;        START();        W2DAT=(addr<<1)+0;   // write         iic device        WaitWire2Free();          W2DAT=cmd;        WaitWire2Free();        W2DAT=dat1;        WaitWire2Free();        W2DAT=dat2;        WaitWire2Free();        STOP();        iic_ibuf[7]=1;}读iic程序的函数如下:void read_to_iic_obuf(unsigned char addr,unsigned char n){        unsigned char i,byte_ctr;        byte_ctr=n;        clear_iic_obuf();                                                    //清空缓冲区        START();        W2DAT=(addr<<1)+1;                    //read from 1200 slave//        WaitWire2Free();                  // wait ACK        while(ACK);        WaitWire2Free();        iic_obuf[0]=W2DAT;        iic_obuf[0]=0;        for(i=0;i<byte_ctr-1;i++)        {WaitWire2Free();iic_obuf=W2DAT;}        WaitWire2Free();        STOP();        iic_obuf[byte_ctr-1]=W2DAT;        WaitWire2Free();        iic_ibuf[7]=1;}/**************************************************                                        ************************************************功能:2线完成中断程序**************************************************/void wire2ISR() interrupt         INTERRUPT_SERIAL{        c_flag=1;}/**************************************************                                        ************************************************功能:等待2线数据传输完成**************************************************/void WaitWire2Free(void){        while(c_flag==0);       // 等待传输标准位置1        c_flag=0;             // 清除标志位}

 楼主| 发表于 2014-5-25 13:17:31 | 显示全部楼层
自己先顶一个
发表于 2014-5-26 08:02:44 | 显示全部楼层
你把格式重新排一下...现在是乱的...这样好看些...
另外IIC总线对时钟要求比较高,建议检查一下是不是时钟不稳定导致的...
 楼主| 发表于 2014-5-26 09:34:10 | 显示全部楼层
回复 3# guolehaohao


    呵呵,复制进去的时候程序格式一行一条程序,一上传就乱了,我想办法看能不能调一下。恩,有可能,不过iic时钟是这个模块自己给的,如果这样的话就说明是系统的设计问题了,不过,我再想会不会是程序上出现什么问题了?
 楼主| 发表于 2014-5-26 22:52:40 | 显示全部楼层
QQ截图20140526224835.jpg WaitWire2Fres函数.jpg 读iic函数.jpg
 楼主| 发表于 2014-5-26 22:54:06 | 显示全部楼层
第一个是iic读函数,最后一个是iic写函数
发表于 2014-5-29 08:47:17 | 显示全部楼层
回复 6# Alxander


   对IIC不太懂....
发表于 2014-6-7 11:29:27 | 显示全部楼层
什么意思呀
发表于 2014-8-23 04:29:37 | 显示全部楼层
无线IC学习学习
发表于 2014-8-26 13:46:19 | 显示全部楼层
IIC多老了版主不懂得加油了,那IIS更冷僻了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-29 04:57 , Processed in 0.024628 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表