1. 程式人生 > >SN7325多功能IO擴充套件驅動器學習

SN7325多功能IO擴充套件驅動器學習

1.1SN7325概述

SN7325是一種2線序列介面的外設,它有16個I/O埠的,這16個埠劃分為8個推輓I/O埠和8個開漏I/O埠。這16個I/O埠中的任何一個都可以配置為輸入或是輸出。所有I/O埠被配置為輸入,可以用來不間斷檢測埠的電平狀態變化,當狀態變化時可以通過INT輸出埠來捕獲到。

 

開漏埠在0.26V的時候吸收電流的能力達到20mA,能夠驅動LEDs。RST輸入引腳能夠清除序列介面、停止任何對SN7325的I2C讀寫動作。SN7325有兩個地址輸入埠,從而決定了可以通過I2C匯流排掛載4個SN7325從裝置,同時,SN7325地址也決定了I/O埠的上電邏輯(也就是上電後預設的電平狀態)。

 

1.2推輓I/O、開漏I/O和高阻態

⑴推輓I/O

可以獨立輸出高低電平,輸出低電平時接地,輸出高電平時輸出的是IC的電源電源,見SN7325資料手冊中推輓I/O的設計功能圖:

圖2

圖2中,當output(注意了,這裡的output是內部的,不是圖5的output)為0時,下面N型MOSFET的柵極和源極形成的PN接面截止,這樣漏極和源極斷開,而上面P型MOSFET的柵極和源極形成的PN接面導通,這樣漏極和源極閉合,所以輸出高電平;當output為1時,下面N型MOSFET的柵極和源極形成的PN接面導通,這樣漏極和源極閉合,而上面P型MOSFET的柵極和源極形成的PN接面截止,這樣漏極和源極斷開,所以輸出低電平。

 

⑵開漏I/O

開漏中的“漏”指MOS FET(MOS場效電晶體)中的漏極,開漏I/O是指以MOS FET的漏極作為輸入/輸出的引腳,可輸出低電平和高阻態(Hi-Z),如要輸出高電平,則需要外部上拉電阻接到電源端,見SN7325資料手冊中推輓I/O的設計功能圖:

圖3

圖3中,當output為0時, N型MOSFET的柵極和源極形成的PN接面截止,這樣漏極和源極斷開,因為外部接了上拉電阻,所以輸出高電平;當output為1時,N型MOSFET的柵極和源極形成的PN接面導通,這樣漏極和源極閉合,所以輸出低電平。

 

⑶高阻態

指的是電路的一種輸出狀態,既不是高電平也不是低電平,如果高阻態再輸入下一級電路的話,對下級電路無任何影響,和沒接一樣,如果用萬用表測的話有可能是高電平也有可能是低電平,隨它後面接的電路來定。

我們在電路分析時高阻態可做開路理解,也就是可以把它看作輸出(輸入)電阻非常大。它的極限可以認為懸空。也就是說理論上高阻態不是懸空,它是對地或對電源電阻極大的狀態,而實際應用上與引腳的懸空幾乎是一樣的。

當閘電路的輸出上拉管導通而下拉管截止時,輸出為高電平;反之就是低電平;如上拉管和下拉管都截止時,輸出端就相當於浮空(沒有電流流動),其電平隨外部電平高低而定,即該閘電路放棄對輸出端電路的控制 。

 

1.3SN7325上電I/O埠預設的電平邏輯

圖4

圖4中AD1和AD0電平的狀態是由硬體上的設計來決定的,所以可以根據I/O口的需要的功能及電平來設計AD1和AD0,假如要讓PP[7:0]輸出低電平,就要對暫存器0x03設定的值為0x0,要讓PP[7:0]輸出高電平,就要對暫存器0x03設定的值為0xFF;同樣的道理,要讓OD[7:0]輸出低電平,就要對暫存器0x03設定的值為0x0,要讓OD[7:0]輸出高阻態,就要對暫存器0x03設定的值為0xFF

 

 

圖1

 

1.4SN7325的命令位元組暫存器

圖5

SN7325有4種暫存器,分別為輸入暫存器、輸出暫存器、埠配置暫存器和埠中斷控制暫存器,下面來說明這些暫存器的功能:

⑴埠配置暫存器

由圖5可知命令位元組地址為0x04和0x05暫存器分別用於配置埠A(OD0到OD7)和埠B(PP0到PP7)的功能,舉個例子,此暫存器類似於S3C2451的GPDCON暫存器,用於配置I/O的功能的。上電後由圖5可知其預設值為0x00,這裡0表示對應的埠為輸出引腳,而1表示對應的埠為輸入引腳,由此可知,SN7325上電後預設為把0D[7:0]和PP[7:0]配置為輸出埠。

 

⑵輸入暫存器

由圖5可知命令位元組地址為0x00和0x01暫存器分別是埠A(0D[7:0])和埠B(PP[7:0])的輸入暫存器,通過這兩個暫存器可以讀取0D[7:0]和PP[7:0]的狀態

 

⑶輸出暫存器

由圖5可知命令位元組地址為0x02和0x03暫存器分別是埠A(0D[7:0])和埠B(PP[7:0])的輸出暫存器,通過對這兩個暫存器寫對應的值來讓0D[7:0]和PP[7:0]輸出想要的高低電平。

 

