21ic问答首页 - 求助:AC7801X芯片I2C通信主机端收到的是从机的NACK
求助: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);
}
有大神可以指导下吗
芯片用的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);
}
有大神可以指导下吗
赞0
评论
2021-03-01
您需要登录后才可以回复 登录 | 注册