AT24C02驅動程式

2021-08-04 03:55:45 字數 3785 閱讀 6423

/**@brief i2c匯流排延時

**@param /

**@return /

**@note /

*/static void dev_eep_i2c_delay(void)

/**@brief i2c開始訊號

**@param /

**@return /

**@note scl高電平期間,sda乙個下降沿

* _________________

* scl:

* ______

* sda: \__________

*/static void dev_eep_i2c_start(void)

/**@brief i2c結束訊號

**@param /

**@return /

**@note scl高電平期間,sda乙個上公升沿。空閒狀態:scl、sda為高電平

* ________________

* scl:

* ________

* sda: ______/

*/static void dev_eep_i2c_stop(void)

/**@brief i2c應答訊號

**@param /

**@return /

**@note 第9個時鐘週期,sda拉低。主機向從機傳送

*/static void dev_eep_i2c_ack(void)

/**@brief i2c無應答訊號

**@param /

**@return /

**@note 第9個時鐘週期,sda拉高。主機向從機傳送

*/static void dev_eep_i2c_noack(void)

/**@brief i2c等待從機應答訊號

**@param /

**@return true - 有應答, false - 無應答

**@note 第9個時鐘週期,從機將sda拉低。從機向主機傳送

*/static bool dev_eep_i2c_waitack(void)

else

scl_low;

sda_out_mode;

return ret;}/*

*@brief 寫1位元組

**@param data - 待寫入位元組

**@return /

**@note scl為低電平時,改變sda

*/static void dev_eep_i2c_write_byte(u8 data)}/*

*@brief 讀1位元組

**@param /

**@return 讀取位元組

**@note scl為高電平時,鎖定sda

*/static u8 dev_eep_i2c_read_byte(void)

sda_out_mode;

return data;}/*

*@brief 寫多位元組(無法跨頁)

**@param addr - 位址

*@param p_buf - 資料指標

*@param len - 待寫入位元組長度

**@return true - 寫入成功; false - 寫入失敗

**@note 每寫一頁需要延時5ms,保證資料正確寫入。at24c02一次最多寫入8位元組

*/bool dev_eep_i2c_write_multibytes(u16 addr, u8 *p_buf, u16 len)

dev_eep_i2c_write_byte(addr % 256);

if(false == dev_eep_i2c_waitack())

for(i = 0; i < len; i ++)

}dev_eep_i2c_stop();

dev_mcu_delay_ms(5);

return true;}/*

*@brief 讀多位元組

**@param addr - 位址

*@param p_buf - 資料指標

*@param len - 待讀取位元組長度

**@return true - 寫入成功; false - 寫入失敗

**@note /

*/bool dev_eep_i2c_read_multibytes(u16 addr, u8 *p_buf, u16 len)

dev_eep_i2c_write_byte(addr % 256);

if(false == dev_eep_i2c_waitack())

dev_eep_i2c_start();

dev_eep_i2c_write_byte(device_address | ((addr / 256) << 1) | 0x01);

if(false == dev_eep_i2c_waitack())

for(i = 0; i < len; i ++)

dev_eep_i2c_stop();

return true;}/*

*@brief 寫資料(可跨頁)

**@param addr - 位址

*@param p_data- 資料指標

*@param len - 資料長度

**@return /

**@note /

*/void dev_eeprom_write_data(u32 addr, u8 *p_data, u32 len)}/*

*@brief 讀資料(可跨頁)

**@param addr - 位址

*@param p_data- 資料指標

*@param len - 資料長度

**@return /

**@note /

*/void dev_eeprom_read_data(u32 addr, u8 *p_data, u32 len)

AT24C02的知識總結

這週做清除報警記錄功能,所使用的儲存器晶元是at24c02,下面介紹at24c02使用的幾點關鍵點 1.at24c02寫資料和讀資料都是乙個位元組 8位 讀2個位元組 16位 會出錯,看下面datasheet 2.at24c02有2k的儲存容量,2k 2 1024 2048個位元組 所以最多可以往a...

51微控制器之AT24C02

引腳介紹 a0,a1,a2是位址的程式設計位。wp為寫保護輸入端。當其為低電平的時候,可以對整個儲存器進行正常的讀寫操作 當為高電平的時候,儲存器具有寫保護功能,但是仍然可以從中讀資料 scl,sda就是時鐘線和資料線 儲存結構與定址 儲存容量為2k位,即2000bit,256個位元組,256b。有...

AT24C02斷電儲存,資料寫入(rct6)

at24c02的儲存容量為2k bit,內容分成32頁,每頁8byte,共256byte,操作時有兩種定址方式 晶元定址和片內子位址定址。1 晶元定址 at24c02的晶元位址為1010,其位址控制字格式為1010a2a1a0r w。其中a2,a1,a0可程式設計位址選擇位。a2,a1,a0引腳接高...