PIC I2C&SPI 读数交替对错,大侠解惑!

2020-02-09 09:36发布

目的:做一个小小的记录器,用I2C读取IC的资料(Sample_bat();)放到0x40~0x5F中,然后通过SPI放到M25P128中(Record_bat();)。

现象: I2C读取IC的资料总是出现一个对,一个错,交替重复出现(SPI写没有问题) 。但如果用I2C只读取,不写FLASH的话,那么I2C读取就没有问题

      如下,第一次Sample_bat();正确,经过Record_bat();不正常 ,然后又正常,再又不正常,很郁闷,用PROTEUS仿真没有问题。

void Scan_battery(void)
{
        //clear the status flag
        Bat_Flag=0;               

        //sample the parameters               
        Sample_bat();

          //recorde the parameters( write the parameter to flash)
        curaddress=GetFlashAddress();
        Record_bat();                                        //record 16 bytes

        StoreFlashAddress(curaddress+16);

}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
portx
1楼-- · 2020-02-09 09:41
回复【楼主位】longzixin168
-----------------------------------------------------------------------

注意一下I2C的存储器一般是要求写指令后需要等待一段时间的,大约写一个字节需要延时5mS的时间。也许你的写指令可能没有考虑到这个延时。
longzixin168
2楼-- · 2020-02-09 14:17
回复【1楼】portx 腾飞
-----------------------------------------------------------------------

我在Sample_bat()中有考慮,事實上,即使加兩個__delay_ms(60);在後面也沒有用,不解呀! 沒辦法,隻用有兩個 Sample_bat()來了,試了下,好像是沒有問題,便不能保証中間不會出什麼錯,今天沒有時間搞它,昨天把我鬱悶得不行呀,仿真,分析時序都沒有問題,硬件沒有用SCOP看,其他的同事在用,本是想來看看的,現在還是沒有想明白,即便是幹擾也不可能,錯的數據都是一樣的,懷疑是不是指針用得有問題,還是很鬱悶!

一周热门 更多>