AT24XX EEPROM讀寫分析

2021-09-27 09:53:31 字數 1419 閱讀 2170

1不同容量的at24xx分析

1.1 at24c01~at21c16,容量分別是128,256,512,1024,2048個位元組,頁長度分別是8,8,16,16,16讀寫都是先發裝置位址,然後發乙個位元組的位元組位址

它們的裝置位址如下所示:

1.2 at24c32-at24c64,容量分別是4096,8192個位元組,頁長度分別是32,32位元組,讀寫都是先發裝置位址,然後發乙個位元組的高位址,再發乙個位元組的低位址

它們的裝置位址如下所示:

1.3 at24c128~at24c512容量分別是16384,32768個位元組,頁長度分別是64,64,128位元組,讀寫都是先發裝置位址,然後發乙個位元組的高位址,再發乙個位元組的低位址,它們的裝置位址如下所示:

2 **分析

//在at24cxx指定位址讀出乙個資料

//readaddr:開始讀數的位址

//返回值 :讀到的資料

u8 at24cxx_readonebyte(u16 readaddr)

else iic_send_byte(0xa0+((readaddr/256)<<1)); //傳送器件位址0xa0,寫資料

iic_wait_ack();

iic_send_byte(readaddr%256); //傳送低位址

iic_wait_ack();

iic_start();

iic_send_byte(0xa1); //進入接收模式

iic_wait_ack();

temp=iic_read_byte(0);

iic_stop();//產生乙個停止條件

return temp;

}//在at24cxx指定位址寫入乙個資料

//writeaddr :寫入資料的目的位址

//datatowrite:要寫入的資料

void at24cxx_writeonebyte(u16 writeaddr,u8 datatowrite)

else

iic_wait_ack();

iic_send_byte(writeaddr%256); //傳送低位址

iic_wait_ack();

iic_send_byte(datatowrite); //傳送位元組

iic_wait_ack();

iic_stop();//產生乙個停止條件

hal_delay(10);

}3.最後注意多位元組跨頁的讀寫問題

(P24)管道 管道的讀寫規則

當要寫入的資料量小於等於pipe buf,linux將保證寫入的原子性 原子性 假設a程序和b程序都要向管道寫入資料,a程序寫入的資料量小於等於pipe buf,則a程序寫入的資料是連續的,中間並不會插入b程序寫入的資料,man 7 pipe看pipe buf 否則多個程序往管道寫入資料,可能會出現...

2 4 朋友圈 25 分

某學校有n個學生,形成m個俱樂部。每個俱樂部裡的學生有著一定相似的興趣愛好,形成乙個朋友圈。乙個學生可以同時屬於若干個不同的俱樂部。根據 我的朋友的朋友也是我的朋友 這個推論可以得出,如果a和b是朋友,且b和c是朋友,則a和c也是朋友。請編寫程式計算最大朋友圈中有多少人。輸入格式 輸入的第一行包含兩...

2 4 分割鍊錶

template typename t singlylinkednode partition singlylinkednode head,t partition singlylinkednode newhead head singlylinkednode newtail head singlylin...