You are on page 1of 17

S32K1xx Firmware updates

1. Introduction
Với những tiến bộ công nghệ hiện nay, các phương tiện đang trở nên điện tử hơn là cơ khí. Sự đổi mới
điện tử trên xe không ngừng tăng lên. Do đó, phần mềm trên xe cũng ngày càng tăng và do đó có nguy cơ
xảy ra lỗi. Mỗi khi phát hiện thấy lỗi phần mềm, cần phải có quy trình thu hồi để cập nhật phần mềm.
Những đợt thu hồi này gây tốn kém cho các nhà sản xuất ô tô và cũng là một thủ tục tốn thời gian cho
người dùng cuối. Ngày nay, các bản cập nhật qua mạng bắt đầu được triển khai trên các phương tiện mới
sử dụng kỹ thuật hoán đổi a/b. Các bản cập nhật được thực hiện bằng kỹ thuật này chỉ giới hạn ở bộ vi
điều khiển có bộ nhớ mật độ cao, chẳng hạn như cổng hoặc thiết bị thông tin giải trí. Bộ vi điều khiển nhỏ
hơn được sử dụng cho các ứng dụng nút biên không được cập nhật. Ngoài việc quan tâm đến việc cập
nhật chương trình cơ sở trên các bộ vi điều khiển nút biên, một mối quan tâm khác là giữ an toàn cho quá
trình cập nhật. Điều này nhằm bảo vệ bản cập nhật khỏi các cuộc tấn công nghe lén, sao chép có thể xảy
ra. Ghi chú ứng dụng này tập trung vào việc trình bày cách bộ vi điều khiển S32K1xx xử lý các cập nhật
trao đổi a/b bằng quy trình liên lạc an toàn. Nó giải thích các khái niệm cơ bản về bộ nạp khởi động, cập
nhật trao đổi a/b và các khái niệm bảo mật. Tài liệu này bao gồm việc triển khai các bản cập nhật chương
trình cơ sở trên toàn bộ hệ thống. Để biết chi tiết chức năng của các mô-đun cụ thể như bộ điều khiển
flash, mô-đun bảo mật, bộ điều khiển CAN, v.v. Vui lòng tham khảo hướng dẫn tham khảo thiết bị
S32K1xx.
Phần mềm bổ sung đi kèm với ghi chú ứng dụng này để minh họa các cập nhật trao đổi a/b đồng thời tận
dụng khả năng của bộ vi điều khiển S32K144.
2. BootLoader Concepts
Trong giai đoạn phát triển chương trình cơ sở của ứng dụng, các bản cập nhật cho bộ vi điều khiển được
thực hiện bằng công cụ lập trình flash. Công cụ này yêu cầu một số lượng I/O nhất định của bộ vi điều
khiển và một tiêu đề đặc biệt để tương tác với công cụ này. Sau khi phần sụn được hoàn thiện, nó sẽ được
tải xuống bộ vi điều khiển được hàn trong pcb cuối cùng. Pcb này có thể bao gồm hoặc không bao gồm
tiêu đề bắt buộc cho công cụ lập trình, để tránh truy cập vào dữ liệu được lưu trữ trong flash hoặc vì ứng
dụng yêu cầu I/O cho ứng dụng của nó. Trong một số trường hợp, mô-đun cuối cùng chứa bộ vi điều
khiển ở vị trí khó truy cập, chẳng hạn như trong ứng dụng ô tô, nơi các bộ điều khiển điện tử được đặt ở
những khu vực ẩn đối với người dùng cuối. Vì vậy, điều gì sẽ xảy ra nếu cần phải cập nhật chương trình
cơ sở sau khi thiết bị được đưa vào hiện trường do lỗi hoặc do nâng cấp? Để giải quyết vấn đề này, bộ nạp
khởi động được phát triển.
Bộ tải khởi động là một phần chương trình cơ sở nằm trong Bộ nhớ không biến đổi (NVM) của vi điều
khiển, xử lý các bản cập nhật của chương trình ứng dụng hoặc dữ liệu. Bộ nạp khởi động và ứng dụng có
thể nằm trong cùng một khối bộ nhớ không khả biến hoặc trong các khối riêng biệt. Phần mềm ứng dụng
và bộ nạp khởi động không được chồng chéo trong bộ nhớ; do đó bộ nạp khởi động thường được đặt ở
đầu không gian bộ nhớ. Bộ nạp khởi động dự kiến sẽ không được cập nhật, do đó khu vực chứa nó được
bảo vệ để tránh những sửa đổi có chủ ý hoặc vô ý.
Bộ tải khởi động nhận dữ liệu chương trình cơ sở mới từ máy chủ thông qua giao thức truyền thông, bao
gồm nhưng không giới hạn ở CAN, LIN, UART, ETHERNET và USB. Giao thức truyền thông này phụ
thuộc vào quyết định của nhà phát triển, ứng dụng và tính năng vi điều khiển. Máy chủ gửi chương trình
cơ sở mới bằng định dạng đã biết, ví dụ: tệp srec hoặc tệp bin. Bộ tải khởi động ghi lại các gói có dữ liệu
chương trình cơ sở mới để sau đó cập nhật các vị trí bộ nhớ nơi đặt chương trình cơ sở cũ. Khi phần sụn
hoàn chỉnh đã được nhận và xác thực, bộ nạp khởi động sẽ chuyển sang ứng dụng mới.
Trước khi đi vào chi tiết về thuật toán cập nhật bộ nạp khởi động, cần phải hiểu quy trình ghi vào NVM.
Để ghi vào vị trí NVM, dữ liệu phải được xóa trước tiên, việc xóa dữ liệu trong bộ nhớ không biến đổi
được thực hiện theo từng cung. Kích thước cung này là phần dữ liệu nhỏ nhất có thể bị xóa, nó phụ thuộc
vào từng công nghệ bộ nhớ không biến đổi và nó được gọi là độ chi tiết của bộ nhớ. Khi khu vực này đã
bị xóa, dữ liệu có thể được ghi vào khu vực đó. Quá trình ghi cũng phụ thuộc vào công nghệ NVM, mỗi
NVM có một số byte có thể được ghi cho mỗi lệnh ghi. Cuối cùng, để hoàn tất quá trình ghi, cần có lệnh
kiểm tra chương trình để xác minh rằng dữ liệu được ghi trong flash như mong đợi, việc kiểm tra chương
trình này được thực hiện bằng lệnh ghi.
Kích thước phần sụn của bộ nạp khởi động phụ thuộc vào mức độ chi tiết của bộ nhớ không biến đổi. Độ
chi tiết càng lớn, kích thước cung càng nhỏ thì kích thước của bộ nạp khởi động càng linh hoạt. Vì bộ nạp
khởi động sẽ nhận dữ liệu chương trình cơ sở mới từ máy chủ sẽ được lập trình vào NVM, nên cần phải
xem xét rằng khu vực này đã bị xóa trước đó trước khi ghi dữ liệu vào nó.
Trong quá trình cập nhật, chương trình cơ sở của bộ nạp khởi động được đọc và thực thi từ NVM, khởi
chạy các lệnh xóa và ghi để cập nhật dữ liệu ứng dụng mới vào chính NVM, do đó phải xem xét các hoạt
động đồng thời trong bộ nhớ. Bộ nhớ cho phép các hoạt động đồng thời cụ thể trên từng thiết bị, một số
thiết bị cho phép đọc trong khi ghi vào bộ nhớ miễn là điều này xảy ra ở các phân vùng đọc hoặc khối bộ
nhớ khác nhau. Trong trường hợp tính năng ghi trong khi đọc không khả dụng, bộ nạp khởi động cần đặt
các lệnh bộ nhớ vào vị trí ram để chúng có thể được khởi chạy từ đó nhằm tránh mọi xung đột.
Việc tham gia quá trình cập nhật có thể được thực hiện theo cách tiếp cận phần mềm hoặc phần cứng.
Kích hoạt cập nhật bằng cách nhấn nút trong một khoảng thời gian nhất định, trạng thái đầu vào thấp hoặc
cao sau khi đặt lại hoặc bằng cách nhận gói liên lạc cụ thể cho biết cần phải cập nhật trong khi ứng dụng
đang chạy. Thông thường, sau khi thiết lập lại vi điều khiển, chương trình cơ sở của bộ nạp khởi động sẽ
kiểm tra trong một khoảng thời gian nhất định xem có điều kiện để bắt đầu quá trình cập nhật hay không,
trong trường hợp điều kiện này không được đáp ứng thì nó sẽ chuyển sang chương trình cơ sở ứng dụng.
Một số trường hợp sử dụng cũng có thể kiểm tra trình kích hoạt này trong khi ứng dụng đang chạy, cho
phép cập nhật trong khi chạy và tránh thời gian ngừng hoạt động sau khi đặt lại, để trong lần đặt lại tiếp
theo, thiết bị sẽ ngay lập tức khởi động về hình ảnh mới nhất. Quyết định về cách kích hoạt quá trình cập
nhật tùy thuộc vào ứng dụng, bộ nhớ và tính năng thiết bị cuối cùng.
Khi phát hiện thấy trình kích hoạt quá trình cập nhật, thuật toán cập nhật sẽ bắt đầu đặt ứng dụng chương
trình cơ sở mới vào NVM. Thuật toán cập nhật bao gồm các bước sau: nhận dữ liệu từ giao thức truyền
thông, xác thực rằng dữ liệu nhận được là chính xác, xóa/chương trình flash, kiểm tra xem dữ liệu hoàn
chỉnh đã được tải xuống chưa. Sau quá trình cập nhật, bộ nạp khởi động sẽ đưa các thiết bị ngoại vi và
cấu hình đồng hồ đã sử dụng về trạng thái mặc định. Điều này là cần thiết nếu bộ nạp khởi động khởi
động sau khi thiết lập lại. Bên cạnh các thiết bị ngoại vi và cấu hình đồng hồ, bảng vectơ ngắt cần được di
dời. Phần sụn ứng dụng có thể sử dụng bảng ngắt ở một vị trí khác, nếu đúng như vậy, con trỏ tới bảng
ngắt phải được di chuyển khỏi vị trí mặc định của nó. Khi những cân nhắc này được xử lý, bộ nạp khởi
động có thể chuyển sang chương trình cơ sở của ứng dụng. Sơ đồ luồng của quá trình cập nhật được hiển
thị trong hình bên dưới.
Phần sụn ứng dụng được chia sẻ giữa máy chủ và bộ nạp khởi động rất dễ bị thu thập và đọc. Điều này là
do kẻ tấn công tiềm năng có thể đánh hơi được mạng nơi quá trình cập nhật diễn ra. Để tránh cuộc tấn
công nghe lén và bảo vệ tính bảo mật của phần sụn, dữ liệu có thể được mã hóa.
Việc mã hóa dữ liệu có thể xảy ra trên máy chủ trước khi nó được truyền vào mạng. Sau đó, bộ nạp khởi
động cần giải mã dữ liệu này bằng khóa đã biết trước khi ghi nó vào bộ nhớ NVM. Bên cạnh việc mã hóa,
các cơ chế xác thực tính xác thực của máy chủ và độ mới của dữ liệu có thể được thêm vào bộ tải khởi
động.
Cuối cùng, khi phát triển chương trình cơ sở của bộ nạp khởi động, cần xem xét vị trí trong bộ nhớ.
Chương trình cơ sở và ứng dụng của bộ nạp khởi động có thể nằm trong cùng một khối bộ nhớ NVM, do
đó cần phải sửa đổi các tệp liên kết của bộ nạp khởi động và chương trình cơ sở ứng dụng để tránh chồng
chéo. Có một số thiết bị có một vị trí dành riêng trong bộ nhớ để đặt bộ nạp khởi động. Việc sửa đổi tệp
liên kết phụ thuộc vào bộ vi điều khiển và trình biên dịch được sử dụng.