⑷埠中斷控制暫存器

在I/O埠作為輸入的時候,中斷控制暫存器控制了I/O埠的中斷功能,設定地址為0x06和0x07暫存器相應位為0,表示使能對應埠的中斷功能,設定為1則是禁用對應埠的中斷功能。

 

1.5Initial Power-Up

在對SN7325上電的時候,轉變檢測(transition detection)邏輯和INT被複位,上電後I/O口預設的狀態取決於I2C從地址選擇輸入引腳AD1和AD0的狀態,見圖4。

1.6Power-On Reset

SN7325包含一個內建的上電覆位電路(POR),可確保所有的暫存器在上電是復位到可知的狀態。當VCC電壓高於VPOR(最大為2.3V)時,POR電路釋放所有的暫存器和使SCL及SDA處於正常操作的狀態。當VCC電壓低於VPOR時,SN7325復位所有暫存器的內容為POR預設值。

1.7RST輸入引腳

RST輸入低電平可是任何涉及SN7325的互動無效,迫使SN7325進入I2C停止狀態,但復位不會影響中斷INT的輸出。

1.8待機模式

當序列線空閒的時候,也就是SDA和SLC為邏輯高的時候,SN7325自動進入待機模式(standby mode),降低供電電流以節省功耗。

1.9Serial Addressing(序列處理)

SN7325作為一個從裝置,它通過SCL與SDA傳送和接受資料。相對於從裝置SN7325來說,我們系統的主裝置是處理器S3C2451,處理器發起所有傳送往或是從SN7325傳送過來的資料傳輸,並且產生SLC時鐘來同步資料的傳輸。

 

SDA作為輸入和開漏輸出埠,它需要一個典型值為4.7K的上拉電阻,SLC只能作為輸入,如果有多個主裝置掛載在這2線介面上,或是在一個單主裝置的系統中,且SCL是主裝置的開漏輸出引腳,那麼這兩種情況下SCL需要一個典型值為4.7K的上拉電阻。每次傳輸由主裝置發起的START條件、7位SN7325從地址及R/W(讀/寫)位、一個或是多個數據位元組和STOP條件組成,見下圖

 

圖6

 

1.10    START and STOP Conditions

在SCL和SDA保持在邏輯高的時候表示序列介面處於空閒狀態,主裝置通過使SDA從高到低且SLC為高來產生一個開始條件,在主裝置完成和從裝置的通訊後,通過使SDA從低到高且SCL為低來產生一個結束條件,這樣匯流排被釋放,為下次資料傳輸做好準備。

1.11    Bit Transfer

SCL每個時鐘脈衝同步一個數據位的傳輸,在SCL為高電平的時候在SDA上的資料必須保持穩定才能被有效傳輸,見下面的時序圖:

1.12    Slave Address

SN7325有一個7位的從地址,緊接著的第8位是讀/寫位,此位為0表示向SN7325一個寫命令,此位為1表示一個讀命令。一個完成的從地址格式如下:

圖8

1.13    Data Bus Transaction(資料匯流排事務)

在一次寫操作中,最開始的是主裝置通過產生開始位來開始傳輸,然後是8位從設定地址,接著的第一個位元組就是命令位元組(比如0x02),其中命令位元組用於決定向暫存器(地址為0x02的暫存器)寫資料或是從指定的暫存器讀取資料。也就是再接著的就是要寫入暫存器的資料,見下圖:

圖9

 

1.14    Acknowledge(應答)

SN7325每接收到一個位元組的資料,在SCL的第9個時鐘脈衝時傳送應答位表示接收到一個位元組的資料,也就是說每個位元組的有效傳輸需要9位。主裝置產生第9個時鐘脈衝,接收裝置在應答時鐘脈衝(也就是第9個時鐘脈衝)時通過拉低SDA來應答,移植以表示成功接收到此位元組資料,所以說如果應答的是邏輯高,那麼就表示接收裝置沒有成功接收到此位元組資料,要麼是因為地址不對,要麼就是其他原因了。

這裡處理器S3C2451是主裝置,SN7325是從裝置,當主裝置傳送資料給SN7325時,由SN7325產生應答位;如果SN7325傳送資料給主裝置,那麼主裝置要產生應答位。

 

1.15    Writing to Port Registers(向埠暫存器寫資料)

見1.13的描述

1.16    Reading Port Registers(讀取埠暫存器)

 

圖10

為了從SN7325中讀取暫存器資料,I2C匯流排的主裝置必須先發送SN7325的地址和讀寫位(讀時為1),接著是決定了被訪問暫存器的命令位元組資料(比如要讀取0x01暫存器的值,這裡的命令位元組資料就為0x01),然後就是暫存器的值。

 

SN7325在收到從地址後產生應答位,並且在應答位的這個時鐘脈衝的時候插入INT訊號,這是新的快照資料就是當前傳送給主裝置的埠資料,所以在資料傳送的時候如果埠狀態改變,就可以檢測到。當主裝置從SN7325讀取一個位元組後緊接著產生一個停止條件,然後SN7325傳送當前的埠資料,並且清除變化的flag與reset跳變檢測。