本發(fā)明實(shí)施例涉及通信技術(shù)領(lǐng)域,尤其涉及一種光模塊I2C總線亂時(shí)序診斷方法及裝置。
背景技術(shù):
常見的I2C(Inter-Integrated Circuit,I2C總線)總線通訊架構(gòu)中,I2C總線在硬件上獨(dú)立共享總線,通常由一個(gè)I2C master設(shè)備與多個(gè)I2C slave設(shè)備分享同一I2C總線,根據(jù)協(xié)議,不允許兩個(gè)進(jìn)程同時(shí)占用I2C總線,因此容易出現(xiàn)不同進(jìn)程之間的資源搶占問題。
當(dāng)一個(gè)I2C master設(shè)備與I2C slave設(shè)備進(jìn)行較大的數(shù)據(jù)通訊時(shí),常用的I2C總線通訊讀寫模式有連續(xù)讀模式(圖1a),連續(xù)寫模式(圖1b)和連續(xù)隨機(jī)地址讀模式(圖1c)。
因?yàn)镮2C寫通訊時(shí)大部分時(shí)序控制權(quán)在I2C master設(shè)備端,如果出現(xiàn)不同進(jìn)程的程序協(xié)調(diào)不當(dāng)或同一進(jìn)程調(diào)度不當(dāng),就會(huì)現(xiàn)異常的讀寫。以一個(gè)I2C Master與一個(gè)I2C slave設(shè)備的寫通訊為例,由于多進(jìn)程之間相關(guān)干擾、共享設(shè)備I2C總線不同進(jìn)程的程序爭奪,會(huì)產(chǎn)生亂時(shí)序,亂時(shí)序很導(dǎo)致一個(gè)完整的時(shí)序不再完整,這時(shí)候會(huì)出現(xiàn)異常的讀寫。例如,當(dāng)在連續(xù)讀Sequential I2C Read序列的“Start”或“Read”狀態(tài)位出現(xiàn)錯(cuò)誤或I2C slave設(shè)備的具體電氣指標(biāo)差異時(shí),造成I2C通訊的混亂,進(jìn)而產(chǎn)生I2C亂時(shí)序,如Sequential I2C Read序列變成Sequential I2C Write序列,原來的Sequential I2C Read序列中被插入一個(gè)Sequential I2C Write序列,原來的Equential I2C Read序列變成一個(gè)不完整的亂時(shí)序。
產(chǎn)生I2C亂時(shí)序時(shí),由于I2C亂時(shí)序一直在通信,從在造成總線上各種不可預(yù)知的情況出現(xiàn),如在不允許進(jìn)行寫操作的區(qū)域?qū)懭肓藬?shù)據(jù),或者在一些不允許修改數(shù)據(jù)的區(qū)域被修改了數(shù)據(jù),這是設(shè)備端不期望出現(xiàn),并極力避免的。
根據(jù)SFF-8472協(xié)議,對(duì)于一個(gè)I2C slave設(shè)備,允許進(jìn)行寫操作的區(qū)域,如用戶可寫區(qū)A2[128~247],密碼輸入?yún)^(qū)A2[123~126],密碼設(shè)置區(qū)A2[119~122]。還有一些區(qū)域不允許進(jìn)行寫操作,如果在不允許進(jìn)行寫操作的區(qū)域?qū)懭霐?shù)據(jù),則視為非常規(guī)的I2C操作行為。
I2C master設(shè)備的一個(gè)進(jìn)程A為:讀一個(gè)I2C slave設(shè)備1的A2[110]的讀時(shí)序;而I2C總線上在傳輸進(jìn)程A的讀時(shí)序的“start”位時(shí),突然被進(jìn)程B打斷,假如此刻進(jìn)程A的“read”位出現(xiàn)錯(cuò)誤,進(jìn)程A的“read”位變成“write”位,進(jìn)程A變成了寫I2C slave設(shè)備1的A2[110]的寫時(shí)序。假如進(jìn)程B為:連續(xù)讀A2[0~95],則進(jìn)程A在A2[110]的寫時(shí)序中會(huì)插入進(jìn)程B的時(shí)序,如圖1d所示,進(jìn)程A的寫時(shí)序變成一個(gè)亂時(shí)序,即進(jìn)程A的“110”位置(圖1d中的“MEMORY ADDRESS”右邊的偏移地址位置)會(huì)被進(jìn)程B的設(shè)備地址“A2”代替(圖1d中的“MEMORY ADDRESS”右邊的偏移地址位置插入了進(jìn)程B的“--XFP ADDRESS--”),即進(jìn)程B的“A2”被寫入到原進(jìn)程A的“110”位置,因進(jìn)程B是連續(xù)讀模式,因此進(jìn)程B的偏移地址“0~95”會(huì)陸續(xù)寫入到原進(jìn)程A的“111~205”位置。進(jìn)程A原來的讀“110”的時(shí)序變成了連續(xù)寫“110~205”的時(shí)序,但I(xiàn)2C master設(shè)備卻不知道原來的進(jìn)程A變成了一個(gè)亂時(shí)序,也不知道進(jìn)程A在I2C slave設(shè)備1上的不允許寫的區(qū)域?qū)懭肓藬?shù)據(jù),這樣將會(huì)對(duì)系統(tǒng)造成災(zāi)難性的后果,例如A2[110].6為光模塊的發(fā)光控制位,如果這個(gè)位置被寫入了其他數(shù)據(jù),導(dǎo)致光模塊由正常發(fā)光到突然關(guān)斷發(fā)光,這將會(huì)遭到客戶投訴的風(fēng)險(xiǎn)。
I2C master設(shè)備端通常無法感知是因?yàn)樽约旱臅r(shí)序控制導(dǎo)致了亂時(shí)序,I2C slave設(shè)備也不沒有動(dòng)機(jī)去識(shí)別I2C總線上是否發(fā)生了亂時(shí)序,而若亂時(shí)序?qū)е碌倪@些非常規(guī)的I2C寫操作繼續(xù)發(fā)生,就會(huì)導(dǎo)致整個(gè)系統(tǒng)崩潰,針對(duì)上述問題,現(xiàn)有技術(shù)還沒有提出一種有效的解決方案。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供一種光模塊I2C總線亂時(shí)序診斷方法及裝置,用以識(shí)別和記錄光模塊內(nèi)部存在的非常規(guī)I2C寫操作,以便終端基于光模塊識(shí)別和記錄的非用戶可操作區(qū)存在的寫操作,診斷是否因I2C總線亂時(shí)序而導(dǎo)致光模塊側(cè)的非常規(guī)I2C寫操作。
本發(fā)明實(shí)施例提供一種光模塊I2C總線亂時(shí)序診斷方法,包括:
光模塊通過I2C總線接收終端發(fā)送的開始時(shí)鐘信號(hào);所述開始時(shí)鐘信號(hào)用于指示所述光模塊在用戶可操作區(qū)寫入數(shù)據(jù);
所述光模塊根據(jù)所述開始時(shí)鐘信號(hào),檢測在非用戶可操作區(qū)是否存在I2C總線寫操作;
若存在,設(shè)置標(biāo)識(shí)符,用以標(biāo)記在所述非用戶可操作區(qū)存在的I2C總線寫操作,并將在非用戶可操作區(qū)寫入的數(shù)據(jù)存儲(chǔ)在指定存儲(chǔ)區(qū)域。
本發(fā)明實(shí)施例提供一種光模塊I2C總線亂時(shí)序診斷裝置,包括:
接收單元,用于通過I2C總線接收終端發(fā)送的開始時(shí)鐘信號(hào);所述開始時(shí)鐘信號(hào)用于指示所述光模塊在用戶可操作區(qū)寫入數(shù)據(jù);
檢測單元,用于根據(jù)所述開始時(shí)鐘信號(hào),檢測在非用戶可操作區(qū)是否存在I2C總線寫操作;
處理單元,用于若所述檢測單元檢測到在非用戶可操作區(qū)存在I2C總線寫操作,則設(shè)置標(biāo)識(shí)符,用以標(biāo)記在所述非用戶可操作區(qū)存在的I2C總線寫操作,并將在所述非用戶可操作區(qū)寫入的數(shù)據(jù)存儲(chǔ)在指定存儲(chǔ)區(qū)域。
本發(fā)明實(shí)施例中,光模塊作為I2C slave設(shè)備,終端作為I2C master設(shè)備,為了使光模塊識(shí)別非用戶可操作區(qū)是否存在不允許的寫操作,以及使終端能夠查看到非用戶可操作區(qū)寫入的數(shù)據(jù),在光模塊中設(shè)置一個(gè)功能模塊,用于執(zhí)行上述方法流程,即在接收到在用戶可操作區(qū)寫入數(shù)據(jù)的開始時(shí)鐘信號(hào)時(shí),檢測在非用戶可操作區(qū)是否存在I2C總線寫操作;若存在,設(shè)置標(biāo)識(shí)符,用以標(biāo)記在所述非用戶可操作區(qū)存在的I2C總線寫操作,光模塊將在非用戶可操作區(qū)寫入的數(shù)據(jù)存儲(chǔ)在指定存儲(chǔ)區(qū)域。功能模塊通過執(zhí)行上述方法流程,實(shí)現(xiàn)光模塊識(shí)別非用戶可操作區(qū)是否存在不允許的寫操作,以及存在不允許的寫操作時(shí),可記錄寫入非用戶可操作區(qū)的數(shù)據(jù),以便終端能夠基于光模塊識(shí)別和記錄的非用戶可操作區(qū)存在的寫操作,診斷是否因I2C亂時(shí)序而導(dǎo)致光模塊側(cè)的非常規(guī)I2C寫操作。
附圖說明
附圖用來提供對(duì)本發(fā)明的進(jìn)一步理解,并且構(gòu)成說明書的一部分,與本發(fā)明實(shí)施例一起用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的限制。在附圖中:
圖1a至1c為現(xiàn)有技術(shù)中的三種常用的I2C總線通訊讀寫模式的結(jié)構(gòu)示意圖;
圖1d為現(xiàn)有技術(shù)中存在進(jìn)程B搶占進(jìn)程A導(dǎo)致的進(jìn)程A的時(shí)序?yàn)閬y時(shí)序的示意圖;
圖2為本發(fā)明實(shí)施例提供的一種光模塊I2C總線亂時(shí)序診斷方法的方法流程示意圖;
圖3為本發(fā)明實(shí)施例提供的一種光模塊I2C亂時(shí)序的識(shí)別和記錄的方法流程示意圖;
圖4為本發(fā)明實(shí)施例提供的一種提示終端光模塊內(nèi)部存在非常規(guī)的I2C寫操作的方法流程示意圖;
圖5為本發(fā)明實(shí)施例提供的一種終端查看I2C亂時(shí)序數(shù)據(jù)的方法流程示意圖;
圖6為本發(fā)明實(shí)施例提供的一種光模塊I2C總線亂時(shí)序診斷裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為了使本發(fā)明所解決的技術(shù)問題、技術(shù)方案以及有效果更加清楚明白,以下結(jié)合說明書附圖對(duì)本發(fā)明的優(yōu)選實(shí)施例進(jìn)行說明,應(yīng)當(dāng)理解,此處所描述的優(yōu)選實(shí)施例僅用于說明和解釋本發(fā)明,并不用于限定本發(fā)明。并且在不沖突的情況下,本申請中的實(shí)施例及實(shí)施例中的特征可以相互組合。
為了防止I2C總線亂時(shí)序?qū)φ麄€(gè)系統(tǒng)運(yùn)行的影響,尤其是I2C總線亂時(shí)序?qū)е碌腎2C slave設(shè)備一些不允許寫操作的區(qū)域被寫入了數(shù)據(jù),對(duì)整個(gè)系統(tǒng)造成的災(zāi)難性的影響,本發(fā)明實(shí)施例提出一種光模塊I2C總線亂時(shí)序診斷方法,即在接收到在用戶可操作區(qū)寫入數(shù)據(jù)的開始時(shí)鐘信號(hào)時(shí),檢測在非用戶可操作區(qū)是否存在I2C總線寫操作;若存在,設(shè)置標(biāo)識(shí)符,用以標(biāo)記在所述非用戶可操作區(qū)存在的I2C總線寫操作,光模塊將在非用戶可操作區(qū)寫入的數(shù)據(jù)存儲(chǔ)在指定存儲(chǔ)區(qū)域。為了使光模塊識(shí)別非用戶可操作區(qū)是否存在不允許的寫操作,以及使終端能夠查看到非用戶可操作區(qū)寫入的數(shù)據(jù),在光模塊中設(shè)置一個(gè)功能模塊,用于執(zhí)行上述方法流程,功能模塊通過執(zhí)行上述方法流程,實(shí)現(xiàn)了光模塊識(shí)別非用戶可操作區(qū)是否存在不允許的寫操作,以及存在不允許的寫操作時(shí),可記錄寫入非用戶可操作區(qū)的數(shù)據(jù),以便終端能夠基于光模塊識(shí)別和記錄的非用戶可操作區(qū)存在的寫操作,診斷是否因I2C亂時(shí)序而導(dǎo)致光模塊側(cè)的非常規(guī)I2C寫操作。
如圖2所示,本發(fā)明實(shí)施例提供一種光模塊I2C總線亂時(shí)序診斷方法的主要流程,包括:
步驟A01,光模塊通過I2C總線接收終端發(fā)送的開始時(shí)鐘信號(hào);光模塊接收到的開始時(shí)鐘信號(hào)用于指示光模塊在用戶可操作區(qū)寫入數(shù)據(jù);
步驟A02,光模塊根據(jù)接收到的開始時(shí)鐘信號(hào),檢測在非用戶可操作區(qū)是否存在I2C總線寫操作;
步驟A03,若存在,設(shè)置標(biāo)識(shí)符,用以標(biāo)記在非用戶可操作區(qū)存在的I2C總線寫操作,并將在非用戶可操作區(qū)寫入的數(shù)據(jù)存儲(chǔ)在指定存儲(chǔ)區(qū)域。
在I2C總線結(jié)構(gòu)中,終端下掛多個(gè)光模塊,終端是發(fā)起操作的設(shè)備,光模塊是執(zhí)行操作的設(shè)備,終端為I2C master設(shè)備,光模塊為I2C slave設(shè)備,一個(gè)I2C master設(shè)備與多個(gè)I2C slave設(shè)備共用同一I2C總線。終端與光模塊通過I2C總線進(jìn)行I2C通信,一個(gè)終端通常使用一條串行時(shí)鐘線SCL對(duì)多個(gè)光模塊進(jìn)行時(shí)鐘控制,以及每個(gè)光模塊分別使用一條串行數(shù)據(jù)線SDL進(jìn)行數(shù)據(jù)傳輸,光模塊根據(jù)終端發(fā)起的操作和時(shí)鐘信號(hào)進(jìn)行相應(yīng)的數(shù)據(jù)接收。
本發(fā)明實(shí)施例的光模塊可以是SFP(Small Form-factor Pluggables,小型可插拔)、SFP+(Small Form-factor Pluggables Plus,小型可插拔升級(jí)版)、XFP(10 Gigabit Small Form Factor Pluggable,10G小型可插拔)系列光模塊產(chǎn)品等。正常工作時(shí)光模塊插入終端中,終端通過總線對(duì)光模塊進(jìn)行控制。
對(duì)于一個(gè)I2C slave設(shè)備,都有一個(gè)用來與I2C master設(shè)備進(jìn)行I2C通信的數(shù)據(jù)存儲(chǔ)區(qū),即光模塊用來I2C讀寫操作的數(shù)據(jù)存儲(chǔ)區(qū),數(shù)據(jù)存儲(chǔ)區(qū)一般包括0~255位,每個(gè)位占用8bit。根據(jù)SFF-8472協(xié)議,根據(jù)功能的不同,數(shù)據(jù)存儲(chǔ)區(qū)又劃分為多個(gè)區(qū)域,密碼設(shè)置區(qū),密碼輸入?yún)^(qū),用戶可寫區(qū),頁選控制區(qū),數(shù)據(jù)監(jiān)控區(qū),待開發(fā)區(qū)等。根據(jù)操作類型,數(shù)據(jù)存儲(chǔ)區(qū)還可分為允許I2C寫操作的區(qū)域和不允許I2C寫操作的區(qū)域。允許I2C寫操作的區(qū)域?yàn)樵试S寫入終端發(fā)送的數(shù)據(jù)的區(qū)域,如用戶可寫區(qū)A2[128~247],密碼輸入?yún)^(qū)A2[123~126],密碼設(shè)置區(qū)A2[119~122]。不允許I2C寫操作的區(qū)域,一般為只讀區(qū)域,只讀區(qū)域中的原始數(shù)據(jù)不允許被修改,如A2[110],A2[115~117],A2[0~109]。“A2”代表一個(gè)光模塊的設(shè)備地址,“[]”內(nèi)的數(shù)字指“MEMORY ADDRESS”,即偏移地址,代表一個(gè)進(jìn)程命令光模塊進(jìn)行I2C寫操作的具體位置,或者是一個(gè)進(jìn)程命令光模塊進(jìn)行I2C讀操作的具體位置。如果光模塊與終端在進(jìn)行I2C通信時(shí),產(chǎn)生了亂時(shí)序,很可能在不允許I2C寫操作的區(qū)域?qū)懭肓藬?shù)據(jù),這種非常規(guī)的I2C寫操作是不期望存在的。
上述方法流程,用戶可操作區(qū)是指允許I2C寫操作的區(qū)域,非用戶可操作區(qū)是指不允許I2C寫操作的區(qū)域。
終端向一個(gè)該光模塊發(fā)起一個(gè)操作進(jìn)程時(shí),向I2C總線發(fā)送開始該操作進(jìn)程的控制時(shí)序,包括“START”時(shí)鐘狀態(tài)位,標(biāo)記I2C讀操作的“Read”狀態(tài)位,或者標(biāo)記I2C寫操作的“Write”狀態(tài)位,以及具體的電氣指標(biāo)等。當(dāng)終端控制光模塊結(jié)束這個(gè)操作進(jìn)程時(shí),向I2C總線發(fā)送結(jié)束該操作進(jìn)程的控制時(shí)序,包括“STOP”時(shí)鐘狀態(tài)位等信息。
因此,步驟A01中,在光模塊開始執(zhí)行一個(gè)I2C寫操作的進(jìn)程之前,會(huì)接收終端通過I2C總線發(fā)送的開始時(shí)鐘信號(hào),開始時(shí)鐘信號(hào)即為時(shí)鐘狀態(tài)位中的“START”。光模塊根據(jù)開始時(shí)鐘信號(hào),開始在用戶可操作區(qū)的指定“MEMORY ADDRESS”位置寫入終端控制光模塊寫入的數(shù)據(jù)。
為了識(shí)別出光模塊的I2C寫操作是否為光模塊根據(jù)接收的I2C亂時(shí)序而進(jìn)行的寫操作,在接收到開始時(shí)鐘信號(hào)之后,檢測在非用戶可操作區(qū)是否存在I2C總線寫操作,如果存在,就用標(biāo)識(shí)符來標(biāo)記在非用戶可操作區(qū)存在的I2C總線寫操作。
具體的,步驟A03中,光模塊設(shè)置標(biāo)識(shí)符,用以標(biāo)記在非用戶可操作區(qū)存在的I2C總線寫操作,具體為:用標(biāo)識(shí)符Flag的取值來標(biāo)記在非用戶可操作區(qū)是否存在I2C總線寫操作,F(xiàn)lag取值為0,標(biāo)記非用戶可操作區(qū)不存在I2C總線寫操作;Flag取值為非0,標(biāo)記非用戶可操作區(qū)存在I2C總線寫操作。
更進(jìn)一步的,為了更清楚的標(biāo)記光模塊存在多少次非常規(guī)的I2C總線寫操作,可以用Flag的取值用以標(biāo)記在非用戶可操作區(qū)存在的I2C總線寫操作的累計(jì)次數(shù),在檢測到在非用戶可操作區(qū)存在I2C總線寫操作時(shí),只需將標(biāo)識(shí)符Flag的取值自增。
例如,在步驟A03之前,F(xiàn)lag的取值為0,光模塊從步驟A01接收到該I2C寫操作的開始時(shí)鐘信號(hào),到接收到該I2C寫操作的結(jié)束時(shí)鐘信號(hào)的期間,若檢測到存在在非用戶可操作區(qū)的I2C總線寫操作時(shí),將Flag的取值自增為1。
再例如,在步驟A03之前,F(xiàn)lag的取值為4;光模塊從步驟A01接收到該I2C寫操作的開始時(shí)鐘信號(hào),到接收到該I2C寫操作的結(jié)束時(shí)鐘信號(hào)的期間,若檢測到存在在非用戶可操作區(qū)的I2C總線寫操作時(shí),將Flag的取值自增為5??蛇x的,F(xiàn)lag的取值最大可以為255。
更進(jìn)一步的,為了讓終端能夠診斷出光模塊存在非常規(guī)的I2C寫操作,即光模塊的非用戶可操作區(qū)存在I2C總線寫操作,在光模塊接收到終端發(fā)送的針對(duì)在用戶可操作區(qū)寫入數(shù)據(jù)的結(jié)束時(shí)鐘信號(hào)時(shí),根據(jù)結(jié)束時(shí)鐘信號(hào),將Flag自增后的取值寫入到第一偏移地址對(duì)應(yīng)的存儲(chǔ)位置。一種可選的實(shí)施例中,光模塊的第一偏移地址是指A2[115],A2[115]對(duì)對(duì)應(yīng)存儲(chǔ)位置的數(shù)值默認(rèn)為0,若Flag自增后的取值為1,則將A2[115]對(duì)應(yīng)的存儲(chǔ)位置的數(shù)值自增為1。這樣,終端通過讀取光模塊A2[115]的值,即可診斷出光模塊是否存在非常規(guī)的寫操作,若A2[115]的值為0,則終端即可診斷出光模塊的非用戶可操作區(qū)不存在I2C總線寫操作,A2[115]的值為非0,則終端即可診斷出光模塊的非用戶可操作區(qū)存在I2C總線寫操作。
為了使終端診斷出光模塊的非用戶可操作區(qū)存在I2C總線寫操作,并能夠獲取寫入非用戶可操作區(qū)的數(shù)據(jù),在光模塊檢測到非用戶可操作區(qū)存在I2C總線寫操作時(shí),需要將在非用戶可操作區(qū)寫入的數(shù)據(jù)存儲(chǔ)在指定存儲(chǔ)區(qū)域。
具體的,步驟A03中,光模塊檢測到非用戶可操作區(qū)存在I2C總線寫操作時(shí),將在非用戶可操作區(qū)寫入的數(shù)據(jù)存儲(chǔ)在指定存儲(chǔ)區(qū)域,具體為:將在非用戶可操作區(qū)寫入的數(shù)據(jù)作為I2C總線亂時(shí)序數(shù)據(jù)存儲(chǔ)在內(nèi)存(如RAM)中。
雖然將在非用戶可操作區(qū)寫入的數(shù)據(jù)作為I2C總線亂時(shí)序數(shù)據(jù)存儲(chǔ)在內(nèi)存中具有存儲(chǔ)速率快的特點(diǎn),但是一旦光模塊斷電,存儲(chǔ)在內(nèi)存中的數(shù)據(jù)就會(huì)丟失,為了保證光模塊斷電的情況下也能夠使終端讀取到在非用戶可操作區(qū)寫入的數(shù)據(jù),更進(jìn)一步的,在光模塊接收到終端發(fā)送的在用戶可操作區(qū)寫入數(shù)據(jù)的結(jié)束時(shí)鐘信號(hào)時(shí),根據(jù)結(jié)束時(shí)鐘信號(hào),將內(nèi)存中存儲(chǔ)的I2C總線亂時(shí)序數(shù)據(jù)轉(zhuǎn)存在閃存中,閃存具有斷電數(shù)據(jù)也不會(huì)丟失的特點(diǎn),這樣,當(dāng)終端需要查看光模塊寫入非用戶可操作區(qū)的數(shù)據(jù)時(shí),直接將閃存中存儲(chǔ)的I2C總線亂時(shí)序數(shù)據(jù)加載到指定位置即可。
更進(jìn)一步的,本發(fā)明實(shí)施例提供一種實(shí)現(xiàn)終端查看光模塊指定位置存儲(chǔ)的I2C總線亂時(shí)序數(shù)據(jù)的具體實(shí)現(xiàn)方式。
光模塊接收終端發(fā)送的第一顯示指令,第一顯示指令是終端在確定光模塊的非用戶可操作區(qū)存在I2C總線數(shù)據(jù)的寫操作時(shí)發(fā)送的,光模塊根據(jù)第一顯示指令,將閃存中存儲(chǔ)的I2C總線亂時(shí)序數(shù)據(jù)寫入到第二偏移地址對(duì)應(yīng)的第一存儲(chǔ)位置,并顯示第一存儲(chǔ)位置寫入的I2C總線亂時(shí)序數(shù)據(jù)。
可選的,終端通過以下方式發(fā)送第一顯示指令:終端控制光模塊在偏移地址A2[127]錄入“0xF0”,(通常終端先將“0xF0”轉(zhuǎn)換成二進(jìn)制,然后通過I2C總線控制光模塊在A2[127]寫入“0xF0”轉(zhuǎn)換后的二進(jìn)制數(shù),因A2[127]為頁選控制區(qū),光模塊監(jiān)測到A2[127]被寫入“0xF0”轉(zhuǎn)換后的二進(jìn)制數(shù),相當(dāng)于光模塊接收到一個(gè)頁選命令,這個(gè)頁選命令即為第一顯示指令。光模塊根據(jù)第一顯示指令,并確定A2[115]對(duì)應(yīng)位置的數(shù)值為非0,則將閃存中存儲(chǔ)的I2C總線亂時(shí)序數(shù)據(jù)加載到指定位置,如A2[0],并顯示指定位置加載的數(shù)據(jù),使得終端能夠查看到I2C總線亂寫的數(shù)據(jù)。
可選的,第二偏移地址可以為A2[0],A2[0]的存儲(chǔ)位置的原始數(shù)據(jù)為光模塊的出廠內(nèi)部信息。終端通過向光模塊的頁選控制區(qū)A2[127]加載不同的頁選指令,光模塊可以顯示A2[0]位置對(duì)應(yīng)的不同數(shù)據(jù)。
例如,當(dāng)終端需要查看光模塊A2[0]位置的原始數(shù)據(jù)時(shí),可以向光模塊發(fā)送第二顯示指令,光模塊根據(jù)終端發(fā)送的第二顯示指令,顯示A2[0]位置的原始數(shù)據(jù),如光模塊的出廠內(nèi)部信息。
可選的,終端通過以下方式發(fā)送第二顯示指令:終端控制光模塊在偏移地址A2[127]錄入“0x00”對(duì)應(yīng)的二進(jìn)制數(shù),光模塊監(jiān)測到A2[127]被寫入“0x00”轉(zhuǎn)換后的二進(jìn)制數(shù),相當(dāng)于光模塊接收到顯示A2[0]位置對(duì)應(yīng)的原始數(shù)據(jù)的頁選命令,這個(gè)頁選命令即為第二顯示指令。具體實(shí)現(xiàn)中,可以預(yù)先在終端和光模塊中配置這兩個(gè)頁選命令,“0xF0”和“0x00”僅為區(qū)別兩個(gè)不同的頁選命令,本發(fā)明實(shí)施例中也可以配置其他的命令字段作為第一顯示指令和第二顯示指令,其中,第一顯示指令用于指示光模塊將閃存中的I2C亂寫數(shù)據(jù)加載到指定位置顯示,第二顯示指令用于指示光模塊顯示指定位置的原始數(shù)據(jù)。
此外,對(duì)于本發(fā)明提出的I2C亂時(shí)序診斷方法,可以有多種實(shí)現(xiàn)方式來實(shí)現(xiàn)終端發(fā)現(xiàn)哪一個(gè)光模塊內(nèi)存在非常規(guī)的I2C寫操作,進(jìn)而實(shí)現(xiàn)終端對(duì)I2C亂時(shí)序的診斷,終端可通過以下方式確定光模塊的非用戶可操作區(qū)存在I2C總線寫操作,具體為:
第一種,終端定時(shí)讀取光模塊的第一偏移地址對(duì)應(yīng)的存儲(chǔ)位置的數(shù)據(jù),若第一偏移地址對(duì)應(yīng)的存儲(chǔ)位置的數(shù)據(jù)為非0,則確定光模塊的非用戶可操作區(qū)存在I2C總線寫操作。
在這種方式中,光模塊可以周期性的讀取光模塊的第一偏移地址對(duì)應(yīng)的存儲(chǔ)位置的數(shù)據(jù),也可以配置終端周期性的讀取光模塊的第一偏移地址對(duì)應(yīng)的存儲(chǔ)位置的數(shù)據(jù)。
第二種,在上述步驟A03,光模塊用標(biāo)識(shí)符標(biāo)記非用戶可操作區(qū)存在的I2C總線寫操作之后,光模塊向終端發(fā)送通知消息,通知終端讀取光模塊的第一偏移地址對(duì)應(yīng)的存儲(chǔ)位置的數(shù)據(jù);其中,若終端讀取第一偏移地址對(duì)應(yīng)的存儲(chǔ)位置的數(shù)據(jù)為非0,則終端確定光模塊的非用戶可操作區(qū)存在I2C總線寫操作。
在上述兩種方式中,第一偏移地址為上述實(shí)施例中的A2[115],若A2[115]的值為0,則終端即可診斷出光模塊的非用戶可操作區(qū)不存在I2C總線寫操作,A2[115]的值為非0,則終端即可診斷出光模塊的非用戶可操作區(qū)存在I2C總線寫操作。
本發(fā)明實(shí)施例中,終端是發(fā)起操作的設(shè)備,光模塊是執(zhí)行操作的設(shè)備。具體的,終端為I2C master設(shè)備,光模塊為I2C slave設(shè)備,一個(gè)I2C master設(shè)備與多個(gè)I2C slave設(shè)備共用同一I2C總線。
為了使光模塊識(shí)別非用戶可操作區(qū)是否存在不允許的寫操作,以及使終端能夠查看到非用戶可操作區(qū)寫入的數(shù)據(jù),在光模塊中設(shè)置一個(gè)功能模塊,用于執(zhí)行上述方法流程,功能模塊通過執(zhí)行上述方法流程,實(shí)現(xiàn)了光模塊識(shí)別非用戶可操作區(qū)是否存在不允許的寫操作,以及存在不允許的寫操作時(shí),可記錄寫入非用戶可操作區(qū)的數(shù)據(jù),以便終端能夠基于光模塊識(shí)別和記錄的非用戶可操作區(qū)存在的寫操作,診斷是否因I2C亂時(shí)序而導(dǎo)致光模塊側(cè)的非常規(guī)I2C寫操作。
下面以SFF-8472協(xié)議規(guī)定的SFP光模塊存儲(chǔ)區(qū)結(jié)構(gòu)為例,對(duì)本發(fā)明實(shí)施例提供的上述光模塊I2C亂時(shí)序診斷方法流程進(jìn)行舉例說明,本發(fā)明實(shí)施例提供的光模塊I2C亂時(shí)序診斷方法流程主要包括I2C亂時(shí)序的識(shí)別、記錄、提示、以及顯示。
I2C亂時(shí)序的識(shí)別和記錄的流程,如圖3所示,包括:
步驟B1:假如一個(gè)光模塊通過I2C總線接收在A2[128]寫入數(shù)據(jù)的通信數(shù)據(jù),當(dāng)光模塊的I2C寫操作的進(jìn)程開始時(shí),即在光模塊接收到“START”開始時(shí)鐘信號(hào)、并未接收到“STOP”結(jié)束時(shí)鐘信號(hào)時(shí),開始檢測寫入數(shù)據(jù)的偏移地址的位置是否為非用戶可操作區(qū),如A2[110],A2[115~117],A2[0~109]。如果是,執(zhí)行步驟B2,如果否,結(jié)束。
步驟B2:在光模塊的RAM中記錄在非用戶可操作區(qū)寫入的數(shù)據(jù);并進(jìn)入步驟B3;
如果原本需要寫在A2[128]的I2C總線數(shù)據(jù)因I2C總線上的亂時(shí)序?qū)懭肓薃[110],將寫入非用戶可操作區(qū)的數(shù)據(jù)標(biāo)識(shí)為I2C_ERR[110],存儲(chǔ)在RAM中。
步驟B3:用非法標(biāo)識(shí)符flag的值自增1;并進(jìn)入步驟B4;
其中,flag的值表示I2C總線數(shù)據(jù)被寫入非用戶可操作區(qū)(A2[110],A2[115~117],A2[0~109])的次數(shù);假如步驟B3之前,flag=0,則將flag的值自增1后,flag=1。
步驟B4:光模塊接收“STOP”結(jié)束時(shí)鐘信號(hào),并執(zhí)行步驟B5,否則等待在步驟B3;
步驟B5:光模塊的I2C寫操作的進(jìn)程結(jié)束,觸發(fā)MCU處理中斷,并進(jìn)入步驟B6;
若MCU為執(zhí)行I2C寫操作的微處理器,則在接收到“STOP”結(jié)束時(shí)鐘信號(hào),觸發(fā)MCU處理中斷。
步驟B6:將RAM中存儲(chǔ)的亂時(shí)序數(shù)據(jù)I2C_ERR[110]保存在閃存Flash中,并進(jìn)入步驟B7;
保存在Flash中的目的是,避免存在內(nèi)存中的數(shù)據(jù)在掉電的時(shí)候丟失,而此時(shí)將亂時(shí)序數(shù)據(jù)I2C_ERR[110]保存在Flash中以后,即使系統(tǒng)掉電后依然可以從Flash中裝載亂時(shí)序數(shù)據(jù)I2C_ERR[110]到指定位置,如A0設(shè)備地址。
從Flash中裝載亂時(shí)序數(shù)據(jù)到指定位置由主設(shè)備(終端)觸發(fā),主設(shè)備輸入一個(gè)指令,如在A2[127]錄入0xF0的指令,從設(shè)備(光模塊)根據(jù)這一指令,將Flash中的亂時(shí)序數(shù)據(jù)轉(zhuǎn)存在指定位置,方便主設(shè)備查看或讀取。
步驟B7:將標(biāo)識(shí)符flag的取值,賦值給A2[115],然后結(jié)束進(jìn)程。
基于上述步驟,光模塊可以繼續(xù)向終端發(fā)起提示信息,提示終端光模塊內(nèi)部存在非常規(guī)的I2C寫操作,具體流程如圖4所示,包括:
步驟C1:檢測到A2[115]的值是否為0,若A2[115]的值為非0則,進(jìn)入步驟C2;若A2[115]的值為0,則結(jié)束。
步驟C2:向終端發(fā)送通知消息,通知終端光模塊內(nèi)部存在非常規(guī)的I2C寫操作,提醒終端讀取光模塊的A2[115]的值,確認(rèn)光模塊內(nèi)部是否存在非常規(guī)的I2C寫操作。
在終端通過I2C總線讀取光模塊的A2[115]的值為非0時(shí),即可確認(rèn)光模塊內(nèi)部存在非常規(guī)的I2C寫操作,進(jìn)而確認(rèn)I2C總線存在亂時(shí)序。
當(dāng)然,本發(fā)明實(shí)施例并不限于光模塊主動(dòng)提示終端查看A2[115]的值是否為非0,也可以是終端自己讀取光模塊的數(shù)據(jù)時(shí),發(fā)現(xiàn)讀的數(shù)據(jù)異常,則查看A2[115]位置的值是否為非0。例如,通常情況下終端讀取光模塊的工作溫度為40度,但是某一次偶然發(fā)現(xiàn)讀取的數(shù)據(jù)是零下20度,則認(rèn)為是讀數(shù)據(jù)異常,觸發(fā)終端關(guān)注A2[115]位置的值是否為非0。
終端為了診斷出導(dǎo)致光模塊內(nèi)部存在非常規(guī)的I2C寫操作的具體原因,會(huì)有需求查看光模塊內(nèi)記錄的I2C總線亂時(shí)序數(shù)據(jù),判斷是否因?yàn)镮2C總線出現(xiàn)的亂時(shí)序,才導(dǎo)致了光模塊內(nèi)部存在非常規(guī)的I2C寫操作。
終端查看I2C亂時(shí)序數(shù)據(jù)的主要流程參見圖5,包括:
步驟D1,終端讀取A2[115]的值是否為非0,若是,表示出現(xiàn)過I2C亂時(shí)序,進(jìn)入步驟D2,若否結(jié)束。
步驟D2:終端向光模塊發(fā)出一個(gè)頁選指令,即在A2[127]錄入“0xF0”,進(jìn)入步驟D3;
步驟D3:光模塊接收終端發(fā)送的頁選指令,光模塊判斷是否在A2[127]錄入“0xF0”,若是,進(jìn)入步驟D4,若否,進(jìn)入步驟D5;
步驟D4:將Flash中的亂時(shí)序數(shù)據(jù)I2C_ERR[110]加載到A2[0],并顯示加載到A2[0]中的I2C_ERR[110]數(shù)據(jù)。這樣,終端就能查看到A2[0]對(duì)應(yīng)位置的I2C_ERR[110]。
步驟D5:加載并顯示A2[0]位置對(duì)應(yīng)的光模塊的出廠內(nèi)部信息。
通常終端獲取亂時(shí)序數(shù)據(jù)I2C_ERR[110]之后,還會(huì)獲取光模塊的出廠內(nèi)部信息輔助排查導(dǎo)致光模塊內(nèi)部存在非常規(guī)的I2C寫操作的具體原因??蛇x的步驟D4之后,還包括步驟D6~步驟D7。
步驟D6:終端查看到A2[0]對(duì)應(yīng)位置的I2C_ERR[110]之后,向光模塊發(fā)出第二個(gè)頁選指令,在A2[127]錄入“0x00”,進(jìn)入步驟D7;
步驟D7,光模塊接收終端發(fā)送的第二個(gè)頁選指令,光模塊識(shí)別出在A2[127]錄入“0x00”,返回步驟D5。
針對(duì)上述方法流程,本發(fā)明實(shí)施例還提供一種光模塊I2C總線亂時(shí)序診斷裝置,這些裝置的具體內(nèi)容可參見上述實(shí)施例的內(nèi)容,此處不再累述。
如圖6所示,一種光模塊I2C總線亂時(shí)序診斷裝置,該裝置為光模塊內(nèi)部設(shè)置的一個(gè)功能模塊,用于執(zhí)行上述實(shí)施例中的方法流程,具體包括:
接收單元601,用于通過I2C總線接收終端發(fā)送的開始時(shí)鐘信號(hào);開始時(shí)鐘信號(hào)用于指示光模塊在用戶可操作區(qū)寫入數(shù)據(jù);
檢測單元602,用于根據(jù)開始時(shí)鐘信號(hào),檢測在非用戶可操作區(qū)是否存在I2C總線寫操作;
處理單元603,用于若檢測單元檢測到在非用戶可操作區(qū)存在I2C總線寫操作,則設(shè)置標(biāo)識(shí)符,用以標(biāo)記在非用戶可操作區(qū)存在的I2C總線寫操作,并將在非用戶可操作區(qū)寫入的數(shù)據(jù)存儲(chǔ)在指定存儲(chǔ)區(qū)域。
進(jìn)一步地,標(biāo)識(shí)符為Flag,F(xiàn)lag的取值用以標(biāo)記在非用戶可操作區(qū)進(jìn)行I2C總線寫操作的累計(jì)次數(shù);
處理單元603用于:將標(biāo)識(shí)符Flag的取值自增;
處理單元603還用于:在光模塊接收到終端發(fā)送的在用戶可操作區(qū)寫入數(shù)據(jù)的結(jié)束時(shí)鐘信號(hào)時(shí),根據(jù)結(jié)束時(shí)鐘信號(hào),將Flag自增后的取值寫入到第一偏移地址對(duì)應(yīng)的存儲(chǔ)位置。
進(jìn)一步地,處理單元603用于:將在非用戶可操作區(qū)寫入的數(shù)據(jù)作為I2C總線亂時(shí)序數(shù)據(jù)存儲(chǔ)在內(nèi)存中;
處理單元603還用于:在光模塊接收到終端發(fā)送的在用戶可操作區(qū)寫入數(shù)據(jù)的結(jié)束時(shí)鐘信號(hào)時(shí),根據(jù)結(jié)束時(shí)鐘信號(hào),將內(nèi)存中存儲(chǔ)的I2C總線亂時(shí)序數(shù)據(jù)轉(zhuǎn)存在閃存中。
進(jìn)一步地,接收單元601還用于:接收終端發(fā)送的第一顯示指令,第一顯示指令是終端在確定光模塊的非用戶可操作區(qū)存在I2C總線數(shù)據(jù)的寫操作時(shí)發(fā)送的;
處理單元603還用于:根據(jù)第一顯示指令,將閃存中存儲(chǔ)的I2C總線亂時(shí)序數(shù)據(jù)寫入到第二偏移地址對(duì)應(yīng)的第一存儲(chǔ)位置,并顯示第一存儲(chǔ)位置寫入的I2C總線亂時(shí)序數(shù)據(jù)。
進(jìn)一步地,處理單元603還用于:
在設(shè)置標(biāo)識(shí)符之后,向終端發(fā)送通知消息,通知終端讀取光模塊的第一偏移地址對(duì)應(yīng)的存儲(chǔ)位置的數(shù)據(jù);其中,若第一偏移地址對(duì)應(yīng)的存儲(chǔ)位置的數(shù)據(jù)為非0,則確定光模塊的非用戶可操作區(qū)存在I2C總線寫操作。
為了使光模塊識(shí)別非用戶可操作區(qū)是否存在不允許的寫操作,以及使終端能夠查看到非用戶可操作區(qū)寫入的數(shù)據(jù),在光模塊中設(shè)置一個(gè)功能模塊,用于執(zhí)行上述內(nèi)容,功能模塊通過執(zhí)行上述內(nèi)容,實(shí)現(xiàn)了光模塊識(shí)別非用戶可操作區(qū)是否存在不允許的寫操作,以及存在不允許的寫操作時(shí),可記錄寫入非用戶可操作區(qū)的數(shù)據(jù),以便終端能夠基于光模塊識(shí)別和記錄的非用戶可操作區(qū)存在的寫操作,診斷是否因I2C亂時(shí)序而導(dǎo)致光模塊側(cè)的非常規(guī)I2C寫操作。
本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合。可提供這些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
盡管已描述了本發(fā)明的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對(duì)這些實(shí)施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本發(fā)明范圍的所有變更和修改。
顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。