3. Firmware Update Method

Để cập nhật chương trình cơ sở trong bộ vi điều khiển, hãy làm theo một trong hai phương pháp. Hai
phương pháp này là: phương pháp tiếp cận a/b và phương pháp tiếp cận tại chỗ. Theo truyền thống,
phương pháp tiếp cận tại chỗ đã được sử dụng. Trong phương pháp này, bộ vi điều khiển chỉ lưu trữ một
hình ảnh phần sụn, hình ảnh này có thể chiếm toàn bộ bộ nhớ flash có sẵn. Trong trường hợp này, không
thể thực hiện cập nhật trong khi bộ vi điều khiển đang chạy và nếu quá trình cập nhật không kết thúc
chính xác thì có thể khó khôi phục được hình ảnh cũ. Hình dưới đây cho thấy quá trình này.

Phương pháp hoán đổi a/b đề cập đến khi bộ vi điều khiển lưu trữ hai hình ảnh ở các vùng flash riêng
biệt. Trong trường hợp này, có thể thực hiện cập nhật chương trình cơ sở của một vùng trong khi bộ vi
điều khiển đang chạy. Vì bộ vi điều khiển lưu trữ hai phần sụn khác nhau, phần sụn cũ và phần sụn được
cập nhật nên có thể khôi phục ngay lập tức trong trường hợp phần sụn mới không hoạt động chính xác.
Nhược điểm chính là hai hình ảnh ứng dụng phải vừa với NVM của bộ vi điều khiển, do đó làm giảm
kích thước tối đa của ứng dụng phần sụn. Một thách thức khác trong phương pháp này là việc ánh xạ lại
phần sụn, vì có hai ứng dụng ở các địa chỉ vật lý khác nhau của NVM. Quá trình hoán đổi a/b được hiển
thị trong hình tiếp theo.
Do đó, cả hai phương pháp đều có ưu điểm và nhược điểm, nhưng việc quyết định phương pháp nào phù
hợp cho ứng dụng là quyết định của nhà sản xuất ô tô. Ghi chú ứng dụng này tập trung vào việc triển khai
hoán đổi a/b trong bộ vi điều khiển S32K1xx.

