/**@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引腳接高...