一、硬件电路
设备地址
二、使用步骤
static int ATC02I2CWrite(uint8_t *pdata,uint16_t length){
HAL_StatusTypeDef status = HAL_I2C_Master_Transmit(&hi2c1, (0x50<<1), pdata, length, 0xFF);
if(status != ESUCCESS){
return -EIO;
}
return ESUCCESS;
}
static int ATC02I2CRead(uint8_t *pdata,uint16_t length){
HAL_StatusTypeDef status = HAL_I2C_Master_Receive(&hi2c1, (0x50<<1), pdata, length, 0xFF);
if(status != ESUCCESS){
return -EIO;
}
return ESUCCESS;
}
字节写:
static int ByteWrite(uint8_t addr,uint8_t pdata){
uint8_t data[2] = {addr,pdata};
int ret = ATC02I2CWrite(data,2);
if(ret != ESUCCESS){
return -EIO;
}
osDelay(5);
return ESUCCESS;
}
页写入:
static int PageWrite(uint8_t addr,uint8_t *pdata,uint8_t length){
uint8_t data[9] = {addr};
memcpy(&data[1],pdata,length);
int ret = ATC02I2CWrite(data,length+1);
if(ret != ESUCCESS){
return -EIO;
}
return ESUCCESS;
}
任意写:
static int ATC02Write(uint8_t addr,uint8_t *pdata,uint16_t length){
uint8_t pages = (length + addr%ATC02_PAGE_SIZE)/ATC02_PAGE_SIZE+1;
int ret = 0;
if(pages == 1){
ret = PageWrite(addr,pdata,length);
if(ret != ESUCCESS){
return -EIO;
}
}else{
uint8_t firstWriteByte = ATC02_PAGE_SIZE - addr%ATC02_PAGE_SIZE;
if(firstWriteByte != 0){
ret = PageWrite(addr,pdata,firstWriteByte);
if(ret != ESUCCESS){
return -EIO;
}
addr = addr + firstWriteByte;
pdata = pdata + firstWriteByte;
length = length - firstWriteByte;
}
uint8_t length1 = 0;
while(length){
if(length > ATC02_PAGE_SIZE){
length1 = 8;
}else{
length1 = length;
}
ret = PageWrite(addr,pdata,length1);
if(ret != ESUCCESS){
return -EIO;
}
addr = addr + length1;
pdata = pdata + length1;
length = length - length1;
}
}
return ESUCCESS;
}
任意读:
static int ATC02Read(uint8_t addr,uint8_t *pdata,uint16_t length){
int ret = ATC02I2CWrite(&addr,1);
if(ret != ESUCCESS){
return -EIO;
}
ret = ATC02I2CRead(pdata,length);
if(ret != ESUCCESS){
return -EIO;
}
return ESUCCESS;
}