4. Security Concepts

Tiêu chuẩn mã hóa nâng cao (AES) là mật mã mã hóa/giải mã đối xứng. Tiêu chuẩn này sử dụng thuật
toán Rijndael để xử lý dữ liệu bằng các khóa mật mã. Mỗi khóa có thể có kích thước 128, 192 hoặc 256
bit. Hình dưới đây cho thấy các bước thuật toán.
Có hai phương pháp để mã hóa và giải mã dữ liệu. Hai phương pháp này là: sổ mã điện tử (ECB) và sổ
mã chuỗi (CBC).
Phương pháp ECB chia văn bản thuần túy trong đầu vào. Mỗi đầu vào có kích thước chi tiết của mật mã.
Đầu ra của mã hóa chỉ phụ thuộc vào đầu vào văn bản thuần túy và khóa. Mỗi đầu ra mật mã được mã
hóa độc lập. Nhược điểm của chế độ mật mã này là các giá trị đầu vào giống nhau sẽ được giải mã thành
các giá trị đầu ra giống nhau. Điều này cho phép kẻ tấn công có cơ hội sử dụng phân tích thống kê (ví dụ:
trong một văn bản thông thường, một số tổ hợp chữ cái xuất hiện thường xuyên hơn nhiều so với các tổ
hợp khác).
Phương pháp CBC chia văn bản thuần túy trong đầu vào. Mỗi đầu vào có kích thước chi tiết của mật mã.
Đầu ra của bước mã hóa cuối cùng được xor với khối đầu vào của bước mã hóa hiện tại. Do đó, cần có
một giá trị bổ sung cho bước mã hóa đầu tiên, được gọi là vectơ khởi tạo (IV). Sử dụng phương pháp này,
mỗi khối mật mã phụ thuộc vào đầu vào văn bản gốc được xử lý cho đến thời điểm đó.
Hình dưới đây minh họa một ví dụ cho thấy kết quả của cả hai cách tiếp cận, sử dụng hình ảnh chim cánh
cụt làm văn bản thuần túy.

