顧會(huì)光,王宜懷,史新峰
(蘇州大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇 蘇州215006)
在科學(xué)研究等領(lǐng)域,有些數(shù)據(jù)極其珍貴,丟失2分鐘、3分鐘內(nèi)采集的數(shù)據(jù)也變得無法容忍,這對(duì)無線遠(yuǎn)程代碼更新機(jī)制帶來了新的挑戰(zhàn)。然而現(xiàn)存的技術(shù)受網(wǎng)絡(luò)質(zhì)量、環(huán)境的影響或多或少的存在代碼更新延遲,更有甚者代碼更新失敗,這不可避免造成了大量的數(shù)據(jù)丟失?;诖耍疚奶岢鲆环N“數(shù)據(jù)無損”的無線遠(yuǎn)程代碼更新機(jī)制,該機(jī)制大大縮減代碼更新所需時(shí)間,可實(shí)現(xiàn)2HZ以下數(shù)據(jù)的無損采集。
本文搭建的系統(tǒng)結(jié)合了GPRS和ZigBee技術(shù),并在無線傳感器網(wǎng)絡(luò)中得到了實(shí)際應(yīng)用。如圖1所示的無線傳感器網(wǎng)絡(luò)中,無線傳感器節(jié)點(diǎn)內(nèi)置ZigBee模塊,將采集到的溫度、濕度等模擬量量化為數(shù)字值通過ZigBee技術(shù)傳送到網(wǎng)關(guān)節(jié)點(diǎn),網(wǎng)關(guān)節(jié)點(diǎn)將接收到的數(shù)據(jù)進(jìn)行融合后通過GPRS技術(shù)傳送到服務(wù)器,這樣,監(jiān)控端PC 就可以連接服務(wù)器實(shí)時(shí)監(jiān)測(cè)到遠(yuǎn)程的數(shù)據(jù)了。這里,遠(yuǎn)程代碼更新[1]關(guān)注的是服務(wù)器端上位機(jī)軟件與網(wǎng)關(guān)節(jié)點(diǎn)端的下位機(jī)bootloader。網(wǎng)關(guān)節(jié)點(diǎn)接收上位機(jī)發(fā)送過來的有效代碼,進(jìn)行適當(dāng)處理后存入SD 卡中,當(dāng)接收到上位機(jī)的更新代碼命令后讀取SD 卡內(nèi)容更新代碼。
如圖2所示,網(wǎng)關(guān)節(jié)點(diǎn)的控制芯片K60DN512Z與Zig-Bee模塊和MG323模塊[2](華為GPRS模塊)通過串口相連,MG323模塊與SIM 卡模塊相連。ZigBee模塊與控制芯片也通過串口連接,其定時(shí)將各傳感器采集到的數(shù)據(jù)組幀后通過串口發(fā)送給控制芯片。GPRS模塊接收到的代碼段通過串口發(fā)送給控制芯片,控制芯片處理該代碼段,若無誤則存入SD 卡的指定位置,當(dāng)接收到所有的代碼段后若接收到更新命令,則設(shè)置堆棧指針后代碼跳轉(zhuǎn)到pc指針?biāo)赶虻腷ootloader代碼處,由bootloader負(fù)責(zé)將SD 卡中的代碼取出,放入控制芯片用戶應(yīng)用程序處,完成代碼更新。
圖1 系統(tǒng)組成
圖2 網(wǎng)關(guān)節(jié)點(diǎn)硬件構(gòu)成
該網(wǎng)關(guān)節(jié)點(diǎn)中,MG323 模塊工作溫度為-30℃~+75℃,電源電壓為3.3V~4.8V (推薦值3.8V),平均待機(jī)電流<3.0 mA,支持GSM 標(biāo)準(zhǔn)AT 命令,可設(shè)置串口透明傳輸模式 (串口波特率115200bit/s)。K60DN512Z芯片的電壓范圍為1.71 V~3.6 V,工作溫度為-40℃~+105℃,64KB RAM,512KB FLASH,工作時(shí)鐘頻率為100 MHZ。這兩者之間通過串口連接,控制芯片的PTB1連接MG323的開關(guān)機(jī)引腳,PTB2連接MG323的復(fù)位引腳。
服務(wù)器端代碼更新軟件主要負(fù)責(zé)可執(zhí)行文件的有效代碼的提取和以交互通信的方式把要更新的代碼準(zhǔn)確無誤的傳輸給網(wǎng)關(guān)節(jié)點(diǎn)。
S19文件[3](S-record格式文件)是freescale編譯器生成的機(jī)器碼文件。其由若干行S 記錄構(gòu)成,每行記錄以CR/LF/NUL結(jié)尾。一行S記錄有5個(gè)部分組成,見表1。
S19文件共有9種記錄類型S0~S9。S0為程序開始記錄,不包含有效代碼,無需寫入Flash。S1~S3 分別為8位、16位和32位MCU 所對(duì)應(yīng)的S記錄格式,包含了機(jī)器碼文件所有的代碼,必須無差錯(cuò)的寫入由地址字段指定地址處的Flash中。S5記錄計(jì)數(shù)S1、S2、S3記錄。
S7、S8、S9分別為S3、S2、S1記錄的結(jié)束記錄。本文所采用的芯片為32位的MCU,因此代碼部分存儲(chǔ)在S3記錄中。
這里我們將提取S19 文件中的所有S3 記錄的有效代碼,圖3中以其在控制芯片F(xiàn)lash中的地址為下標(biāo),值為內(nèi)容存儲(chǔ)在bootimage.d[]數(shù)組中,并在相同下標(biāo)的boot.image.f[]數(shù)組中標(biāo)記其是否為有效代碼 (1:有效,0:無效)。此外,在用戶代碼中不可避免的會(huì)出現(xiàn)程序的跳轉(zhuǎn),因此映像文件中的地址會(huì)出現(xiàn)跳變,而被跳過的地址中存儲(chǔ)的內(nèi)容是無意義的,因此給其賦值0xff,但是在代碼更新的時(shí)候?qū)⑵渥鳛橛行Тa進(jìn)行傳輸并燒寫到相應(yīng)的地址處以簡(jiǎn)化傳輸過程。
表1 S記錄格式
圖3 S19文件有效代碼提取
控制芯片端主要包括bootloader設(shè)計(jì)、應(yīng)用程序中代碼幀處理與GPRS模塊的設(shè)置。
bootloader是指系統(tǒng)啟動(dòng)后,運(yùn)行在用戶應(yīng)用程序之前的一段代碼,用其來初始化硬件設(shè)備、建立內(nèi)存空間映射圖,為調(diào)用用戶應(yīng)用程序準(zhǔn)備好正確的環(huán)境。傳統(tǒng)的遠(yuǎn)程代碼更新bootloader機(jī)制依托于具體的通信接口。而本文設(shè)計(jì)的bootloader因采用代碼接收與代碼更新分離機(jī)制,故無此限制,但是需要用戶應(yīng)用程序中通信手段 (本方案采用GPRS通信)的支持。
3.1.1 向量表重定位
中斷向量是中斷源的識(shí)別標(biāo)志,可用來存放中斷服務(wù)程序的入口地址或跳轉(zhuǎn)到中斷服務(wù)程序的入口地址。程序執(zhí)行的第一條指令的地址也以中斷向量的形式給出,因此重定位中斷向量表是設(shè)計(jì)bootloader的第一步。中斷向量表重定位[4]如圖4所示。
圖4 中斷向量表重定位
圖4中最左邊為芯片存儲(chǔ)空間映像[5,6],中間圖將芯片F(xiàn)lash區(qū)劃分為bootloader代碼區(qū)和用戶代碼區(qū),bootloader代碼區(qū)包括bootloader代碼和中斷向量表,同樣的用戶代碼區(qū)包括用戶代碼和中斷向量表。其中bootloader的中斷向量表默認(rèn)處于0×0000_0000地址處,Cortex M4內(nèi)核機(jī)制使MCU 開機(jī)查找該向量表并取出應(yīng)用程序的入口地址進(jìn)行執(zhí)行。傳統(tǒng)的bootloader機(jī)制是開機(jī)即運(yùn)行bootloader代碼,在預(yù)定的時(shí)間內(nèi)若沒有接收到代碼更新命令則跳轉(zhuǎn)到用戶應(yīng)用程序中執(zhí)行,而本文設(shè)計(jì)的bootloader機(jī)制將代碼接收與代碼更新區(qū)別開來,即由用戶應(yīng)用程序接收代碼幀并存儲(chǔ)在SD 卡指定位置處,并在接收到代碼更新命令后,跳轉(zhuǎn)到bootloader代碼處,由bootloader負(fù)責(zé)將SD 卡中的代碼拷貝到MCU Flash的相應(yīng)地址處,并將指針跳轉(zhuǎn)到用戶代碼的入口地址處進(jìn)行執(zhí)行。這樣就完成可代碼更新操作。在這里,向量表重定位指得就是用戶應(yīng)用程序中本處于0×0000_0000地址處的中斷向量表搬運(yùn)到用戶代碼區(qū)所示的0×0000_8000 地址處。事實(shí)表明,用戶應(yīng)用程序與中斷向量表重定位后的用戶應(yīng)用程序的代碼完全一致,區(qū)別只是代碼在Flash中的存儲(chǔ)位置不同,它們之間的轉(zhuǎn)換公式為:用戶代碼=0×0000_8000+重定位后的用戶代碼。其中0×0000_8000是Flash區(qū)劃分的依據(jù),也是中斷向量表起始地址寄存器SCB->VTOR 中定義的中斷向量表的起始地址。
3.1.2 鏈接文件中內(nèi)存設(shè)計(jì)
網(wǎng)關(guān)節(jié)點(diǎn)采用的K60DN512Z 芯片的RAM 為64 KB,F(xiàn)lash為512KB,在鏈接文件中對(duì)bootloader和APP 應(yīng)用程序的存儲(chǔ)空間進(jìn)行劃分[7]。
bootloader代碼區(qū)Flash劃分如下:
#定義中斷向量表起始地址為0×00000000,分配空間為0×00000400B
vectorrom (RX):ORIGIN=0×00000000,LENGTH=0×00000400
#定義Flash配置域起始地址為0×00000400,分配空間為0×00000020B
cfmprotrom (R):ORIGIN=0×00000400,LENGTH=0×00000020
#定義rom 區(qū) 起始地址為0×00000420,分配空間為0×0007FBE0B
rom (RX):ORIGIN=0×00000420,LENGTH=0×0007FBE0#Code+Const data
#定義ram 區(qū) 起始地址為0×1FFF0000,分配空間為0×00020000B
ram (RW):ORIGIN=0×1FFF0000,LENGTH=0×00020000#SRAM-RW data
用戶應(yīng)用程序代碼區(qū)Flash劃分如下:
#定義中斷向量表起始地址為0×00008000,分配空間為0×00000400B
由巴丹吉林單站散度場(chǎng)垂直分布圖可見(見圖6),6月4日08:00 700~500 hPa為輻合,強(qiáng)度為-13×10-5/s,200 hPa輻散中心,強(qiáng)度為20×10-5/s,高層輻散強(qiáng)于低層輻合,表明高層輻散形成的抽吸作用十分明顯。6月4日20:00,300 hPa以下均為輻散,中低層輻合,可見低層的輻合和對(duì)流上升運(yùn)動(dòng)明顯。
vectorrom (RX):ORIGIN=0×00008000,LENGTH=0×00000400
#定義Flash配置域起始地址為0×00008400,分配空間為0×00000020B
cfmprotrom (R):ORIGIN=0×00008400,LENGTH=0×00000020
#定義rom 區(qū) 起始地址為0×00008420,分配空間為0×0007FBE0B
rom (RX):ORIGIN=0×00008420,LENGTH=0×0007CBE0#Code+Const data
#定義ram 區(qū) 起始地址為0×1FFF0000,分配空間為0×00020000B
ram (RW):ORIGIN=0×1FFF0000,LENGTH=0×00020000#SRAM-RW data
bootloader中斷向量表處于Flash 的零地址處,ROM起始地址處于0×00000420處,因?yàn)樵揵ootloader代碼量小于32KB,故其在Flash中的結(jié)束地址小于0×00008000。由此可知在應(yīng)用程序中將中斷向量表安排在0×00008000處是合適的,此時(shí)應(yīng)用程序在Flash的0×00008420地址處開始存放。這樣通過鏈接文件的劃分就能將bootloader與應(yīng)用程序代碼合理地安排在MCU 的Flash中。
該步驟中從GPRS模塊接收過來的代碼已按照格式正確的存入SD 卡。該方案中并未使用文件系統(tǒng),為了操作方便自定義了一個(gè)極其簡(jiǎn)單的文件記錄格式,如圖5所示。
圖5 SD 卡記錄格式
InitSection記錄了初始存儲(chǔ)代碼的扇區(qū)號(hào),即所有的代碼均從這一扇區(qū)開始存儲(chǔ),此字段一經(jīng)定義就無需改變。NowSecton記錄了當(dāng)前正在使用的扇區(qū)號(hào),即代碼從Init-Section扇區(qū)號(hào)開始存儲(chǔ)到NowSection扇區(qū)結(jié)束,每存儲(chǔ)一幀代碼均需更新該字段,NowSectionByes記錄了當(dāng)前扇區(qū)已用字節(jié)數(shù),即作為當(dāng)前扇區(qū)存儲(chǔ)下一幀的起始地址,也需要即時(shí)更新該字段。Fcs為初始扇區(qū)號(hào)、當(dāng)前正在使用的扇區(qū)號(hào)和當(dāng)前扇區(qū)已用字節(jié)數(shù)的32位累加和,用來確保該記錄格式的準(zhǔn)確。由于在代碼接收階段已經(jīng)確保了SD 卡內(nèi)代碼的準(zhǔn)確性,此處直接按照記錄格式將代碼拷貝到相應(yīng)的Flash處并設(shè)置堆棧并跳轉(zhuǎn)PC指針即可。
GPRS是一種基于GSM 系統(tǒng)的無線分組交換技術(shù),可用于客戶端與具有公網(wǎng)IP地址的服務(wù)器進(jìn)行TCP/IP通信,其通信速度可達(dá)115k/s。本文采用基于GPRS 的華為MG323模塊,其內(nèi)嵌TCP/IP 協(xié)議棧,可以很好的實(shí)現(xiàn)網(wǎng)關(guān)節(jié)點(diǎn)與萬維網(wǎng)的通信,以便通過網(wǎng)頁等PC 方APP 程序?qū)W(wǎng)關(guān)節(jié)點(diǎn)實(shí)施控制。
本文采用AT 命令控制來實(shí)現(xiàn)GPRS 的透明傳輸[8](傳輸過程對(duì)用戶透明,此處是指串口與網(wǎng)口互發(fā)數(shù)據(jù))。
透明傳輸?shù)某跏蓟疉T 命令如下 (以下各指令設(shè)置成功均返回OK):
經(jīng)過以上設(shè)置可以開啟MG323模塊的透明傳輸功能。此時(shí),網(wǎng)絡(luò)數(shù)據(jù)即轉(zhuǎn)化成了串口數(shù)據(jù),因此,本方案的bootoader更新轉(zhuǎn)化為基于串口的bootloader更新機(jī)制。
用戶應(yīng)用程序中的幀格式必須與服務(wù)器端軟件的幀格式[9,10]一致,此處我們對(duì)其進(jìn)行定義。該方案主要由通用命令幀、應(yīng)用信息預(yù)處理幀、代碼幀、返回幀、校驗(yàn)幀和更新幀。通用命令幀是載體,內(nèi)嵌其余5 種幀。應(yīng)用信息預(yù)處理幀傳送有效代碼字節(jié)數(shù)和包號(hào)以供控制芯片接收與校驗(yàn);代碼幀傳輸燒入到Flash中的實(shí)際內(nèi)容;校驗(yàn)幀用于保證代碼傳輸?shù)恼_性;更新幀啟動(dòng)控制芯片端代碼更新。
(1)通用命令幀COMMON 格式
n-3 n-2 n-1 N數(shù)值 0xff 0xff 保留 (0) 長(zhǎng)度高字節(jié) 長(zhǎng)度低字節(jié) 命令字 數(shù)據(jù)內(nèi)容 校驗(yàn)和字節(jié) 0 1 2 3~4 5 6~0xff 0xfe
此幀為通用幀,其它各幀內(nèi)嵌在第5~n-3字節(jié)中,其中第5字節(jié)為各幀的命令字,6~n-3字節(jié)為各幀的具體內(nèi)容,n-2字節(jié)為各幀有效代碼的累加和校驗(yàn)。
(2)應(yīng)用信息預(yù)處理幀 (ProcessAppInfoMsg)格式
此幀在通用命令幀COMMON中的各字節(jié)說明如下:3~4字節(jié)為幀長(zhǎng),第5字節(jié)為命令字CMD_APP_INFO,6~9字節(jié)為有效代碼總字節(jié)數(shù),10~11字節(jié)為更新代碼總包號(hào)。
(3)代碼幀 (ProcessTransDataMsg)格式
此幀在通用命令幀COMMON 中的各字節(jié)說明如下:3~4字節(jié)為幀長(zhǎng),第5字節(jié)為命令字CMD_TRANS_DATA,6~7字節(jié)為包號(hào),8~n-3字節(jié)為有效代碼總字節(jié)數(shù)。
(4)返回幀 (ProcessSendResponse)格式
此幀在通用命令幀COMMON 中的各字節(jié)說明如下:3~4字節(jié)為幀長(zhǎng),第5 字節(jié)為命令字CMD_RESPONSE,6~9字節(jié)當(dāng)前幀包號(hào)。
(5)校驗(yàn)幀 (ProcessAppVerificationMsg)格式
此幀在通用命令幀COMMON 中的各字節(jié)說明如下:3~4字節(jié)為幀長(zhǎng),第5 字節(jié)為命令字CMD_VERIFICATION,6~9字節(jié)為有效代碼總字節(jié)數(shù)。
(6)更新幀 (ProcessAppUpdateMsg)格式
此幀在通用命令幀COMMON 中的各字節(jié)說明如下:3~4字節(jié)為幀長(zhǎng),第5 字節(jié)為命令字CMD_UPDATE,6~9字節(jié)為有效代碼總字節(jié)數(shù)。
如圖6所示,服務(wù)器端代碼更新軟件內(nèi)嵌于服務(wù)器端應(yīng)用程序中。結(jié)合考慮GPRS的慢速數(shù)據(jù)傳輸能力、SD 卡讀寫能力和控制芯片的處理能力,該方案設(shè)計(jì)的代碼幀長(zhǎng)為512字節(jié)。因此,需將代碼拆分為若干包進(jìn)行發(fā)送。代碼更新步驟如下:
(1)服務(wù)器端首先發(fā)送ProcessAppInfoMsg幀,該幀將代碼的總字節(jié)數(shù)和總包數(shù)傳遞給控制器并由控制器寫入SD卡指定位置處中,以供校驗(yàn)幀校驗(yàn)時(shí)使用。控制器返回ProcessSendResponse幀,若該幀出錯(cuò)則重發(fā)ProcessAppInfoMsg幀。
(2)服務(wù)器端發(fā)送ProcessTransDataMsg幀,控制器端根據(jù)該幀的校驗(yàn)碼校驗(yàn)該幀,若正確則根據(jù)SD 卡的記錄格式將代碼寫入SD 卡相應(yīng)地址處;若出錯(cuò),則返回當(dāng)前應(yīng)接受幀的包號(hào)以要求服務(wù)器重發(fā)該幀。此外,若服務(wù)器收不到返回幀則重發(fā)該幀,該過程持續(xù)到第n幀發(fā)送結(jié)束。
圖6 服務(wù)器與控制芯片通信控制
(3)服務(wù)器端發(fā)送ProcessAppVerificationMsg 幀,該幀在代碼幀發(fā)送完畢后發(fā)送,其記錄了所有代碼的32位累加校驗(yàn)和,若從SD 卡中讀取的所有代碼幀的32位累加校驗(yàn)和與此相等,則校驗(yàn)成功,否則由返回幀攜帶出錯(cuò)信息,請(qǐng)求服務(wù)器重發(fā)該幀。此外,若服務(wù)器收不到該幀的返回幀則重發(fā)該幀。
(4)服務(wù)器端發(fā)送ProcessAppUpdateMsg幀,用戶應(yīng)用程序接收到該幀則程序跳轉(zhuǎn)到bootloader處,由bootloader完成代碼更新操作。
本文對(duì)bootloader數(shù)據(jù)無損代碼更新方案與常規(guī)代碼更新方案在屏蔽數(shù)據(jù)采集時(shí)間上進(jìn)行了比較。常規(guī)代碼更新方案屏蔽數(shù)據(jù)采集的時(shí)間即程序在bootloader中運(yùn)行的時(shí)間。測(cè)試方法為:上位機(jī)軟件設(shè)置一個(gè)定時(shí)器,顯示bootloader開始到接收到bootloader更新成功幀所需的時(shí)間。無損代碼更新方案屏蔽數(shù)據(jù)采集的時(shí)間即bootloader從SD 卡中拷貝代碼至Flash所花費(fèi)的時(shí)間。測(cè)試方法為:控制器端給指定引腳一個(gè)低電平,在bootloader開始時(shí)將其拉高,結(jié)束時(shí)將其拉低,用示波器觀察得到的高電平持續(xù)時(shí)間即為所需測(cè)量的時(shí)間。以300KB 的s19文件為例。在一天不同的時(shí)間段測(cè)試的各數(shù)據(jù)如下所示:每個(gè)數(shù)據(jù)均為當(dāng)前時(shí)間測(cè)量的5次數(shù)據(jù)的平均值。
由表2可知采用無損代碼更新方案屏蔽數(shù)據(jù)采集的時(shí)間僅為常規(guī)代碼更新方案的1/40,因此極大的避免了在代碼更新過程中丟失采集到的數(shù)據(jù)。實(shí)際應(yīng)用結(jié)果表明:該無損代碼更新可做到2HZ數(shù)據(jù)采集頻率下無損采集數(shù)據(jù)。
表2 無損代碼與常規(guī)代碼屏蔽數(shù)據(jù)采集時(shí)間的比較
傳統(tǒng)的無線遠(yuǎn)程代碼更新系統(tǒng)大多依托于操作系統(tǒng),憑借操作系統(tǒng)自帶的bootloader進(jìn)行代碼更新,用戶很難制定自己的bootloader,也就無法控制遠(yuǎn)程代碼更新的時(shí)間,不可避免的會(huì)丟失大量的采集數(shù)據(jù)。本文設(shè)計(jì)的無損代碼更新方案不基于操作系統(tǒng),將代碼接收放在用戶應(yīng)用程序中完成,而bootloader只負(fù)責(zé)讀取SD 卡的內(nèi)容來完成代碼更新。這樣做帶來了以下兩個(gè)優(yōu)點(diǎn):①將代碼更新時(shí)間由GPRS的低速傳輸轉(zhuǎn)移到SD 卡的高速傳輸上來,極大的縮減了代碼更新過程中屏蔽數(shù)據(jù)采集的時(shí)間;②由于bootloader只涉及SD 卡相關(guān)操作,屏蔽了具體的通信方式,因此,具有極強(qiáng)的可移植性與通用性。缺點(diǎn)是:代碼更新依托于用戶應(yīng)用程序的通信機(jī)制,需將相關(guān)代碼嵌入到用戶應(yīng)用程序中。目前,該方案已成功應(yīng)用于蘇州華祥信息科技有限公司的無線照明控制系統(tǒng)中,經(jīng)實(shí)驗(yàn)結(jié)果表明,該方案穩(wěn)定可靠、可成功實(shí)現(xiàn)2HZ以下數(shù)據(jù)采集無損的遠(yuǎn)程代碼更新。
[1]WU Xiao.Research and design of code updating mechanism in wireless sensor networks [J].Computer Applications,2010,30 (4):857-859 (in Chinese).[吳曉.無線傳感網(wǎng)中代碼更新機(jī)制 的 研 究 與 設(shè) 計(jì) [J].計(jì) 算 機(jī) 應(yīng) 用,2010,30 (4):857-859.]
[2]The guide of HUA WEI MG323GSM M2M module hardware_REV [1.0][DB/OL].[2010-05-24].http://www.huawei.com(in Chinese).[HUA WEI MG323GSM M2M 模塊硬件指南 REV [1.0][DB/OL].[2010-05-24].http://www.huawei.com.]
[3]WANG Chaoyi,CHANG Sai,WANG Yihuai.The development of download software of Freescale’s S08series machine code file[J].Computer Applications and Software,2011,28(12):256-258 (in Chinese).[王超藝,常賽,王宜懷.飛思卡爾S08系列機(jī)器碼文件下載軟件的開發(fā) [J].計(jì)算機(jī)應(yīng)用與軟件,2011,28 (12):256-258.]
[4]HCS08boot loader to update multiple devices_REV [0][DB/OL].[2013-10-04].http://www.freescale.com.
[5]ARMv6-M architecture reference manual[DB/OL].[2013-04-18].http://www.arm.com.
[6]M0+user guide [DB/OL].[2013-04-15].http://www.arm.com.
[7]WANG Yihuai,WU Jin,JIANG Yinzhen.Principle and practice of embedded system [M].Beijing:Publishing House of Electronics Industry,2012:65-72 (in Chinese).[王宜懷,吳瑾,蔣銀珍.嵌入式系統(tǒng)原理與實(shí)踐 [M].北京:電子工業(yè)大學(xué)出版社,2012:65-72.]
[8]The guide of HUA WEI MG323GSM M2M module software_REV [1.0][DB/OL].[2010-05-24].http://www.huawei.com(in Chinese).[HUA WEI MG323GSM M2M 模塊軟件指南 REV [1.0][DB/OL].[2010-05-24].http://www.huawei.com.]
[9]LI Yu,WAN Lihua,WANG Huaiyu.Design and implementation of BOOTLOADER based on serial[J].Information and Communication,2013,27 (6):57-58 (in Chinese). [李漁,萬禮華,王懷翊.基于串口的BOOTLOADER 設(shè)計(jì)與實(shí)現(xiàn)[J].信息通信,2013,27 (6):57-58.]
[10]DENG Hubin,LI Jian.The design and implementation of ZigBee network routing protocol of SS-Cluster[J].Computer Engineering and Design,2014,35 (7):2289-2294 (in Chinese).[鄧胡濱,李健.ZigBee網(wǎng)絡(luò)路由協(xié)議SS-Cluster的設(shè)計(jì) 實(shí) 現(xiàn) [J].計(jì) 算 機(jī) 工 程 與 設(shè) 計(jì),2014,35 (7):2289-2294.]