SMBus 求助

2020-01-30 13:37发布

if((SMB0DAT&0xFE) == (SLAVE_ADDR&0xFE)) // Decode address
{                          // If the received address matches,
    ACK = 1;                // ACK the received slave address
    if((SMB0DAT&0x01) == READ) // If the transfer is a master READ,
    {
          //SMB0DAT = SMB_DATA_OUT[sent_byte_counter-1];
          //sent_byte_counter++;
         //SMB0DAT = 0x77;
        
         SMB0DAT = FLASH_ByteRead((FLADDR)(FLASH_LOW_ADDRESS + address));   
        address++;
    }else
    {
          data_flag = 0;
    }
}
else                           // If received slave address does not
{                              // match,
        ACK = 0;                // NACK received address
}


这是SMBus中断里面一部分代码。如果我使用红 {MOD}部分代码,程序可以正常运行出正确结果;如果使用蓝 {MOD}代码,在中断读flash内容,再赋值给SMBus的数值寄存器就不行。
我判断是读flash时间太长,请问各位高手,这里该怎样决解这个问题。

前提:我使用具有SMBus接口的MCU作为I2C次设备,把接收的数据存在MCU的片内flash中!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
吴绍昂
1楼-- · 2020-01-31 07:02
wmm20031015 发表于 2013-5-3 10:41
FLASH按页读取、写入,如果没有时间响应SMBUS,把SCL拉低,SMBUS的上位机会自动等待直到超时 ...

把SCL拉低????
你是说,由次设备(F336==下位机)把SCL拉低吗?
有空试试!
吴绍昂
2楼-- · 2020-01-31 08:19
wmm20031015 发表于 2013-5-3 10:41
FLASH按页读取、写入,如果没有时间响应SMBUS,把SCL拉低,SMBUS的上位机会自动等待直到超时 ...

如果是读情况!也可以把SCL拉低,等待次设备把flash的内容读到SMB0DAT寄存器,再把SCL拉高?
wmm20031015
3楼-- · 2020-01-31 13:45
 精彩回答 2  元偷偷看……

一周热门 更多>