Mã xác thực tin nhắn dựa trên mật mã (CMAC) cung cấp phương pháp xác thực tin nhắn và dữ liệu.
CMAC sử dụng thuật toán AES. Thuật toán CMAC chấp nhận đầu vào là khóa bí mật và thông báo có độ
dài tùy ý cần được xác thực và xuất ra CMAC. Giá trị CMAC bảo vệ cả tính toàn vẹn dữ liệu cũng như
tính xác thực của thư bằng cách cho phép người xác minh (người cũng sở hữu khóa bí mật) phát hiện bất
kỳ thay đổi nào đối với nội dung thư. Hình minh họa các thành phần của CMAC.
5. S32K1xx Overview
Dòng sản phẩm NXP S32K1xx gồm bộ vi điều khiển ô tô 32 bit cung cấp giải pháp chip đơn tích hợp
cao, tiêu thụ điện năng thấp, an toàn và bảo mật. Sự kết hợp giữa CPU nhanh với các chế độ sử dụng năng
lượng thấp linh hoạt và quy trình công nghệ ít rò rỉ sẽ không gây ra bất kỳ sự ảnh hưởng nào về hiệu suất
so với sử dụng năng lượng thấp.
Dòng S32K1xx cung cấp nhiều loại bộ nhớ, từ 128kB đến 2MB. Nó chia sẻ các thiết bị ngoại vi và số
lượng pin chung, cho phép các nhà phát triển di chuyển dễ dàng trong dòng MCU hoặc giữa các dòng
MCU để tận dụng nhiều bộ nhớ hơn hoặc tích hợp tính năng. Khả năng mở rộng này cho phép các nhà
phát triển sử dụng dòng sản phẩm S32K1xx làm tiêu chuẩn cho nền tảng sản phẩm cuối cùng của họ, tối
đa hóa khả năng tái sử dụng phần cứng và phần mềm cũng như giảm thời gian đưa ra thị trường.
S32K1xx hỗ trợ Tốc độ dữ liệu linh hoạt CAN (CAN-FD) cũng như thiết bị ngoại vi có thể định cấu hình
FlexIO mới, cho phép khách hàng triển khai các giao thức truyền thông trong tương lai chưa được phát
minh cũng như mở rộng các kênh sang bộ điều khiển giao thức phần cứng trên chip hiện có.
Mô-đun bảo mật, Công cụ Dịch vụ Mật mã được nén (CSEc), được bao gồm trong các sản phẩm
S32K1xx. CSEc triển khai một bộ chức năng mã hóa toàn diện như được mô tả trong Đặc tả chức năng
SHE, bao gồm: khóa mục đích chung, AES-128, CBC, ECB, CMAC, tạo số giả ngẫu nhiên (PRNG) và
tạo số ngẫu nhiên thực (TRNG). Điều này cho phép bảo vệ ECU trước các tình huống tấn công khác nhau
và đảm bảo tính toàn vẹn của hệ thống.
Hình dưới đây thể hiện sơ đồ khối của sản phẩm S32K11x và S32K14x.
5.1. Kiến trúc NVM
Bộ vi điều khiển S32K1xx có đèn flash công nghệ C90TFS (lưu trữ màng mỏng). Có hai bộ nhớ flash
trong các thiết bị này, bộ nhớ flash chương trình (pflash) và bộ nhớ linh hoạt.
Flash chương trình là bộ nhớ không khả biến với mục đích chính là thực thi mã. Kích thước của flash
chương trình thay đổi tùy theo thiết bị và nằm trong khoảng từ 128kB đến 1,5 MB. Đèn flash này có kích
thước cung từ 4kB trong các thiết bị có đèn flash chương trình cao hơn 256kB và 2kB đối với các thiết bị
có đèn flash chương trình bằng hoặc nhỏ hơn 256kB. Trong tất cả các thiết bị, lệnh lập trình pflash ghi 8B
mỗi lần. Kích thước khối của flash này là từ 512kB trở xuống, tùy theo thiết bị mà có một hoặc nhiều
khối flash. Mỗi khối đại diện cho một phân vùng đọc, điều này có nghĩa là một khối có thể được đọc
trong khi khối khác đang bị xóa hoặc ghi.
Mục đích của flash bộ nhớ linh hoạt là thực thi mã, lưu trữ dữ liệu hoặc hoạt động dưới dạng EEPROM
kết hợp với bộ nhớ ram linh hoạt. Kích thước của bộ nhớ linh hoạt này khác nhau ở mỗi thiết bị, 32kB
(S32K11x), 64kB (S32K142/4/6) hoặc 512kB (S32K148). Kích thước của cung trong bộ nhớ này là 2kB
đối với các thiết bị S32K116/8 và S32K142/4/6, trong khi đối với thiết bị S32K148, kích thước cung là
4kB. Trong tất cả các thiết bị, lệnh lập trình bộ nhớ linh hoạt ghi 8B mỗi lần. Bộ nhớ linh hoạt là một
phân vùng đọc riêng biệt, do đó việc đọc từ flash này có thể được thực hiện trong khi xóa hoặc ghi flash
chương trình và ngược lại. Trong trường hợp bộ nhớ linh hoạt được cấu hình để hoạt động như EEPROM,
nó có thể được phân vùng để một phần của bộ nhớ linh hoạt lưu trữ mã hoặc dữ liệu, trong khi phần còn
lại được sử dụng làm bản sao lưu EEPROM. Các kích thước mà bộ nhớ linh hoạt có thể được chia thành:
16kB, 32kB và 64kB.
Bản tóm tắt về kích thước và mức độ chi tiết của đèn flash cho từng thiết bị S32K1xx được hiển thị trong
bảng bên dưới. Vị trí của những bộ nhớ này trong bản đồ bộ nhớ của từng thiết bị được hiển thị trong
hình 9.

