引 言
文件在現(xiàn)代電子設(shè)備中非常重要。處理器通過(guò)操作系統(tǒng)對(duì)不同類型的文件進(jìn)行訪問(wèn),但是在嵌入式領(lǐng)域和低功耗定制 Linux解決方案中,相關(guān)的方案比較少見(jiàn)。很多嵌入式開(kāi)發(fā)者習(xí)慣把數(shù)據(jù)放在代碼中,導(dǎo)致每次改動(dòng)都需要升級(jí)固件代碼。JesFS嵌入式文件系統(tǒng)就是要解決這類問(wèn)題——專門(mén)為小型低功耗設(shè)備設(shè)計(jì)。 電影《終結(jié)者2-審判日》中,機(jī)器人T 800(施瓦辛格)說(shuō)過(guò)“我有詳細(xì)的文件”,以此來(lái)表明他是一個(gè)強(qiáng)大的戰(zhàn)斗機(jī)器人。這里說(shuō)到了關(guān)鍵:文件無(wú)疑是高科技產(chǎn)品的關(guān)鍵元素! 這一點(diǎn),同樣適用于所有的嵌入式系統(tǒng)。這篇文章將為您介紹一個(gè)合適的嵌入式文件系統(tǒng)。
文件與代碼
文件本質(zhì)是一個(gè)基本的容器,用來(lái)組織和傳輸各種類型的信息。大到服務(wù)器,小到單片機(jī),都可以理解這些信息,操作系統(tǒng)針對(duì)不同的文件提供了接口。 在嵌入式系統(tǒng)領(lǐng)域和低功耗定制 Linux解決方案中,相關(guān)方案很少。在很多重要項(xiàng)目中,代碼和數(shù)據(jù)沒(méi)有分離,常常導(dǎo)致項(xiàng)目失敗。舉例來(lái)說(shuō),系統(tǒng)參數(shù)放在代碼里很容易,但是如果以后想修改,每次都必須升級(jí)固件。然而,現(xiàn)在通常的做法是在線更新。 筆者從業(yè)于高海拔地區(qū)的科學(xué)測(cè)量和相關(guān)儀器領(lǐng)域,幾個(gè)月前有一次相關(guān)的經(jīng)歷:在海拔3000米的山上,為一個(gè)老舊設(shè)備更改配置。經(jīng)過(guò)精疲力盡的挖掘后,筆者認(rèn)為通過(guò)互聯(lián)網(wǎng)更新,比在-20 ℃的雪地中挖洞更新要容易得多。最終,筆者決定使用文件系統(tǒng)。 雖然有很多嵌入式文件系統(tǒng),但這些文件系統(tǒng)大多只適配它們所在的領(lǐng)域。所以筆者決定自己開(kāi)發(fā)一個(gè)。最終,JesFS(Jo’sembeddedFileSystem 的縮寫(xiě))誕生了,面向微小系統(tǒng)和極低功耗的應(yīng)用。
JesFS
設(shè)計(jì)JesFS最重要的標(biāo)準(zhǔn)就是可靠性和小封裝,同樣重要的還有數(shù)據(jù)完整性和遠(yuǎn)程固件升級(jí)。配合JesFS,還需要開(kāi)發(fā)JesFS的bootloader,幫助處理器讀取 AES加密固件。bootloader 和JesFS完全獨(dú)立,這里不做討論。Jurgen Wickenhauser 目前全部精力都在 JesFS 上。JesFS 已經(jīng)是一個(gè)重要不可或缺的工具。JesFS在GPL v3[1]協(xié)議下開(kāi)源。
參考實(shí)例
JesFS使用標(biāo)準(zhǔn)C編譯器編譯。接下來(lái)將會(huì)在TI的CC1310 開(kāi)發(fā)板上展示一些功能。CC1310 基于32位ARM Cortex - M3架構(gòu),具有868/915 MHz無(wú)線傳輸功能。
CC13xx/26xx系列處理器的Launchpad開(kāi)發(fā)平臺(tái)物美價(jià)廉,配備TI的CCSTUDIO[3]IDE,可以進(jìn)行源代碼調(diào)試。CC13xx/26xx開(kāi)發(fā)平臺(tái)配備了一片1MB的串行Flash存儲(chǔ)器,大小只有2mmx3mm! 免費(fèi)的TI-RTOS可以提供一個(gè)工業(yè)級(jí)的實(shí)時(shí)操作系統(tǒng)以及TI大量的技術(shù)支持。JesFS 的源代碼既可以在Launchpad開(kāi)發(fā)平臺(tái)上編譯,也可以使用 Windows或Linux平臺(tái)的標(biāo)準(zhǔn)C編譯器進(jìn)行編譯,但是需要具有模擬Flash存儲(chǔ)器驅(qū)動(dòng)的支持。
小型 Flash存儲(chǔ)芯片
嵌入式系統(tǒng)通常不需要太多的存儲(chǔ)空間,1~16 MB 就足夠了。Flash存儲(chǔ)芯片現(xiàn)在可以制造得非常?。? MB Flash可以小到1.24 mmx1.29 mm(見(jiàn)圖2)。
JesFS文件系統(tǒng)本身占用的空間非常小,僅僅占用RAM的200字節(jié)就可以運(yùn)行得很好。還有一方面是經(jīng)濟(jì)原因:許多大型文件系統(tǒng)使用RAM作為緩存,不僅很復(fù)雜,占用很多的存儲(chǔ)空間,而且切換操作模式(比如休眠或關(guān)機(jī))會(huì)很慢。Jes-FS設(shè)計(jì)之初就考慮到低功耗的問(wèn)題,可以在幾毫秒內(nèi)實(shí)現(xiàn)休眠和喚醒。而且,串行存儲(chǔ)器在睡眠模式下消耗電流小于1μA,非常適合電池供電設(shè)備。
針對(duì) loT 的獨(dú)有功能
JesFS的一個(gè)基本特性是:可以把嵌入式系統(tǒng)的文件通過(guò)互聯(lián)網(wǎng)自動(dòng)地鏡像存儲(chǔ)到服務(wù)器,服務(wù)器因此具有嵌入式文件系統(tǒng)的一個(gè)實(shí)時(shí)更新的副本。這個(gè)特性也可以用在分鐘級(jí)獲取數(shù)據(jù)的場(chǎng)景,但是為了降低功耗,一般不會(huì)頻繁通過(guò)互聯(lián)網(wǎng)對(duì)比更新服務(wù)器副本(通常幾小時(shí)一次)。 即使傳輸了新文件、遠(yuǎn)程升級(jí)了固件,只要有需要,JesFS就可以通過(guò)特殊標(biāo)志位(時(shí)間戳和CRC32 哈希校驗(yàn))很容易地從服務(wù)器上找回文件。如果展開(kāi)這些特殊的用法將有無(wú)數(shù)種可能的應(yīng)用場(chǎng)景。所有的特性和腳本,作者都經(jīng)過(guò)仔細(xì)測(cè)試。關(guān)于FesFS文件系統(tǒng)功能的詳細(xì)描述,可以參考相關(guān)鏈接[1]。
解決目標(biāo):未關(guān)閉的文件
對(duì)大多數(shù)文件系統(tǒng)來(lái)說(shuō),如果沒(méi)有打開(kāi)文件的寫(xiě)入權(quán)限,就只能讀文件。那么問(wèn)題來(lái)了:一個(gè)異常可能導(dǎo)致未關(guān)閉文件,甚至最壞的情況下導(dǎo)致數(shù)據(jù)丟失。而JesFS不會(huì)出現(xiàn)這種情況,文件在任何時(shí)候都可以打開(kāi)讀寫(xiě),而且不會(huì)導(dǎo)致數(shù)據(jù)丟失。這個(gè)特性非常適合日志文件,例如,嵌入式系統(tǒng)存儲(chǔ)新數(shù)據(jù),同時(shí)服務(wù)器更新到最新數(shù)據(jù)。
JesFS 的限制
JesFS甩掉沉重的負(fù)擔(dān)后,訪問(wèn)次數(shù)還沒(méi)有調(diào)整到最優(yōu)。未來(lái)還將對(duì)未關(guān)閉文件做一些小的調(diào)整和限制。因?yàn)槭轻槍?duì)資源有限的小型嵌入式系統(tǒng)設(shè)計(jì)的簡(jiǎn)單文件系統(tǒng),所以對(duì)文件名長(zhǎng)度進(jìn)行了限制,最多21個(gè)字符。為了減輕CPU負(fù)擔(dān),也沒(méi)有實(shí)現(xiàn)索引數(shù)據(jù)??傮w來(lái)說(shuō),就是一個(gè)扁平化的文件系統(tǒng)。針對(duì)小型系統(tǒng)的實(shí)際應(yīng)用,這些限制不應(yīng)引起任何相關(guān)的限制。JesFS文件系統(tǒng)的簡(jiǎn)潔和易用,可以大大提高效率。作者本人就是最嚴(yán)格的測(cè)試者。
串行 Flash存儲(chǔ)器
設(shè)計(jì)軟件細(xì)節(jié)之前,先介紹幾個(gè)關(guān)于Flash存儲(chǔ)器的基本知識(shí)。Flash存儲(chǔ)器有許多種類型,在嵌入式系統(tǒng)領(lǐng)域主要會(huì)用到串行NOR Flash芯片。為了能讓JesFS更好地適配硬件,有些需要詳細(xì)說(shuō)明,同時(shí)也涉及到一些底層驅(qū)動(dòng)的開(kāi)發(fā)。 總體來(lái)說(shuō),幾乎所有相關(guān)的Flash存儲(chǔ)器都有類似的結(jié)構(gòu),只是在容量、靜態(tài)電流、最大時(shí)鐘速率、數(shù)據(jù)位數(shù)方面有所不同。所有串行 NOR Flash芯片都有6個(gè)共同特性: ①空存儲(chǔ)器,默認(rèn)存儲(chǔ)位為‘1’; ②寫(xiě)入數(shù)據(jù)時(shí),根據(jù)需要把存儲(chǔ)位‘1’設(shè)置成‘0’; ③相反,擦除操作把數(shù)據(jù)位從‘0’恢復(fù)成‘1’; ④每一個(gè)寫(xiě)操作可以寫(xiě)入1~256字節(jié)數(shù)據(jù),大概需要1 ms; ⑤數(shù)據(jù)以塊或扇區(qū)或全部擦除,扇區(qū)通常4KB,擦除一個(gè)扇區(qū)需要20~200 ms(扇區(qū)擦除通常很少用到); ⑥擦除操作是有次數(shù)限制的,通常不超過(guò)100 000次。 訪問(wèn)串行 Flash 芯片很容易,只需要進(jìn)行4步操作(見(jiàn)圖): ①SELECT引腳電平從1到0后的幾納秒內(nèi),芯片激活; ②通過(guò)CLK引腳(時(shí)鐘)和DIN引腳(數(shù)據(jù))寫(xiě)入數(shù)據(jù)和命令; ③通過(guò)CLK(時(shí)鐘)引腳和DOUT(數(shù)據(jù)/狀態(tài))引腳讀取數(shù)據(jù)和狀態(tài); ④SELECT 引腳電平從0到1,結(jié)束操作。
圖? 8腳串行 Flash 引腳分配
串行 Flash 芯片最大時(shí)鐘速率通常很高(>50MHz),多數(shù)微處理器的硬件驅(qū)動(dòng)不能充分利用。這里參考設(shè)計(jì)平臺(tái)使用的CC1310處理器的12 MHz時(shí)鐘速率,可以達(dá)到很不錯(cuò)的1MB/s的數(shù)據(jù)吞吐量。 下面推薦適用于小型系統(tǒng)的通用存儲(chǔ)芯片,雖然有些有兼容的替代芯片,但替代芯片功耗可能會(huì)比較高: ◆MX25R8035F (1 MB) to MX25R1635F (16 MB) ◆W25Q80DL (1 MB) to W25Q128JV (16 MB) ◆GD25Q16 (2 MB)?
黑盒Demo:家用飛行記錄儀
許多嵌入式設(shè)備在幾年的生命周期內(nèi)都可以無(wú)錯(cuò)誤運(yùn)行,但偶爾也會(huì)產(chǎn)生錯(cuò)誤。產(chǎn)生錯(cuò)誤時(shí),我們會(huì)問(wèn):“發(fā)生了什么?”要回答這個(gè)問(wèn)題,我們需要有足夠的歷史日志數(shù)據(jù)分析和診斷。舉例來(lái)說(shuō),內(nèi)部參數(shù)(如溫度、電壓、濕度)是否發(fā)生了改變?是否有人進(jìn)行了調(diào)整?之前是否有過(guò)類似的問(wèn)題?這些問(wèn)題與飛機(jī)上的黑盒子相似。 然而,嵌入式系統(tǒng)通常沒(méi)有足夠的空間做這些。不過(guò),JesFS文件系統(tǒng)的未關(guān)閉文件可以穩(wěn)定、高效地記錄診斷數(shù)據(jù)。JesFS可以避免產(chǎn)生僵尸數(shù)據(jù),即使是在復(fù)位或斷電的極端情況下,也可以寫(xiě)入數(shù)據(jù)。 依靠?jī)蓚€(gè)文件來(lái)實(shí)現(xiàn)這一目的: ◆ 主文件Data. pri 可以寫(xiě)入最大數(shù)據(jù)長(zhǎng)度為HIS-TORY定義的長(zhǎng)度; ◆ 改名為輔助名Data. sec; ◆ 新創(chuàng)建的輔助文件替換原有的輔助文件。 通過(guò)定義HISTORY,可以得到特定長(zhǎng)度的歷史數(shù)據(jù),從而確保歷史數(shù)據(jù)的歷史記錄數(shù)量是一個(gè)常量,且不會(huì)超過(guò)2倍的歷史記錄。通過(guò)檢索數(shù)據(jù)來(lái)獲得正確的順序,首先是Data. sec,然后是 Data. pri。 可以在相關(guān)鏈接[1]中找到針對(duì)各種編譯器(PC和嵌入式)的BlackBox演示的完整的文檔化源代碼,包括Jes-FS的源代碼文件。這里打印的清單顯示了代碼的摘錄:
***************************************
*log_blackbox(char * logtext,?uint16_t len)
*Thisfunktion logs one line to the the history
*****************************************
int16_tlog_blackbox(char* logtext,?uint16_tlen){
FS_DESCfs_desc,fs_desc_sec; //2 JesFs file descriptors int16_t res;
res=fs_start(FS_START_RESTART);
//(fast) WAKE JesFs (might be sleeping)if(res) return res;
//Flags (seedocu) : CREATE File if not exists and open in
//RAW mode,(RAW needed because in RAW -Mode file is not truncated if existing)
res=fs_open( &fs_desc,"Data,?pri",SF_OPEN_CREATE SF_OPEN_RAW);
if(res)return res;
//Place (internal) file pointer to the end of the file to allow write fs_read(&fs_desc,NULL,0xFFFFFFFF);
//(dummy) read as much as possible
//write the new data (ASCII,?from function rguments) to
//the file
res=fs_write(&fs_desc,logtext,tlen);
if(res) return res;
//Show what was written
uart_printf("Pos:%u Log: %s",fs_desc. file_len,?"logtext);
//Now make a file shift if more data than defined in HISTORY if(fs_desc. file_len>= HISTORY){
uart_printf("Shift 'Data. pri' ->'Data. sec' ");
//Optionally delete and (butCREATE in any case) backup file
res= fs_open (&fs_desc_sec,"Data. sec",?SF_OPEN if(res)return res;CREATE);
if(res) return res;
//rename (full) data file to secondary file
res=fs_rename( &fs_desc,?&fs_desc_sec);
if(res) return res;
}
fs_deepsleep(); ?//Set Filesystem to UltraLowPowerMode
return0; ?//OK
驅(qū)動(dòng)程序基礎(chǔ)
JesFS使用上層和底層驅(qū)動(dòng)程序。底層驅(qū)動(dòng)程序針對(duì)串行Flash,再次被劃分為通用命令 JesFS_ml.c和串行SPI的硬件控制部分(這里是jesfs_tirto. c)。上層驅(qū)動(dòng)程序在相關(guān)鏈接[1]中有詳細(xì)描述。 閃存的處理非常簡(jiǎn)單(大多數(shù)閃存芯片使用的特殊命令在這里不使用),但是很少有命令是相關(guān)的,幸運(yùn)的是,對(duì)于幾乎所有可用的串行 Flash 芯片都是相同的。對(duì)于更大的容量(≥32MB),也只是把地址從3字節(jié)擴(kuò)展到了4字節(jié)。 源代碼文件更精確地記錄了命令。以下是十六進(jìn)制記數(shù)法的命令概述。 9Fh:讀取一個(gè)3字節(jié)的ID(十六進(jìn)制),其中對(duì)制造商、類型和容量(十六進(jìn)制2的乘方)進(jìn)行了編碼。對(duì)于在CC1310中的MX25R8035芯片,這個(gè)ID是“C22814”,其中C2h=Macronix,28h=Type, 14h=20=220=1 MB。 B9h:讓閃存芯片進(jìn)入深度睡眠。 ABh:在5~50 μs內(nèi)喚醒閃存芯片。 03h:讀操作。首先,準(zhǔn)備讀取3字節(jié)地址(對(duì)32 MB 的容量來(lái)說(shuō)是4字節(jié)),讀取完數(shù)據(jù)后,cs#變高。 06h:必須在每次寫(xiě)/刪除操作之前發(fā)送。 02h:寫(xiě)操作。首先發(fā)送3或4個(gè)地址字節(jié),然后是1~256字節(jié)數(shù)據(jù),不超過(guò)256字節(jié)。 20h:刪除扇區(qū)。首先發(fā)送3或4個(gè)地址字節(jié),然后刪除相關(guān)的4 KB扇區(qū)。 05h:測(cè)試之前的寫(xiě)/刪除命令是否已經(jīng)完成。
Flash中的組織結(jié)構(gòu)
實(shí)現(xiàn)的細(xì)節(jié)和圖形可以在JesFS[1]的文檔和源代碼中找到,這里只畫(huà)了結(jié)構(gòu)。JesFS將閃存分為3種不同的扇區(qū)類型。每個(gè)邏輯扇區(qū)與閃存芯片中的一個(gè)物理4KB扇區(qū)對(duì)齊。因此,一個(gè)容量為1 MB的閃存芯片最多可以存儲(chǔ)255個(gè)文件。 扇區(qū)0具有特殊的意義,因?yàn)樗米魑募饕?。每個(gè)索引條目占用4個(gè)字節(jié)。因此,可以將索引視為一個(gè)包含1024個(gè)"無(wú)符號(hào)長(zhǎng)整數(shù)"的數(shù)組。對(duì)于0扇區(qū),必須遵守以下規(guī)定: ◆ 索引扇區(qū)0僅在格式化期間刪除; ◆ 前3個(gè)條目包含格式化信息 Magic value、Flash ID (參見(jiàn)命令9Fh)和格式化日期(從 1970.1.1開(kāi)始的Unix秒數(shù)),F(xiàn)FFF FFFFh值被計(jì)算為無(wú)效/未格式化; ◆ 其余的1021項(xiàng)是文件heads的起始地址,所有這些項(xiàng)必須能被212=4096(扇區(qū)大?。┱↗esFS 會(huì)檢查)。理論上,最多可以有1021個(gè)文件。 對(duì)于1至n扇區(qū)有5種可能: ◆ 扇區(qū)為空(包含F(xiàn)Fh值的完整字節(jié)); ◆ 扇區(qū)是活躍文件的頭; ◆ 扇區(qū)是指向已刪除文件的頭; ◆ 扇區(qū)是活躍文件的一部分; ◆ 扇區(qū)是活躍文件中已刪除的部分。 head是索引指向的扇區(qū)。因此,對(duì)heads進(jìn)行特殊處理是很重要的,因?yàn)橹挥性诟袷交瘯r(shí)才會(huì)刪除索引中的值。每個(gè)扇區(qū)總是以3個(gè)(或12個(gè) heads)"unsigned long"類型的值開(kāi)始: ◆ 使用magic value(頭,文件或空); ◆ 此區(qū)塊的所有者(引用頭部,如果該塊本身是頭部,則引用FFFF FFFFh值); ◆指向該文件的下一個(gè)區(qū)塊的指針,或者FFFF FFFFh(如果這是鏈的最后一個(gè)塊); 然后要么是文件數(shù)據(jù),要么是一個(gè)head: ◆文件長(zhǎng)度,以字節(jié)或FFFF FFFFh表示; ◆ 可選的CRC32 哈希校驗(yàn)(如果在CRC32 模式下寫(xiě)入并關(guān)閉的); ◆ 文件的創(chuàng)建日期(自1970.1.1起,以Unix秒為單位); ◆ 文件名稱(最多21個(gè)字符,不包括最終字符0h); ◆文件的打開(kāi)標(biāo)志(1字節(jié)); ◆ 一個(gè)被保留的空字節(jié)。 一個(gè) head總是占用48個(gè)字節(jié),一個(gè)普通的數(shù)據(jù)扇區(qū)占用12個(gè)字節(jié),起始部分是管理信息。其結(jié)構(gòu)如圖所示。
圖 索引總是指向文件頭的扇區(qū)0?
刪除扇區(qū)僅僅做個(gè)標(biāo)記。所使用的Magic values是這樣選擇的:通過(guò)使用“0”進(jìn)行額外的覆蓋(發(fā)生得非常快)來(lái)主動(dòng)刪除狀態(tài)。只有當(dāng)一個(gè)扇區(qū)確實(shí)需要,并且沒(méi)有空閑扇區(qū)的時(shí)候,才能通過(guò)命令20h刪除,這需要更多的時(shí)間。
磨損平衡和未關(guān)閉文件
使用Flash時(shí),所有扇區(qū)的使用頻率都應(yīng)該相等,這一點(diǎn)非常重要,因?yàn)橥ǔV荒懿翆?xiě)約10萬(wàn)次。所以你可以在很短的時(shí)間內(nèi)在一個(gè)循環(huán)中“殺死”一個(gè)扇區(qū)。這種避免策略稱為“磨損平衡”。對(duì)于 JesFS,這意味著一個(gè)文件(由于索引中的固定條目)最多可以被刪除100 000次。乍一看,擦寫(xiě)次數(shù)似乎很多,但對(duì)于嵌入式系統(tǒng)來(lái)說(shuō),這個(gè)限制在某些應(yīng)用程序中肯定是有問(wèn)題的。另一方面,應(yīng)該清楚,即使每小時(shí)每個(gè)扇區(qū)擦寫(xiě)一次,也會(huì)經(jīng)過(guò)11年。對(duì)大多數(shù)項(xiàng)目來(lái)說(shuō),還是很充裕的。 為了盡可能少地刪除扇區(qū),讓活躍或使用過(guò)的文件保持打開(kāi)也是一個(gè)辦法;被刪除的字節(jié)的值總是FFh。如果有問(wèn)題的文件從未使用這個(gè)值(例如,只保存 ASCII數(shù)據(jù)或用轉(zhuǎn)義序列替換FFh),也可以通過(guò)簡(jiǎn)單讀取(最多一個(gè)FFh字符)來(lái)確定文件的結(jié)尾。JesFS有一個(gè)非??斓淖映绦?,可以在幾毫秒內(nèi)找到一個(gè)16 MB文件的結(jié)尾。
CRC-32哈希和數(shù)據(jù)完整性
只有很少的文件經(jīng)常更改。因此,JesFS在寫(xiě)(和讀)一個(gè)文件時(shí)可以加CRC-32校驗(yàn),與“文件關(guān)閉”中頭部的長(zhǎng)度一起記錄下來(lái)。通過(guò)這種方式,可以在任何時(shí)候通過(guò)簡(jiǎn)單地讀取文件來(lái)檢查文件的完整性。所使用的CRC-32算法是行業(yè)標(biāo)準(zhǔn)(ISO 3309等),甚至得到了PHP(一種常見(jiàn)的服務(wù)器腳本語(yǔ)言)的支持。 在JesFS開(kāi)始時(shí)(或者在系統(tǒng)每次喚醒之后)執(zhí)行一個(gè)全面的測(cè)試來(lái)檢查JesFS的基本完整性。JesFS非常注意 bug。演示的源代碼中還包含一項(xiàng)功能,可以檢查完整的JesFS“心臟和腎臟”(即所有扇區(qū)和文件)。
引導(dǎo)程序和固件升級(jí)
由于JesFS的結(jié)構(gòu)非常簡(jiǎn)單,即使是一個(gè)簡(jiǎn)單的引導(dǎo)程序也可以輕松地讀取文件并測(cè)試完整性。但是,引導(dǎo)程序通常只綁定到特定的CPU架構(gòu)或控制器類型。
測(cè)試 JesFS
測(cè)試JesFS的最簡(jiǎn)單方法是使用CC13xx/26xx系列的launchpad開(kāi)發(fā)平臺(tái),這些板卡大約30歐元。在Github 上的JesFS文檔中,還可以找到一個(gè)簡(jiǎn)單的控制臺(tái)應(yīng)用程序的手冊(cè)。 除此之外,還可以在運(yùn)行 Windows或Linux的PC上編譯JesFS,在RAM中模擬Flash芯片。生成的image文件完全兼容Flash芯片。如果微控制器的數(shù)據(jù)格式是lit-tle-endian的,可以很容易地通過(guò)編程器進(jìn)行傳輸或讀取,大多數(shù) ARM SoC(如 MSP430、MSP432等)都支持。
下一步做什么?
根據(jù)讀者的反饋,這個(gè)報(bào)告僅僅是一個(gè)開(kāi)始。文件系統(tǒng)不是一件簡(jiǎn)單的事情,但是如果JesFS能夠成為一種通用的工具,作者將會(huì)非常高興,并深信它具有驚人的潛力。 當(dāng)然,JesFS不僅限于CC13xx/26XX系列的控制器,而且在原則上幾乎適用于 16位以上的所有處理器。Jurgen Wickenhauser 目前正在為MSP430系列移植Jes-FS,還有許多可以想到的與JesFS結(jié)合的項(xiàng)目,特別是無(wú)處不在的物聯(lián)網(wǎng)提供了無(wú)限的可能性。如果你真的感興趣,可以通過(guò)作者的電子郵件(joembedded@gmail. com)聯(lián)系。
相關(guān)鏈接
[1] JesFS V1.1 auf Github: https://github. com/joem-bedded/JesFS
[2] TI-Launchpad: www,ti,com/tool/LAUNCHXL-CC1310
[3] CCSTUDIO:www.ti. com/tool/CCSTUDIO
[4] Macronix Flash: www. macronix. com/en - us/prod-ucts/NOR - Flash/Serial-NOR - Flash
Von Wickenhauser:從小就對(duì)電子產(chǎn)品充滿熱情。在學(xué)習(xí)了電氣工程之后,于 1992 年把愛(ài)好變成了職業(yè),在德國(guó)南部從事科學(xué)環(huán)境測(cè)量?jī)x器方面的開(kāi)發(fā)工作。
作者:Von Wickenh?user
譯者:透鏡
審核編輯:黃飛
?
評(píng)論