问答

汇集网友智慧,解决技术难题

21ic问答首页 - 求助:AC7801X芯片I2C通信主机端收到的是从机的NACK

AC I2C通信 ck 芯片 CONFIG

求助:AC7801X芯片I2C通信主机端收到的是从机的NACK

fanchenxinok2021-02-19
本帖最后由 fanchenxinok 于 2021-2-22 09:56 编辑

芯片用的Autochip的AC78013 MCU,现在MCU配置为从机模式,主机是安卓系统的。MCU和安卓系统I2C通信。我从机端参考代码是:ac7801xSampleCode20200729\ac7801xSampleCode20200729\i2c\SampleCode\5 I2C_Slave_DMA\I2C_Slave\User下的i2c.c。目前主机和从机通信是没问题的 主机发送的命令我从机都能收到,
但是主机那边发送完命令却没收到从机的ACK,会报错。请问是我从机这边配置有问题吗?配置都是直接从参考代码复制过来的。
void UTILS_I2cInit(I2C_Type *pI2cInst, I2C_ModeType mode, uint16_t slaveAddr)
{
        I2C_ConfigType i2cConfig;
        
        /*清零结构体变量.*/
        memset(&i2cConfig, 0x00, sizeof(i2cConfig));
        
        /*无论是主机还是从机模式都需要配置的参数.*/
        i2cConfig.mode                                = mode;/*设置主从机模式.*/
        i2cConfig.extAddrEn                        = DISABLE;/*10bit扩展地址禁能.*/
        i2cConfig.dmaRxEn                        = DISABLE;/*设置DMA接收数据.*/
        i2cConfig.dmaTxEn                        = DISABLE;/*设置DMA发送数据.*/
        i2cConfig.interruptEn                = DISABLE;/*I2C中断,BND/SAMF/ARBLOST.*/
        i2cConfig.nackInterruptEn        = DISABLE;/*NACK中断.*/
        i2cConfig.ssInterruptEn                = DISABLE;/*总线start或stop中断.*/
        i2cConfig.i2cEn                                = ENABLE;/*使能模块.*/
        i2cConfig.callBack                        = NULL;/*中断回调函数.*/
        
        /*主机模式需要配置的参数,配置成从机模式可忽略.*/
        /* Fscl = Fbclk / (((SAMPLE_CNT_DIV+1) * (STEP_CNT_DIV+1))*2) */
        i2cConfig.masterConfig.sampleCnt = 4;/*设置波特率为100Kbps,bandrate=(24M/(5*6*2))=400Kbps.*/
        i2cConfig.masterConfig.stepCnt         = 5;
        i2cConfig.masterConfig.ARBEn          = ENABLE;/*设置主机仲裁功能.*/
        i2cConfig.masterConfig.SYNCEn         = ENABLE;/*设置主机SCL同步功能.*/
        
        /*从机模式需要配置的参数,配置成主机模式可忽略.*/
        i2cConfig.slaveConfig.slaveAddr                 = slaveAddr;/*从机地址.*/
        i2cConfig.slaveConfig.slaveRangeAddr = 0;/*从机范围地址.*/
        i2cConfig.slaveConfig.glitchFilterCnt= 0;/*毛刺过滤.*/
        i2cConfig.slaveConfig.stretchEn                 = ENABLE;/*从机SCL延伸功能.*/
        i2cConfig.slaveConfig.rangeAddrEn         = DISABLE;/*禁能范围地址.*/
        i2cConfig.slaveConfig.monitorEn                 = DISABLE;/*禁能从机监测功能.*/
        i2cConfig.slaveConfig.generalCallEn         = DISABLE;/*从机SCL广播地址.*/
        i2cConfig.slaveConfig.wakeupEn                 = DISABLE;/*唤醒功能,仅从机时有效.*/
        i2cConfig.slaveConfig.rxOFInterruptEn        = DISABLE;/*接收缓存溢出中断.*/
        i2cConfig.slaveConfig.txUFInterruptEn        = DISABLE;/*发送缓存溢出中断.*/

        I2C_Init(pI2cInst, &i2cConfig);
}
有大神可以指导下吗



回答 +关注 17
1872人浏览 1人回答问题 分享 举报
1 个回答

您需要登录后才可以回复 登录 | 注册