Bộ điều khiển flash được bao gồm trong bộ vi điều khiển cho những bộ nhớ này. Bộ điều khiển flash này
thực thi các lệnh xóa, lập trình và kiểm tra những bộ nhớ này. Ngoài các lệnh truy cập nội dung trong các
bộ nhớ này, còn có các lệnh bảo mật. Các lệnh như mã hóa, giải mã, tính toán cmac, tạo số ngẫu nhiên có
thể được thực thi từ bộ điều khiển flash.
6. S32K144 Firmware Update Implementations
6.1. S32K144 Use Case
S32K144 Memory Map for A/B Swap, with single pflash block
Trong trường hợp này, thiết bị S32K144 được sử dụng để thực hiện cập nhật trao đổi a/b trong thiết bị.
Hãy nhớ rằng S32K144 có flash chương trình 512kB và bộ nhớ linh hoạt 64kB, tổng cộng có hai phân
vùng đọc. Bộ tải khởi động được tải trong không gian 16kB từ bộ nhớ linh hoạt. Đèn flash chương trình
định vị hai hình ảnh ứng dụng cần thiết cho trao đổi a/b bao gồm tiêu đề cho mỗi hình ảnh.
Tiêu đề trên mỗi chức năng ứng dụng xác định thông tin phần sụn. Thông tin như, nhưng không giới hạn,
phiên bản chương trình cơ sở, phiên bản cũ nhất, chi tiết về nhà phát triển phần mềm, kích thước, tác giả,
khóa ứng dụng có thể được đưa vào tiêu đề này. Sau mỗi lần cập nhật, thông tin tiêu đề cũng được cập
nhật. Kích thước của tiêu đề là 4kB, kích thước khu vực flash của chương trình. Tiêu đề không chỉ có
chức năng lưu trữ thông tin về phần sụn đang chạy mà còn xác nhận phần sụn mới nhất và liệu phần sụn
có thể được thực thi hay không.
Trong lõi ARM® Cortex M, sau khi quá trình thiết lập lại diễn ra, lõi sẽ đọc hai từ đầu tiên từ vị trí bộ
nhớ flash của chương trình, nơi dự kiến có bảng vectơ ngắt. Từ đầu tiên chứa con trỏ ngăn xếp và từ thứ
hai chứa địa chỉ của trình xử lý đặt lại. Sau đó, lõi sẽ đặt địa chỉ con trỏ ngăn xếp chính (SP) và bộ đếm
chương trình (PC) về điểm bắt đầu của trình xử lý đặt lại. Do quá trình khởi động ban đầu của lõi này, cần
phải bảo toàn và không xóa khu vực đầu tiên của flash chương trình. Trong S32K144, kích thước bảng
vectơ dài 1kB, do đó với kích thước cung của flash chương trình, 4kB ban đầu của flash không được xóa.
Trong trường hợp này, bộ nạp khởi động được phân bổ vào vùng bộ nhớ linh hoạt, do đó từ thứ hai trong
pflash chứa địa chỉ trỏ đến địa chỉ bộ nhớ linh hoạt. Bootloader được đặt trên bộ nhớ linh hoạt vì đây là
một phân vùng đọc khác, cho phép thực thi các lệnh sửa đổi nội dung flash của chương trình mà không
cần phân bổ quy trình trong RAM. Một lợi ích khác của việc cấp phát bộ nạp khởi động trong bộ nhớ linh
hoạt là trong S32K146 có hai phân vùng đọc của chương trình flash. Việc cập nhật chương trình cơ sở
mới có thể được thực hiện trong khi chương trình cơ sở cũ vẫn đang chạy
Hai ứng dụng được đặt theo sau bởi tiêu đề của nó. Giữa mỗi ứng dụng, có một khoảng trống của một
lĩnh vực. Điều này là do số lượng các cung còn lại sau khi xem xét cung ban đầu cho bảng ngắt mặc định
và hai cung cho các tiêu đề phần sụn là không chẵn. Khi đó, mỗi image firmware của ứng dụng sẽ có kích
thước 248kB hoặc 62 cung. Hình dưới đây hiển thị tóm tắt về bản đồ bộ nhớ flash thu được.
Bản đồ bộ nhớ S32K144: Hoán đổi A/B
6.2. S32K144 boot and update procedures

