

读取和写入的逻辑分析仪波形如上图
代码如下
void QMC5883_Write (u8 addr,  u8 data) 
{
tls_i2c_write_byte (QMC5883_SlaveAddress,  1) ; 
tls_i2c_wait_ack () ; 
tls_i2c_write_byte (addr,  0) ; 
tls_i2c_wait_ack () ; 
tls_i2c_write_byte (data,  0) ; 
tls_i2c_wait_ack () ; 
 tls_i2c_stop () ; 
}
u8 QMC5883_Read_Byte (u8 addr) 
{
uint8_t data; 
tls_i2c_write_byte (QMC5883_SlaveAddress,  1) ; 
tls_i2c_wait_ack () ; 
tls_i2c_write_byte (addr,  0) ; 
tls_i2c_wait_ack () ; 
tls_i2c_write_byte (QMC5883_SlaveAddress+1,  0) ; 
tls_i2c_wait_ack () ; 
data = tls_i2c_read_byte (0,  1) ; 
return data; 
}
写入可以正常产生停止位,  但是读取无法产生,  使用的是 w800 的最新库函数.