本發明涉及基于I2C總線的控制器及通信方法、多控制器間的通信方法,屬于總線通信控制技術領域。
背景技術:
I2C總線協議是由飛利浦公司于20世紀80年代開發的一種“電路板級”的雙線式總線結構,被廣泛應用于電路板間芯片的通信,速率可設定為100kb/s、400kb/s以及3.4Mb/s。
常見的多主機多從機的I2C總線系統結構如圖1所示,在此系統中,主控制器A和主控制器B通過“總線仲裁”的方式搶奪總線的控制權,分時對從屬器件進行讀寫,控制器通過“器件地址”實現對不同從屬器件的讀寫。
為了實現兩個主控制器之間的直接通信,可以額外建立兩線或更多的物理連接,借以串口或其他總線通信協議完成通信,如圖2所示。在這種情況下,每個主控制器都必須額外提供通信接口互連,對一些空間和硬件資源有限的板卡的布局造成了不利。
技術實現要素:
本發明的目的是提供一種基于I2C總線的控制器及通信方法、多控制器間的通信方法,用于解決不同控制器之間依賴硬件來實現通信,造成通信可靠性較差的問題。
為解決上述技術問題,本發明提供了一種基于I2C總線的控制器,該控制器工作于主機模式或者從機模式:
主機模式下:占用I2C總線的控制權;在占用完成后,向總線發出主從轉換的控制命令,該控制命令包含待轉換的從機地址和設定標識信息;之后釋放I2C總線控制權,由主機模式轉為從機模式;
從機模式下:實時監聽I2C總線上的允許本控制器轉為主機模式的主從轉換的控制命令,若收到則由從機模式轉為主機模式。
本發明還提供了一種基于I2C總線的控制器的通信方法,包括:
在主機模式下,占用I2C總線的控制權;在占用完成后,向總線發出主從轉換的控制命令,該控制命令包含待轉換的從機地址和設定標識信息;之后釋放I2C總線控制權,由主機模式轉為從機模式;
在從機模式下,實時監聽I2C總線上的允許本控制器轉為主機模式的主從轉換的控制命令,若收到則由從機模式轉為主機模式。
本發明還提供了一種基于I2C總線的多控制器間的通信方法,包括:
任一時刻,多控制器處于一主機、多從機的控制模式,由主機占用總線;
主機對I2C總線的占用完成后,向其中一個從機寫入主從轉換的控制命令;之后該主機轉入從機模式,該從機轉入主機模式。
本發明的有益效果是:
對于I2C總線上的單控制器,當處于主機模式下時,通過I2C總線與其他處于從機模式下的控制器進行通信;在通信完成后,向下一個處于從機模式下的控制器發送主從轉換的控制命令,之后由主機模式轉為從機模式;當處于在從機模式下時,實時監聽I2C總線上的允許本控制器轉為主機模式的主從轉換的控制命令,若收到該控制命令,由從機模式轉為主機模式。
對于I2C總線上的多個控制器,處于主機模式下的控制器占據I2C總線的控制權,通過I2C總線與其他控制器進行通信,在通信完成后,向下一個處于從機模式下的控制器發送主從轉換的控制命令,之后由主機模式轉為從機模式;處于從機模式下的控制器實時監聽處于主機模式下的控制器發送的允許本控制器轉為主機模式的主從轉換的控制命令,若收到該控制命令,由從機模式轉為主機模式;通過每個控制器接收允許本控制器轉為主機模式以及發送允許下一個控制器轉為主機模式的主從轉換的控制命令,實現每個控制器在主機模式和從機模式兩種工作模式下的切換,最終實現多個控制器之間的通信,由于系統任意時刻都工作在單主機多從機的工作模式下,不需要額外增加硬件,即可實現多控制器之間的通信,提高了通信的可靠性。
附圖說明
圖1是多主機多從機的I2C總線系統結構;
圖2是借助他總線通信協議完成多主機之間通信的系統結構圖;
圖3是本實施例中I2C總線系統結構。
具體實施方式
下面結合附圖以及具體的實施例對本發明進行詳細說明。
對于I2C總線上的單個控制器,共有兩種工作模式,即主機模式和從機模式。在兩種不同的工作模式下,單個控制器的通信方法如下:
在主機模式下:該控制器占用I2C總線的控制權,通過I2C總線與其他處于從機模式下的控制器進行通信;在占用完成后,向總線發出主從轉換的控制命令即向下一個處于從機模式下的控制器發送允許其轉為主機模式的控制命令,之后釋放I2C總線的控制權,由主機模式轉為從機模式。
在從機模式下:該控制器實時監聽I2C總線上的允許本控制器轉為主機模式的主從轉換的控制命令,若收到該控制命令,則由從機模式轉為主機模式。
其中,在主機模式下,本控制器向總線發出的主從轉換的控制命令包括待轉換的從機地址和設定標識信息;在從機模式下,I2C總線上的允許本控制器轉為主機模式的主從轉換的控制命令包括本控制器的地址和設定標識信息。
單個控制器通過在主機模式和從機模式兩種工作模式下的切換,實現與I2C總線上其他控制器的通信。在單個控制器通訊方法的基礎上,I2C總線上的多控制器的通信方法如下:
任一時刻,多控制器處于一主機、多從機的控制模式,由主機占用總線;
主機對I2C總線的占用完成后,向其中一個從機寫入主從轉換的控制命令;之后該主機轉入從機控制模式,該從機轉入主機控制模式。
如圖3所示的系統結構,整個系統初次啟動時,其中一個控制器以主機模式啟動,其他控制器均以從機模式啟動。例如,設定控制器A以主機模式啟動,占有I2C總線的控制權,其余控制器B和C均以從機模式啟動,處于從機模式。此時,系統實際工作在一個主機多個從機的模式下。其中,各個控制器均有各自獨立的地址。由于主控制器A獨自占用I2C總線的控制權,不單可以利用I2C總線與從屬器件1和2通信,還能夠與處于從機模式的控制器B和C通信,實現控制器之間的信息傳遞。由于主控制器與處于從機模式下的控制器以及從屬器件進行通信的具體方式屬于現有技術,此處不再贅述。
當主控制器A對I2C總線占用完成后,即已完成其所需的數據讀寫后,主控制器A向總線發出主從轉換的控制命令,其中,該控制命令包含待轉換的從機地址和設定標識信息。具體的,主控制器A確定下一個待轉換的從控制器的方法可以是:主控制器A存儲有所有處于從機模式下的控制器的地址,從所有從控制器中隨意選取一個作為待轉換的從控制器。當然,主控制器A確定下一個待轉換的從控制器的方法并不固定,也可以是在主控制器A的地址的基礎上,采用某種算法來確定下一個待轉換的從控制器。例如,在遵循I2C標準協議數據發送方式的前提下,主控制器A確定將控制器B作為下一個待轉換的從控制器,此時主控制器A先向控制器B發送控制器B的地址,再發送設定標識信息‘F’、‘O’和‘R’。當然,主控制器A向控制器B發送的設定標識信息的字符的數目以及字符的具體內容可以由用戶進行設定。此后,主控制器A交出I2C總線控制權,轉入從機模式,而接收到該控制命令的控制器B則轉入主機模式,取得I2C總線的控制權,占用I2C總線,使用I2C接口實現預先設定的功能完成下一步工作。待控制器B使用完總線后,亦需額外發送一個主從轉換的控制命令即總線轉移命令,將I2C總線的控制權轉交給其他控制器,例如控制器C。
按照上述工作模式,各控制器之間就可以通過I2C接口實現信息交互,無需再使用額外的總線和接口資源。各個控制器通過程序邏輯實現主從模式的切換,使用標準I2C協議完成總線控制權交接,對標準I2C通信協議沒有任何影響,僅以極小的程序開銷提升了硬件接口資源的使用效率。另一方面,由于系統任意時刻都工作在單主機多從機的工作模式下,避免了I2C總線的競爭,提高了通信的可靠性。