Để xác định vị trí của hình ảnh cũ nhất trong bộ nhớ flash chương trình, thông tin trên tiêu đề sẽ được sử
dụng. Trong trường hợp này, việc xác thực tiêu đề được thực hiện bằng cách kiểm tra xem chương trình
cơ sở có ký hiệu khóa ứng dụng hợp lệ hay không, 0x55AA55AA, ở địa chỉ tiêu đề cuối cùng. Chữ ký
của tiêu đề này là bước cuối cùng được thực hiện trong quy trình cập nhật trước khi chuyển sang ứng
dụng. Khóa này cho biết rằng bản cập nhật chương trình cơ sở đã hoàn tất và nó hợp lệ.
Khi bộ nạp khởi động khởi động, nó sẽ tìm kiếm khóa ứng dụng trong tiêu đề ứng dụng. Đầu tiên nó đọc
nội dung của địa chỉ cuối cùng của tiêu đề, nếu không tìm thấy gì ở vị trí đó thì địa chỉ mới để phân bổ
phần sụn sắp tới là vị trí đó. Trong trường hợp tìm thấy khóa ứng dụng trong tiêu đề hình ảnh một thì nội
dung của tiêu đề chương trình cơ sở thứ hai sẽ được đọc, nếu không tìm thấy khóa ứng dụng thì địa chỉ
mới để phân bổ chương trình cơ sở sắp tới là vị trí hình ảnh hai. Khi tìm thấy khóa ứng dụng trong cả hai
tiêu đề thì phiên bản của chương trình cơ sở sẽ được đọc để xác định phiên bản cũ nhất. Vị trí của phần
sụn cũ nhất là nơi phân bổ phần sụn sắp tới.
Trong trường hợp máy chủ không yêu cầu cập nhật trong khoảng thời gian chờ xác định sau khi đặt lại (ví
dụ: 4 giây), bộ nạp khởi động sẽ chuyển đến vị trí flash có chương trình cơ sở mới nhất. Đối với trường
hợp cuối cùng trong đó cả hai tiêu đề đều không có khóa ứng dụng, điều này có nghĩa là không có chương
trình cơ sở hợp lệ, thời gian chờ sẽ bị bỏ qua và bộ nạp khởi động vẫn chờ yêu cầu cập nhật từ máy chủ.
Hình 11 thể hiện các bước của quá trình khởi động

