一種溫濕度傳感器的記錄數(shù)據(jù)保存方法
最原始的數(shù)據(jù)記錄都是依靠人工去完成的,每隔一段時間記錄一次數(shù)據(jù)。在科學實驗室里,科技人員經(jīng)常拿著筆和紙記錄當時觀察的數(shù)據(jù),這種工作既單調(diào)又枯燥,還不能及時。于是人們想到一種辦法,讓機器來定時采集和記錄,然后將采集的數(shù)據(jù)保存到FLASH中。當我們需要的時候,再從FLASH中讀出來,供我們使用。可見,機器記錄數(shù)據(jù)既保證了實時性和效率,還節(jié)省了人工成本。
我們先回顧一下人工記錄的方法:先在一張空白的紙上制作一個表格,里面有:序號,內(nèi)容,時間,簽字人姓名,核驗時間。同理、機器記錄也需要首先要有一個空白的數(shù)據(jù)記錄區(qū),而且掉電再上電還要保證數(shù)據(jù)繼續(xù)存在。于是我們會很快想到FLASH存儲器,F(xiàn)LASH通常有兩種:I2C通訊的EEPROM和SPI通訊的FLASH。EEPROM最大的分區(qū)為頁,限制了EEPROM的容量擴展;其次跨頁寫入時,EEPROM需要發(fā)送重啟條件;再次I2C抗干擾能力差。SPI通訊的FLASH支持扇區(qū)讀、寫和擦除,同時支持塊擦除,容量大,性價比高。因此,SPI通訊的FLASH是我們的首選。
W25Q128容量為16M字節(jié),共計4096個扇區(qū),每個扇區(qū)為4*1024個字節(jié),地址為24位。扇區(qū)擦除后,里面的數(shù)據(jù)全部是0xFF。
1、保存對象
溫度1(float型),溫度2(float型),濕度1(u8型),濕度2(u8型),狀態(tài)數(shù)據(jù)(u8型)
1、數(shù)據(jù)保存周期
規(guī)定每5分鐘保存一次。這樣,每天保存的信息數(shù)量為:24*60/5=288條。
2、消息格式
1)、時間:
用秒表示,32位數(shù)值,使用16進制的ASCii碼表示,需要占用8個字節(jié)。
若用0表示2000年1月1日00:00:00,則:
全為平年,最大年數(shù)為0x100000000/3600/24/365=4294967296=136.19年
全為閏年,最大年數(shù)為0x100000000/3600/24/366=4294967296=135.82年
從2023年算起,還可以支持112年,這個時間數(shù)值夠用了。
2)、u32和單精度浮點數(shù):
單精度浮點數(shù)為32位數(shù)值,使用16進制的ASCii碼表示,需要占用8個字節(jié)。
3)、整型數(shù):
u16型數(shù)值,使用16進制的ASCii碼表示,需要占用4個字節(jié),用D表示。
u8型數(shù)值,使用16進制的ASCii碼表示,需要占用2個字節(jié),用d表示。
4)、校驗碼:
校驗碼為u8型數(shù)值,使用16進制的ASCii碼表示,需要占用2個字節(jié)。
5)、起始符號和結束符號:
起始符號’(’,使用ASCii碼表示,需要占用1個字節(jié)。
結束符號’)’,使用ASCii碼表示,需要占用1個字節(jié)。
6)、上傳狀態(tài):
0xFF表示沒有上傳,需要執(zhí)行斷網(wǎng)續(xù)傳;字符’Y’表示已上傳,無需續(xù)傳。需要占用1個字節(jié)。
7)、消息格式:(上傳狀態(tài)/時間/f1/f2/d1/d2/d3/校驗碼)
每條信息為3*8+3*2+5=35個字節(jié)。
1個時間數(shù)據(jù),3個浮點數(shù),3個u8型數(shù)值。
舉例:
(Y000000003F0000003F0000004B4B00XX)
Y表示該信息已經(jīng)上傳
時間:00000000通過換算得到時間為2000-01-01 00:00:00
溫度1為浮點字符串數(shù)值3F000000,合為十進制數(shù)為0.5度
溫度2為浮點字符串數(shù)值3F000000,合為十進制數(shù)為0.5度
濕度1為u8型字符串數(shù)值4B,合為十進制數(shù)為75
濕度2為u8型字符串數(shù)值4B,合為十進制數(shù)為75
溫度1,溫度2,濕度1和濕度2狀態(tài)值為u8型字符串數(shù)值00,合為十進制數(shù)為0。
3、扇區(qū)規(guī)劃
1)、每個扇區(qū)的前兩個字節(jié),用來記錄扇區(qū)的狀態(tài):
分別用SectorXByte[0]和SectorXByte[1]表示,其中-1
SectorXByte[0]=0xFF且SectorXByte[1]=0xFF表示該扇區(qū)為空白扇區(qū);
SectorXByte[0]=’1’且SectorXByte[1]=0xFF表示該扇區(qū)可以繼續(xù)保存信息;
SectorXByte[0]=’1’且SectorXByte[1]=’1’表示該扇區(qū)滿,不能再保存信息;
SectorXByte[0]=0xFF且SectorXByte[1]=’1’表示該扇區(qū)損壞了,不能保存信息;
這么規(guī)定的目的,可以告訴我們當前寫到哪個扇區(qū)了,同時,可以避免將數(shù)據(jù)寫入壞扇區(qū)。
舉例:
Sector0Byte[0]=0xFF且Sector0Byte[1]=0xFF表示扇區(qū)0為空白扇區(qū);
Sector0Byte[0]=’1’且Sector0Byte[1]=0xFF表示扇區(qū)0可以繼續(xù)保存信息;
Sector0Byte[0]=’1’且Sector0Byte[1]=’1’表示扇區(qū)0滿,不能再保存信息;
Sector0Byte[0]=0xFF且Sector0Byte[1]=’1’表示扇區(qū)0損壞了,不能保存信息;
2)、每個扇區(qū)的信息數(shù)量
(4096-2)/35=116.9條,按照116條/扇區(qū)計算,損失34個字節(jié)。
3)、規(guī)定信息寫入,不得跨越扇區(qū)。因此最后34個字節(jié)為0xFF,不使用。這么設計的目的,就是為了保證扇區(qū)前兩個字節(jié)用作記錄扇區(qū)的狀態(tài),不被改變,同時,也是為了扇區(qū)具有可讀性。
4、W25Q64JV(8M容量的FLASH)
1)、最大信息數(shù)量
116*2048=237568條數(shù)據(jù)
2)、最多天數(shù)
237568/288=824天,因此8M的FLASH可以保存2.2年的數(shù)據(jù)。
5、W25Q128JV(16M容量的FLASH)
1)、最大信息數(shù)量
116*4096=475136條數(shù)據(jù)
2)、最多天數(shù)
475136/288=1649天,因此16M的FLASH可以保存4.5年的數(shù)據(jù)。
6、總結
通過上述對FLASH得規(guī)劃,實現(xiàn)數(shù)據(jù)記錄就很容易實現(xiàn)了。
審核編輯 黃宇
-
傳感器
+關注
關注
2576文章
55029瀏覽量
791246 -
FlaSh
+關注
關注
10文章
1748瀏覽量
155514 -
EEPROM
+關注
關注
9文章
1137瀏覽量
86029 -
ASCII
+關注
關注
5文章
172瀏覽量
36676
發(fā)布評論請先 登錄
HDC2010:低功耗溫濕度數(shù)字傳感器的卓越之選
HDC2021高精度溫濕度傳感器:特性、應用與設計要點
HDC3120高精度溫濕度傳感器:設計與應用全解析
2025溫濕度變送器選購指南與傳感器應用方案解析
燃氣表需要一顆溫濕度傳感器推薦啥?
±0.1℃精準監(jiān)測 + POE 供電!網(wǎng)口溫濕度傳感器,部署運維雙省心
應用于智能門鎖的溫濕度傳感器解決方案
溫濕度傳感器HTU31D在溫濕度控器中的應用優(yōu)勢
中科銀河芯GXHT30C溫濕度傳感器的核心亮點
中科銀河芯GXHT30溫濕度傳感器的卓越性能
什么是溫濕度傳感器的水合?
一種溫濕度傳感器的記錄數(shù)據(jù)保存方法
評論