正在跟着课程学习I2C通信协议,已完成一个数据写入,目标是写入一个数据后读取一个数据。
写代码的时候设置了错误代码。(错误代码6)
检查了一下,发现写入数据成功了,即写入时序完成,读取失败。
读取的时序与写入的时序是有区别的:写入的话,通信一次即可完成,即32作为发送设备,发送一次数据;读取操作,32要先作为发送设备,发送一次设备内需要读取数据的地址,再作为接收者,接收一次数据,通讯结束。
这次错误代码的位置是在,写入操作完成后,开始读取时序,开始发送设备内需要读取数据的地址,这个时候设备未响应。
老师分析,这是因为写入时序完成后,32这边完事了,但是EEPROM那边还没结束操作,当时正忙,所以读取时序开始,32发送设备地址后,EEPROM未响应。
解决方法:思路是等EEPROM完成当前的操作,所以写一个循环,重复发送I2C起始信号、等待响应、发送设备内地址,这个操作,如果EEPROM响应了,那就说明EEPROM完成了当前的操作,就可以开始读取操作了。