Bước 1. After Reset: fetch PC value @ 0x00000004.

Bước 2. Bootloader start .

Bước 3. Bootloader searches for oldest and newest image.

- Kiểm tra thông tin tiêu đề FW.


- Tìm khóa ứng dụng (0x55AA55AA) ở cuối tiêu đề.
- Nếu không tìm thấy khóa ứng dụng nào trong cả hai tiêu đề, hãy ở lại bộ nạp khởi động (tức là
không chuyển sang bất kỳ ứng dụng nào).

Bước 4. After timeout: jump to newest application.

- Di dời bảng VTOR.


- PC fetch value from firmware interrupt table.
Quá trình khởi động S32K144
Khi yêu cầu cập nhật mới được kích hoạt trong khoảng thời gian chờ sau khi đặt lại, giao tiếp giữa máy
chủ và bộ nạp khởi động (nút biên) sẽ bắt đầu tải xuống chương trình cơ sở mới. Giao tiếp giữa máy chủ
và bộ nạp khởi động được quyết định bởi ứng dụng cuối cùng, trong trường hợp này CANFD được sử
dụng. Sau khi quá trình truyền chương trình cơ sở mới hoàn tất, tiêu đề của chương trình cơ sở mới sẽ
được ký và ghi vào bộ nhớ NVM, trong khi tiêu đề chương trình cơ sở cũ sẽ bị xóa. Cuối cùng, bộ nạp
khởi động sẽ chuyển đến vị trí phần sụn mới. Trong trường hợp quá trình cập nhật không hoàn tất (ví dụ:
do mất kết nối giữa nút máy chủ và nút biên), bộ nạp khởi động sẽ chuyển sang vị trí chương trình cơ sở
cũ. Hình 12 thể hiện các bước của quá trình cập nhật này.

