一種寫數(shù)據(jù)的方法和設(shè)備的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機控制技術(shù)的光模塊領(lǐng)域,尤其涉及一種寫數(shù)據(jù)的方法和設(shè)備。
【背景技術(shù)】
[0002]在計算機控制技術(shù)的光模塊領(lǐng)域,光模塊對外提供了軟件訪問控制功能。主機(Host)可通過 I2C(Inter-1ntegrade Circuit,內(nèi)部集成電路)、MD1(Management DateInput/Output,管理數(shù)據(jù)輸入輸出總線)等總線接口訪問光模塊。其中,訪問形式包括讀數(shù)據(jù)、寫數(shù)據(jù)等。
[0003]此外,有些光模塊存在對內(nèi)部的Flash閃存儲設(shè)備執(zhí)行寫操作的命令,比如,XFP模塊提供128字節(jié)的區(qū)域作為用戶的可寫入?yún)^(qū)域。
[0004]根據(jù)Flash閃存儲設(shè)備的存儲特性,當需要向Flash閃存儲設(shè)備中寫入數(shù)據(jù)時,需要首先確定寫入數(shù)據(jù)存儲在Flash閃存儲設(shè)備的目標地址,并對Flash閃存儲設(shè)備中的目標地址執(zhí)行擦除操作,然后再將待寫入的數(shù)據(jù)寫入至該目標地址中。
[0005]完成這一系列的操作存在以下問題:1、需要消耗大量的時間。由于擦除Flash閃存儲設(shè)備的最小單位是頁,每次在對Flash閃存儲設(shè)備進行擦除操作前還需要將該頁內(nèi)原有的數(shù)據(jù)讀取至RAM中保存,待擦除操作執(zhí)行完畢之后,在將RAM中保存的數(shù)據(jù)逐個寫入,消耗時間比較長。2、對于Flash閃存儲設(shè)備存在對某一個地址反復擦寫的情況,這樣還會降低Flash的壽命。3、假設(shè)將Flash閃存儲設(shè)備設(shè)置的MCU (Micro Control Unit,微控制單元)內(nèi)部,在對Flash閃存儲設(shè)備執(zhí)行擦除操作時,MCU將處于待機狀態(tài),無法響應系統(tǒng)發(fā)生的其他指令,將導致光模塊通信的異常。
【發(fā)明內(nèi)容】
[0006]本發(fā)明實施例提供了一種寫數(shù)據(jù)的方法和設(shè)備,用于解決目前光模塊在向Flash內(nèi)部寫數(shù)據(jù)時存在寫數(shù)據(jù)周期長且寫數(shù)據(jù)效率比較低的問題。
[0007]根據(jù)本發(fā)明的第一方面,提供了一種寫數(shù)據(jù)的方法,包括:
[0008]接收光模塊發(fā)送的寫數(shù)據(jù)指令,其中,所述寫數(shù)據(jù)指令中包含了待寫入閃存Flash的數(shù)據(jù);
[0009]根據(jù)所述寫數(shù)據(jù)指令中包含了待寫入Flash的數(shù)據(jù)的邏輯地址,確定所述待寫入Flash的數(shù)據(jù)存儲在所述Flash內(nèi)部的物理地址;
[0010]根據(jù)設(shè)定的物理地址與至少兩個存儲區(qū)域之間的對應關(guān)系,得到確定的所述物理地址對應的至少兩個存儲區(qū)域;并
[0011]從得到的所述至少兩個存儲區(qū)域中選擇一個存儲區(qū)域,在所述選擇的存儲區(qū)域內(nèi)沒有存儲數(shù)據(jù)時,將所述待寫入Flash的數(shù)據(jù)直接寫入所述選擇的存儲區(qū)域。
[0012]結(jié)合本發(fā)明第一方面可能的實施方式中,第一種可能的實施方式,所述設(shè)定的物理地址與至少兩個存儲區(qū)域之間的對應關(guān)系的確定方式包括:
[0013]預先將Flash內(nèi)部的存儲區(qū)域劃分成N個子存儲區(qū)域,其中,N為自然數(shù);
[0014]從N份存儲區(qū)域中選擇至少兩個子存儲區(qū)域作為一個物理地址對應的存儲區(qū)域,并建立所述物理地址與所述至少兩個子存儲區(qū)域之間的對應關(guān)系,其中,不同物理地址對應的子存儲區(qū)域不同。
[0015]結(jié)合本發(fā)明第一方面的第一種可能的實施方式中,第二種可能的實施方式,所述將Flash內(nèi)部的存儲區(qū)域劃分成N個子存儲區(qū)域,包括:
[0016]將Flash內(nèi)部的存儲區(qū)域平均劃分成N個子存儲區(qū)域。
[0017]結(jié)合本發(fā)明第一方面可能的實施方式中,或者結(jié)合本發(fā)明第一方面的第一種可能的實施方式中,或者結(jié)合本發(fā)明第一方面的第二種可能的實施方式中,第三種可能的實施方式,所述從得到的所述至少兩個存儲區(qū)域中選擇一個存儲區(qū)域,在所述選擇的存儲區(qū)域沒有存儲數(shù)據(jù)時,將所述待寫入Flash的數(shù)據(jù)直接寫入所述選擇的存儲區(qū)域,包括:
[0018]從得到的所述至少兩個存儲區(qū)域中選擇一個存儲區(qū)域,并判斷所述選擇的存儲區(qū)域內(nèi)是否已存儲數(shù)據(jù);
[0019]若所述選擇的存儲區(qū)域內(nèi)沒有存儲數(shù)據(jù)時,將所述待寫入Flash的數(shù)據(jù)直接寫入所述選擇的存儲區(qū)域。
[0020]結(jié)合本發(fā)明第一方面的第三種可能的實施方式中,第四種可能的實施方式,所述方法還包括:
[0021]若所述選擇的存儲區(qū)域內(nèi)已有存儲數(shù)據(jù)時,將所述存儲區(qū)域內(nèi)的存儲數(shù)據(jù)與所述待寫入Flash的數(shù)據(jù)進行比較;
[0022]當所述存儲區(qū)域內(nèi)的存儲數(shù)據(jù)與所述待寫入Flash的數(shù)據(jù)相同時,觸發(fā)所述待寫入Flash的數(shù)據(jù)寫完成指令;
[0023]當所述存儲區(qū)域內(nèi)寫入數(shù)據(jù)與所述待寫入Flash的數(shù)據(jù)不相同時,繼續(xù)選擇下一個存儲區(qū)域,直至在確定選擇的所述下一個存儲區(qū)域內(nèi)沒有存儲數(shù)據(jù)時,將所述待寫入Flash的數(shù)據(jù)直接寫入選擇的所述下一個存儲區(qū)域。
[0024]結(jié)合本發(fā)明第一方面的第四種可能的實施方式中,第五種可能的實施方式,所述方法還包括:
[0025]在當所述存儲區(qū)域內(nèi)寫入數(shù)據(jù)與所述待寫入Flash的數(shù)據(jù)相同時觸發(fā)所述待寫入Flash的數(shù)據(jù)寫完成指令時,記錄所述存儲區(qū)域與所述待寫入Flash的數(shù)據(jù)之間的對應關(guān)系,以便于在讀取所述待寫入Flash的數(shù)據(jù)時,確定讀取所述待寫入Flash的數(shù)據(jù)的存儲區(qū)域。
[0026]結(jié)合本發(fā)明第一方面可能的實施方式中,或者結(jié)合本發(fā)明第一方面的第一種可能的實施方式中,或者結(jié)合本發(fā)明第一方面的第二種可能的實施方式中,或者結(jié)合本發(fā)明第一方面的第三種可能的實施方式中,或者結(jié)合本發(fā)明第一方面的第四種可能的實施方式中,或者結(jié)合本發(fā)明第一方面的第五種可能的實施方式中,第六種可能的實施方式,所述Flash內(nèi)部的存儲區(qū)域?qū)儆谝巡脸鎯^(qū)域,處于可被寫入數(shù)據(jù)的狀態(tài)。
[0027]根據(jù)本發(fā)明的第二方面,提供了一種寫數(shù)據(jù)的設(shè)備,包括:
[0028]接收模塊,用于接收光模塊發(fā)送的寫數(shù)據(jù)指令,其中,所述寫數(shù)據(jù)指令中包含了待寫入閃存Flash的數(shù)據(jù);
[0029]確定模塊,用于根據(jù)所述寫數(shù)據(jù)指令中包含了待寫入Flash的數(shù)據(jù)的邏輯地址,確定所述接收模塊接收到的所述待寫入Flash的數(shù)據(jù)存儲在所述Flash內(nèi)部的物理地址;
[0030]寫數(shù)據(jù)模塊,用于根據(jù)設(shè)定的物理地址與至少兩個存儲區(qū)域之間的對應關(guān)系,得到所述確定模塊確定的所述物理地址對應的至少兩個存儲區(qū)域;并從得到的所述至少兩個存儲區(qū)域中選擇一個存儲區(qū)域,在所述選擇的存儲區(qū)域內(nèi)沒有存儲數(shù)據(jù)時,將所述接收模塊接收到的所述待寫入Flash的數(shù)據(jù)直接寫入所述選擇的存儲區(qū)域。
[0031]結(jié)合本發(fā)明第二方面可能的實施方式中,第一種可能的實施方式,所述設(shè)備還包括對應關(guān)系確定t吳塊,其中:
[0032]所述對應關(guān)系確定模塊,用于確定物理地址與至少兩個存儲區(qū)域之間的對應關(guān)系,具體用于:
[0033]預先將Flash內(nèi)部的存儲區(qū)域劃分成N個子存儲區(qū)域,其中,N為自然數(shù);
[0034]從N份存儲區(qū)域中選擇至少兩個子存儲區(qū)域作為一個物理地址對應的存儲區(qū)域,并建立所述物理地址與所述至少兩個子存儲區(qū)域之間的對應關(guān)系,其中,不同物理地址對應的子存儲區(qū)域不同。
[0035]結(jié)合本發(fā)明第二方面的第一種可能的實施方式中,第二種可能的實施方式,所述對應關(guān)系確定模塊,具體用于將Flash內(nèi)部的存儲區(qū)域平均劃分成N個子存儲區(qū)域。
[0036]結(jié)合本發(fā)明第二方面可能的實施方式中,或者結(jié)合本發(fā)明第二方面的第一種可能的實施方式中,或者結(jié)合本發(fā)明第二方面的第二種可能的實施方式中,第三種可能的實施方式,所述寫數(shù)據(jù)模塊,具體用于從得到的所述至少兩個存儲區(qū)域中選擇一個存儲區(qū)域,并判斷所述選擇的存儲區(qū)域內(nèi)是否已存儲數(shù)據(jù);
[0037]若所述選擇的存儲區(qū)域內(nèi)沒有存儲數(shù)據(jù)時,將所述待寫入Flash的數(shù)據(jù)直接寫入所述選擇的存儲區(qū)域。
[0038]結(jié)合本發(fā)明第二方面的第三種可能的實施方式中,第四種可能的實施方式,所述寫數(shù)據(jù)模塊,還用于若所述選擇的存儲區(qū)域內(nèi)已有存儲數(shù)據(jù)時,將所述存儲區(qū)域內(nèi)的存儲數(shù)據(jù)與所述待寫入Flash的數(shù)據(jù)進行比較;
[0039]當所述存儲區(qū)域內(nèi)的存儲數(shù)據(jù)與所述待寫入Flash的數(shù)據(jù)相同時,觸發(fā)所述待寫入Flash的數(shù)據(jù)寫完成指令;
[0040]當所述存儲區(qū)域內(nèi)寫入數(shù)據(jù)與所述待寫入Flash的數(shù)據(jù)不相同時,繼續(xù)選擇下一個存儲區(qū)域,直至在確定選擇的所述下一個存儲區(qū)域內(nèi)沒有存儲數(shù)據(jù)時,將所述待寫入Flash的數(shù)據(jù)直接寫入選擇的所述下一個存儲區(qū)域。
[0041]結(jié)合本發(fā)明第二方面的第四種可能的實施方式中,第五種可能的實施方式,所述設(shè)備還包括:
[0042]記錄模塊,用于當所述寫數(shù)據(jù)模塊在所述存儲區(qū)域內(nèi)寫入數(shù)據(jù)與所述待寫入Flash的數(shù)據(jù)相同時觸發(fā)所述待寫入Flash的數(shù)據(jù)寫完成指令時,記錄所述存儲區(qū)域與所述待寫入Flash的數(shù)據(jù)之間的對應關(guān)系,以便于在讀取所述待寫入Flash的數(shù)據(jù)時,確定讀取所述待寫入Flash的數(shù)據(jù)的存儲區(qū)域。
[0043]結(jié)合本發(fā)明第二方面可能的實施方式中,或者結(jié)合本發(fā)明第二方面的第一種可能的實施方式中,或者結(jié)合本發(fā)明第二方面的第二種可能的實施方式中,或者結(jié)合本發(fā)明第二方面的第三種可能的實施方式中,或者結(jié)合本發(fā)明第二方面的第四種可能的實施方式中,或者結(jié)合本發(fā)明第二方面的第五種可能的實施方式中,第六種可能的實施方式,所述Flash內(nèi)部的存儲區(qū)域?qū)儆谝巡脸鎯^(qū)域,處于可被寫入數(shù)據(jù)的狀態(tài)。
[0044]根據(jù)本發(fā)明的第三方面,提供了一種寫數(shù)據(jù)的設(shè)備,包括:
[0045]通信總線,用于存儲器與處理器之間的通信;
[0046]存儲器,用于存儲寫數(shù)據(jù)的應用程序代碼;
[0047]處理器,用于執(zhí)行存儲器中存儲的寫數(shù)據(jù)的應用程序代碼,具體執(zhí)行:
[0048]接收光模塊發(fā)送的寫數(shù)據(jù)指令,其中,所述寫數(shù)據(jù)指令中包含了待寫入閃存Flash的數(shù)據(jù);
[0049]根據(jù)所述寫數(shù)據(jù)指令中包含了待寫入Flash的數(shù)據(jù)的邏輯地址,確定所述待寫入Flash的數(shù)據(jù)存儲在所述Flash內(nèi)部的物理地址;
[0050]根據(jù)設(shè)定的物理地址與至少兩個存儲區(qū)域之間的對應關(guān)系,得到確定的所述物理地址對應的至少兩個存儲區(qū)域;并