u8 sccb_read(u8 IdAddr, u8 SubAddr) { u8 data; down(&bus_lock); sccb_start(); sccb_write_byte(IdAddr); sccb_write_byte(SubAddr); sccb_stop(); sccb_start(); sccb_write_byte(IdAddr|0x01); data = sccb_read_byte(); sccb_stop(); up(&bus_lock); return data; }
/** * @brief 读取一串数据 * @param pBuffer 存放读出数据 * @param ReadAddress 待读出地址 * @retval 1:成功读入 * 2:失败 */ int sccb_read_byte(uint8_t* pBuffer, uint16_t length, uint8_t ReadAddress) { if(!sccb_start()) { return DISABLE; } sccb_send_byte( DEV_ADR ); /* 器件地址 */ if( !sccb_wait_ack() ) { sccb_stop(); return DISABLE; } sccb_send_byte( ReadAddress ); /* 设置低起始地址 */ sccb_wait_ack(); sccb_stop(); if(!sccb_start()) { return DISABLE; } sccb_send_byte( DEV_ADR + 1 ); /* 器件地址 */ if(!sccb_wait_ack()) { sccb_stop(); return DISABLE; } while(length) { *pBuffer = sccb_receive_byte(); if(length == 1) { sccb_no_ack(); } else { sccb_ack(); } pBuffer++; length--; } sccb_stop(); return ENABLE; }
void sccb_write(u8 IdAddr, u8 SubAddr, u8 data) { down(&bus_lock); sccb_start(); sccb_write_byte(IdAddr); sccb_write_byte(SubAddr); sccb_write_byte(data); sccb_stop(); up (&bus_lock); }
/** * @brief 写一字节数据 * @param WriteAddress 待写入地址 * @param SendByte 待写入数据 * @retval 无 */ int sccb_write_byte( uint16_t WriteAddress , uint8_t SendByte ) { if(!sccb_start()) { return DISABLE; } sccb_send_byte( DEV_ADR ); /* 器件地址 */ if( !sccb_wait_ack() ) { sccb_stop(); return DISABLE; } sccb_send_byte((uint8_t)(WriteAddress & 0x00FF)); /* 设置低起始地址 */ sccb_wait_ack(); sccb_send_byte(SendByte); sccb_wait_ack(); sccb_stop(); return ENABLE; }