兴 姚

MKV30F64VFM10的IIC外设使用异常

Discussion created by 兴 姚 on Feb 18, 2019
Latest reply on Feb 21, 2019 by 兴 姚

   如题所用的芯片,主频配置为80M,IIC外设外挂的EEPROM器件型号为MicroChip公司的24LC64,配置IIC模块波特率为100K。当启动写命令时,无法接收到EERPOM器件回发的ACK信号,观察示波器上SCL和SDA波形,看起来是IIC模块在发送完控制字节后,第9个时钟时还没有释放SDA信号线,导致EEPROM器件回发ACK时在SDA线上出现冲突,如下图所示:

配置使用的库函数为:  I2C_MasterInit(I2C_0_PERIPHERAL, &I2C_0_config, CLOCK_GetFreq(I2C_0_CLKSRC));

其中I2C_0_config的定义如下:

const i2c_master_config_t I2C_0_config = {
.enableMaster = true,
.enableStopHold = false,
.baudRate_Bps = 100000,
.glitchFilterWidth = 0
};

启动发送命令时调用的库函数如下:

IIC_Master_transfer.slaveAddress = 0x50; //Eeprom设备地址,配置时会左移一位,最低位指示是读还是写
IIC_Master_transfer.direction = kI2C_Write;
IIC_Master_transfer.subaddress = iicaddr; //数据地址
IIC_Master_transfer.subaddressSize = 2; //数据地址字节长度
IIC_Master_transfer.data = pdata; //发送数据结构体
IIC_Master_transfer.dataSize = datasize; //发送数据长度
IIC_Master_transfer.flags = kI2C_TransferDefaultFlag;


I2C_MasterTransferNonBlocking(I2C_0_PERIPHERAL, &IIC_Master_Handle, &IIC_Master_transfer);

使用的iic库函数文件如附件所示,我想问是我配置哪里还有问题,导致无法接受到ACK信号吗

Attachments

Outcomes