Nâng cấp ARM qua mạng


9

Chúng tôi sẽ tạo một bảng ARM với modem GSM trên bo mạch.
Chúng tôi muốn có thể nâng cấp firmware ARM qua mạng.

Có bất kỳ giải pháp nguồn mở tốt, đáng tin cậy cho điều đó không?
Nếu không, có một hệ điều hành trả phí với tính năng này?


2
ARM khá chung chung: có nhiều nhà sản xuất nhúng các kiến ​​trúc ARM và một số trong số họ có thể cung cấp tính năng đó.
clabacchio

1
Một thông tin cụ thể hơn về chip / gia đình ARM mà bạn dự định sử dụng sẽ tốt. Nhiều người nếu không phải tất cả các bộ vi điều khiển Cortex-M đều hỗ trợ ghi vào flash từ mã người dùng. Ví dụ về các triển khai nguồn mở, chẳng hạn như bộ tải khởi động Maple leaflabs.com/docs/bootloader.html và tôi nghĩ rằng tôi đã thấy nâng cấp chương trình cơ sở qua một liên kết vô tuyến được hỗ trợ trong một số quad quad.
Thorn

Hiện tại chúng tôi chưa chọn thiết bị ARM;)
hotips

7
Vấn đề lớn với việc nâng cấp firmware là làm thế nào để buộc chip vào chế độ cập nhật một khi có lỗi với firmware. Khi bạn có quyền truy cập vào chip, bạn có thể đặt lại nó và buộc pin bootload cao, nhưng làm thế nào bạn sẽ làm điều đó trong không khí? Giải pháp đáng tin cậy duy nhất tôi có thể tưởng tượng là có một chip thứ hai (không thể cập nhật) xử lý giao tiếp cơ bản và có thể cập nhật chip chính. Sau khi giải quyết vấn đề đó, quá trình tải khởi động thực tế có thể đơn giản như việc sử dụng (ví dụ) bộ tải khởi động được tích hợp trong chip (ví dụ, tôi biết tất cả LPC uC đều có bộ tải khởi động nối tiếp).
Wouter van Ooijen

2
@Hernan Điều đó sẽ làm cho các chế độ thất bại tinh tế có thể xảy ra, như một chip (bằng cách nào đó chạy mã sai) giữ cho cái kia được đặt lại. Giải pháp thực sự đáng tin cậy duy nhất là giữ các chức năng trong một chip đơn giản đến mức bạn sẽ không bao giờ cần phải cập nhật nó.
Wouter van Ooijen

Câu trả lời:


9

Tôi không biết về bất kỳ giải pháp được tạo sẵn nào nhưng tôi sẽ mô tả cách tôi đi xung quanh nó trong một dự án. Nó không hoàn toàn 'không thể chấp nhận được' nhưng tôi không biết rằng nó đã thất bại trong hàng ngàn lần nâng cấp. Đối với ứng dụng này, tỷ lệ thất bại rất thấp vẫn sẽ rẻ hơn so với việc phải truy cập vào các đơn vị.

Ứng dụng chính có ba loại gói bổ sung được thêm vào giao thức giao tiếp thông thường bao gồm phát hiện lỗi và phân loại thử lại trên đầu trang:

  1. Lệnh cập nhật firmware bắt đầu xóa vùng nhớ dành riêng trong SPI Flash bên ngoài. Nó trả về lỗi nếu thiết bị đang chạy từ pin dự phòng hoặc nếu thiết bị chạy từ nguồn ngoài nhưng trạng thái sạc pin dưới 25%.

  2. Lệnh khối ghi chấp nhận một địa chỉ và dữ liệu bù được ghi vào bộ nhớ Flash ngoài trong các khối nhỏ. Giao thức cấp cao hơn đảm nhiệm việc phát hiện lỗi và truyền lại. Sau khi mỗi khối được viết, nó được đọc lại và xác minh trước khi lệnh được xác nhận.

  3. Lệnh cập nhật phần sụn kết thúc bao gồm độ dài mà phần sụn nhận được phải cùng với CRC32 của toàn bộ hình ảnh để xác minh thêm. Nếu phù hợp với nội dung của bộ nhớ Flash bên ngoài và các điều kiện nguồn vẫn ổn với cùng độ dài và CRC32 được chuyển đến khu vực EEPROM cùng với 'số ma thuật' để chỉ ra rằng bản cập nhật firmware đang chờ xử lý.

  4. Một vòng lặp cứng được thực thi trong ứng dụng chính để buộc khởi động lại watchdog.

  5. Bộ tải khởi động (nằm trong khu vực được bảo vệ ghi của Flash của ARM) nhìn thấy số ma thuật trong EEPROM và một lần nữa xác minh CRC32 của hình ảnh. Nếu tất cả đều ổn, nó sẽ chuyển hình ảnh từ Flash bên ngoài vào khu vực chương trình chính của Flash của ARM.

  6. Thông tin nâng cấp đang chờ xử lý sẽ bị xóa khỏi EEPROM và một vòng lặp cứng buộc phải khởi động lại. Lúc này bộ nạp khởi động sẽ khởi động ứng dụng chính bình thường.

Mặc dù tôi chưa bao giờ thấy giai đoạn cập nhật không thử nghiệm các bản phát hành phần sụn mới trước khi triển khai là rất quan trọng khi sử dụng phương pháp này. Nếu một bản phát hành mới không có khả năng kết nối với mạng GSM và chấp nhận các bản cập nhật trong tương lai, nó sẽ yêu cầu cập nhật firmware tại chỗ.


1

Bạn đang chạy Linux hoặc RTOS, hay kim loại trần? Nếu sử dụng Debian, bạn có thể chụp nhanh hệ thống tập tin hiện tại, thực hiện nâng cấp thông qua "apt-get" sau đó giữ hoặc khôi phục các thay đổi tùy thuộc vào việc nó có hoạt động hay không.


Chúng tôi có Linux và kim loại trần tùy thuộc vào ứng dụng ;-)
hotips

1
Nếu bạn có Linux thì bạn có thể tận dụng rất nhiều cơ sở hạ tầng đó. Cách tôi xử lý các bản cập nhật trong dự án hiện tại của mình là tạo các tệp .deb cho các ứng dụng tùy chỉnh, sau đó sử dụng bản cập nhật apt-get để cập nhật hệ thống. Tôi cũng đang thử nghiệm với btrfs. Hệ thống tập tin đó cho phép bạn chụp ảnh nhanh. Vì vậy, kế hoạch của tôi là chụp nhanh các thư mục mong muốn, thử và cập nhật và nếu nó không hoạt động, hãy hoàn nguyên ảnh chụp nhanh. Nếu bạn đang sử dụng kim loại trần thì có lẽ bạn cần phải sử dụng cách tiếp cận bộ nhớ kép thông thường, một hình ảnh cho mã làm việc mới nhất và một hình ảnh khác cho mã được tải xuống mới.
fret basset
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.