Lưu dữ liệu trong bộ nhớ
Trong quá trình thiết bị di chuyển, có những thời điểm thiết bị không kết nối được với server (do thiết bị đi vào vùng mất sóng, hoặc do module GSM bị treo, hoặc vì 1 nguyên nhân nào khác), lúc này thiết bị cần phải lưu lại các dữ liệu trong bộ nhớ để khi kết nối lại được với server, thiết bị sẽ gửi lại các dữ liệu chưa gửi được tới server.
Ngoài dữ liệu khi mất sóng, thiết bị cũng cần lưu lại các dữ liệu định kì để phục vụ cho cơng tác kiểm tra, bảo hành thiết bị.
Để giảm giá thành và tăng tính ổn định cũng như tính bảo mật của hệ thống, tác giả quyết định sử dụng bộ nhớ flash có sẵn của MCU để lưu dữ liệu, nhà sản xuất cho phép khóa bộ nhớ flash, chống đọc ngược dữ liệu, do vậy hồn tồn có thể bảo mật dữ liệu.
Chu kì 10s
Thực hiện quá
trình login vào server
Kiểm tra kết nối tới server
Gửi dữ liệu lộ
trình lên server
Kết nối ok
47
Bộ nhớ flash trong MCU được lưu theo từng block, mỗi block là 32 bit, trong khi đó dữ liệu lộ trình được chia nhỏ thành 8 bit, do vậy mỗi lần đọc/ghi dữ liệu cần tách/ghép các dữ liệu 8 bit thành dữ liệu 32bit cho phù hợp.
Ngoài ra, bộ nhớ flash của MCU chỉ hỗ trợ tính năng xóa cả trang (page) mà khơng hỗ trợ tính năng xóa từng byte dữ liệu, do vậy nếu cần chỉnh sửa, dữ liệu, cần đọc lại dữ liệu vào bộ nhớ tạm, sau đó chỉnh sửa dữ liệu rồi ghi lại vào flash.
Commented [q3]: ?? 12 hay 32
Commented [PK4]: 32 ạ, em đã sửa lại.
Commented [q5]: Có tính đến trường hợp đang ghi thì mất điện
cung cấp (hỏng ác quy) khi đó data có bị mất ? Có thể khắc phục đc k ? Nếu đc thì đưa giải pháp
Commented [PK6]: Trường họp đang ghi dữ liệu mà mất điện
thì các dữ liệu đã ghi rồi sẽ khơng bị mất ạ, đồng thời thiết bị cũng không thể ghi dữ liệu cho tới khi có điện trở lại ạ.
48
3. Thiết kế giao thứctruyền nhận giữa thiết bị và server
Để tăng tính bảo mật, cũng như tạo sự thống nhất trong quá trình truyền, nhận dữ liệu, các dữ liệu truyền lên hoặc nhận về từ server đều được chia thành các packet, mỗi packet đều phải tuân theo 1 giao thức đã định sẵn.
3.1 Định dạng bản tin
Phần này quy định giao thức chung cho tất cả các bản tin truyền nhận giữa server. Trường Header Loại bản tin Thời gian Mã bảo mật Độ dài nội dung Nội
dung CheckSum Footer
Độ dài (Byte) 5 ($DATA) 1 6 (YYMMDD HHMMSS) 8 2 1 (#) Bảng 3.1 – Định dạng bản tin
Header : Đánh dấu bắt đầu bản tin, mặc định là $DATA, có độ dài là 5 byte. Loại bản tin : Mô tả bản tin gửi lên server là bản tin nào, có các loại bản tin sau :
Loại bản tin Mã Mô tả
Bản tin login 0 Các bản tin trong quá trình login của thiết bị
Bản tin định kì 1 Bản tin chứa các thông số của thiết bị như tọa
độ, vận tốc, nhiên liệu
Bản tin update firmware 2 Bản tin yêu cầu update firmware từ server.
Thời gian : Thời gian gửi của bản tin.
Mã bảo mật : Được sinh ra từ trường Thời gian kết hợp với key và phương thức
sinh mã bảo mật đã được biết trước.
49
Nội dung : Nội dung của bản tin
Checksum : Nhằm xác thực tất cả các trường trong bản tin đều đã được
truyền/nhận đúng. Checksum được tính bằng cách cộng tất cả các byte của các
trường trong bản tin từ $DATA tới byte cuối cùng trong trường Nội dung. Footer : Byte đánh dấu kết thúc bản tin, độ dài 1 byte, mặc định là dấu ‘#’
3.2 Bản tin login
Để tăng tính bảo mật cho việc truyền nhận với server, trước khi thực hiện quá trình gửi dữ liệu lên server, thiết bị phải thực hiện quá trình login vào server, quá trình này sẽ được trải qua các bước để xác thực giữa thiết bị và server nhờ các key trong bản tin login.
Quá trình login
Gửi bản tin
login lên server.
Nhận được xác thực login từ server
Kiểm tra key trong bản tin xác thực
Sai
Đúng
Sai
Đúng Nhận key mới, thực hiện
50