MKV30F64VFM10的IIC外设使用异常

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

MKV30F64VFM10的IIC外设使用异常

973 Views
yaoXin
Contributor II

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

pastedImage_1.png

配置使用的库函数为:  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信号吗

Tags (1)
0 Kudos
2 Replies

652 Views
kerryzhou
NXP TechSupport
NXP TechSupport

楼主你好!

你理解有点问题,其实第9位,主机是会拉高,如果有ACK, 是由从机去拉低的实现ACK的。

所以,你还要查看下你的从机地址,尤其总线上的从机地址是不是你从机设备的地址,另外,我建议你可以放低点波特率测试会看看,比如10K。

还有,你的I2C引脚是否是真开漏,上拉加了多少?


Have a great day,
Kerry

 

-------------------------------------------------------------------------------
Note:
- If this post answers your question, please click the "Mark Correct" button. Thank you!

 

- We are following threads for 7 weeks after the last post, later replies are ignored
Please open a new thread and refer to the closed one, if you have a related question at a later point in time.
-------------------------------------------------------------------------------

0 Kudos

652 Views
yaoXin
Contributor II

确实是引脚没有配置成开漏导致的,目前读写正常了

0 Kudos