Step 1. After Reset: fetch PC value @ 0x00000004.

Step 2. Bootloader starts.

Step 3. Bootloader search for oldest and newest image.

- Check FW Header information.


- Find app key (0x55AA55AA) at end of header.
- Assign FW location to be updated (oldest).

Step 4. Update trigger received.

- Receive header first.


- Validate it is a new version.
- Start updating new firmware in oldest location.

Step 5. Update Completed.

- Update new firmware header.


- Erase/Update older firmware header.

Step 6. Jump to new application.

- Relocate VTOR table.


- PC fetch value from new firmware interrupt table.
1

3 Tiêu đề FW 3
5
H
Bảng ngắt
6 FW3

FW 3 4

3
5

2
7. Phần mềm BootLoader
Bộ tải khởi động được triển khai trong S32K144, sử dụng bảng đánh giá (EVB) và IDE S32 Design
Studio (S32DS). Bộ tải khởi động được triển khai sẽ thực thi mỗi khi có thiết lập lại trong bộ vi điều
khiển. Sau khi thiết lập lại, bộ nạp khởi động sẽ khởi chạy cấu hình đồng hồ và giao tiếp của nó, đồng
thời kiểm tra vùng vật lý flash của chương trình nơi chứa phần sụn cũ nhất.
Trong trường hợp S32K144, bootloader đợi 4 giây để nhận được trigger để bắt đầu quá trình cập nhật,
trong trường hợp này trigger là một thông báo cụ thể. Nếu kích hoạt xảy ra, quá trình cập nhật sẽ bắt đầu
thông qua giao tiếp CANFD. Trong trường hợp không được kích hoạt sau 4 giây, bộ nạp khởi động sẽ
khôi phục cấu hình đồng hồ và thiết bị ngoại vi liên lạc về mặc định và chuyển đến vị trí chứa chương
trình cơ sở mới nhất. Để phát hiện được thông báo kích hoạt, S32K144 cần được đặt lại, do đó khoảng
thời gian 4 giây sẽ bắt đầu lại.
Bộ tải khởi động được đặt ở 16kB đầu tiên của vùng bộ nhớ linh hoạt. S32K144 trước đây được phân
vùng để hoạt động như bản sao lưu EEPROM trong đó 16kB được dành riêng cho flash dữ liệu (thực thi
bộ nạp khởi động), trong khi 48kB còn lại được sử dụng để sao lưu dữ liệu EEPROM và lưu trữ khóa cho
CSEc.
Hình bên dưới hiển thị các vùng bộ nhớ như được chỉ định trong tệp liên kết cho bộ tải khởi động
S32K144

Phần sụn của bộ nạp khởi động được tổ chức theo các lớp sau.
Memory: Giao diện trừu tượng hóa bộ nhớ giữa bộ nạp khởi động và trình điều khiển flash cấp thấp, để
khởi chạy các hoạt động như ghi và xóa.

Flash driver: Trình điều khiển cấp thấp cho bộ điều khiển flash trong MCU S32K1xx, dành cho các hoạt
động xóa/ghi/xác minh.

Communication: Giao diện trừu tượng giữa bộ nạp khởi động và thiết bị ngoại vi giao tiếp CANFD, để
xử lý việc nhận dữ liệu từ máy chủ và truyền các thông báo xác nhận. Trình điều khiển FlexCAN: Trình
điều khiển cấp thấp dành cho thiết bị ngoại vi giao tiếp FlexCAN trong các thiết bị S32K1xx, để gửi và
truyền dữ liệu qua bus CANFD.

Secure communication: Lớp giao diện bảo mật được bộ tải khởi động sử dụng để yêu cầu mã hóa/giải mã
dữ liệu cũng như xác thực tính xác thực và tính toàn vẹn của các tin nhắn nhận được, tận dụng thiết bị
ngoại vi bảo mật.

CSEc driver: Trình điều khiển cấp thấp để xử lý các hoạt động mã hóa/giải mã và tính toán CMAC bằng
thiết bị ngoại vi CSec trong S32K1xx.

You might also like