I2C介面協議之HT16C22驅動

2021-09-13 09:42:20 字數 1989 閱讀 2856

之前工作中使用了一些常見的介面協議,為了防止遺忘和加深記憶,後續會陸陸續續講解分析各種常見的介面協議(如:i2c、spi、usart等)。由於最近專案需求,需要使用ht16c22液晶驅動晶元,而這款晶元和mcu通訊使用的是i2c介面,所以本文首先以ht16c22入手,分析i2c介面協議。

對於初學者你是不是也有這種疑惑,這些常見介面協議看那些協議的資料總是雲裡霧裡,不知所云,看了就忘。本人剛學也有這種困惑,為了解決這種現狀你必須得實際動手去實踐,在實踐中摸索分析才能真正理解。

你可能需要的兩個最基本的概念:

起始訊號:當 scl 線是高電平時 sda 線從高電平向低電平切換。 

停止訊號:當 scl 線是高電平時 sda 線由低電平向高電平切換。

2.1  起始訊號**

//產生iic起始訊號

void iic_start(void)

2.2  停止訊號**

//產生iic停止訊號

void iic_stop(void)

2.3  cpu產生乙個ack訊號

//等待應答訊號到來

//返回值:1,接收應答失敗

// 0,接收應答成功

uint8_t iic_wait_ack(void)

} iic_scl=0;//時鐘輸出0

return 0;

}

2.4  cpu向i2c匯流排裝置傳送乙個位元組(8bit)資料

//iic傳送乙個位元組

//返回從機有無應答

//1,有應答

//0,無應答

void iic_send_byte(uint8_t txd)

else iic_sda=0;

txd<<=1;

delay_us(2);

iic_scl=1;

delay_us(2);

iic_scl=0;

delay_us(2);

} }

除了以上幾個基本函式外,還有幾個常用函式在這裡由於不參與分析就不列舉了。 在以上幾個函式的基礎上,我們再來具體分析ht16c22的初始化過程。 

首先用示波器抓取ht16c22初始化過程的波形曲線:

//ht16c22初始化

void ht16c22_init(void)

我們可以把上面這個過程拆分為10個階段 。

①  起始空閒階段。

這個階段中scl和sda都處於高電平;

②起始訊號(mcu開始往ht16c22傳送資料)

這個階段中,scl保持高電平不變,而sda由高電平跳變至低電平;

③傳送ht16c22的器件位址和i2c寫資料指令

在這個階段中,scl每次跳變至高電平時,會將sda資料傳送給ht16c22。從圖中可以看出發給ht16c22的資料為01111110。其中第一位至七位為ht16c22器件位址(0x7e),第一位為0表示:寫資料指令。

④等待返回ack

這個階段中,mcu等待ht16c22返回低電平表示資料接收成功。

⑤傳送0x8c

這個階段將資料0x8c傳送給ht16c22,至於為什麼是0x8c感興趣可以翻看ht16c22手冊。

⑥等待返回ack

同第④⑦傳送0xc0

這個階段將資料0xc0傳送給ht16c22,至於為什麼是0xc0感興趣可以翻看ht16c22手冊。

⑧等待返回ack

同第④⑨結束訊號

這個階段中,scl保持高電平不變,而sda由低電平跳變至高電平;

⑩空閒階段

此階段同起始空閒階段;

自此,ht16c22初始化資料成功被mcu傳送給ht16c22。

協議理解之I2C協議

協議我們參考 eeprom 24c64的datasheet 速度 標準模式下可以達到100kbit s 快速模式下可以達到400kbit s 高速模式下可以達到3.4mbit s i2c匯流排術語 傳送器 傳送資料到匯流排的器件 接收器 從匯流排接收資料的器件 主機 初始化傳送 產生時鐘訊號和終止傳...

I2C協議解析

1 基本概念 主機 初始化傳送,產生時鐘訊號和終止傳送的器件 從機 被主機定址的器件 傳送器 傳送資料到匯流排的器件 接收器 從匯流排接收資料的器件 多主機 同時有多於乙個主機嘗試控制匯流排 但不破壞報文 仲裁 是乙個在有多個主機同時嘗試控制匯流排,但只允許其中乙個控制匯流排並使報文不被破壞的過程 ...

i2c 協議解析

1 基本概念 主機 初始化傳送,產生時鐘訊號和終止傳送的器件 從機 被主機定址的器件 傳送器 傳送資料到匯流排的器件 接收器 從匯流排接收資料的器件 多主機 同時有多於乙個主機嘗試控制匯流排 但不破壞報文 仲裁 是乙個在有多個主機同時嘗試控制匯流排,但只允許其中乙個控制匯流排並使報文不被破壞的過程 ...