2011-11-03 45 views
14

Tôi đang làm việc trên thiết bị dựa trên Cortex-M3 và tôi cần triển khai cơ chế lập trình trong ứng dụng (IAP) để có thể cập nhật phần mềm thiết bị mà không cần JTAG (thay vào đó, chúng tôi sẽ sử dụng TFTP hoặc HTTP). Trong khi các ví dụ mã liên quan đến IAP có sẵn từ ST Microelectronics là đủ rõ ràng với tôi, tôi không thực sự hiểu làm thế nào các công trình tái nhấp nháy.Lập trình trong ứng dụng cho ARM (Cortex M3) hoạt động như thế nào?

Theo tôi hiểu, các hướng dẫn được lấy bởi CPU từ Flash thông qua bus ICode (và khối tìm nạp trước). Vì vậy, đây là câu hỏi khá ngớ ngẩn của tôi: tại sao chương trình đang chạy bị hỏng trong khi nó tự khởi động lại (tức là thay đổi bộ nhớ Flash mà nó đang chạy)?

Trả lời

9

Một giải pháp phổ biến là có một khu vực dành riêng nhỏ trong flash, nơi chương trình flash thực tế được lưu trữ. Khi phần vững mới đã được tải xuống chỉ cần thực hiện một bước nhảy vào mã trong khu vực này.

Tất nhiên, khu vực nhỏ này không bị ghi đè khi flash firmware, nó chỉ có thể được thực hiện bằng các phương tiện khác (như JTAG). Vì vậy, hãy đảm bảo chương trình nhấp nháy này hoạt động tốt để bắt đầu. :)

+0

Ah-ha ... Đúng vậy, tôi đã bỏ lỡ phần đó khi nghiên cứu mã! –

+1

Có, tuy nhiên trên nhiều thiết bị, nó thực sự cần thiết để chạy từ ram trong khi lập trình flash, vì vậy một đoạn mã lập trình ngắn phải được sao chép vào RAM và được gọi để thực hiện lập trình thực tế, ngay cả khi quá trình tổng thể được quản lý mã trong một phần dành riêng của flash. –

+0

Có nhiều kịch bản lỗi mà bạn cần phải xem xét, nếu không, bạn có thể sẽ làm hỏng hệ thống của bạn.IAP là một hòn đá góc phát triển f/w và làm nó đặc biệt đúng trên mạng bị mất có thể phức tạp. – Amit

6

Tôi không quen với việc triển khai STM, nhưng trong các chip NXP, các thường trình IAP được lưu trữ trong một vùng ROM riêng biệt, được dành riêng mà không thể bị xóa bởi mã người dùng.

Nếu bạn tự triển khai mã ghi mã bằng cách sử dụng thanh ghi HW trực tiếp, bạn cần đảm bảo rằng nó không chạm vào các sector đang chạy hoặc chạy từ RAM.

1

Bây giờ một ngày nhiều bộ điều khiển vi mô hỗ trợ IAP, có thể lập trình bộ nhớ flash của nó trong khi thực thi chương trình trong cùng một flash.

Đối với IAP, bộ nhớ chương trình trong flash có thể được chia thành 2 phần, một phần thực thi & các phần sao lưu khác.

Nói chung, chúng tôi lập trình bộ nhớ flash tại một vị trí (ví dụ, part-1) qua JTAG, có phiên bản phần sụn là 0,01. Đối với IAP, tức là lập trình flash ở phần khác (part-2) trong khi mã đang thực thi, API tương ứng sẽ được cung cấp trong phiên bản phần mềm 0,01, giúp lập trình phần flash-2, Sau khi hoàn thành lập trình phiên bản firmware thành công được cập nhật là 0,02. Khi bộ xử lý khởi động lại, chương trình thực hiện chuyển sang firmware mới nhất bằng cách kiểm tra phiên bản firmware lúc khởi tạo.

Phần mà phần mềm đang thực thi được gọi là phần thực thi và phần còn lại là sao lưu. tại sao nó được gọi là back-up có nghĩa là, giả sử nếu tồn tại bất kỳ tham nhũng firmware nào trong khi lập trình, phiên bản firmware sẽ không cập nhật & khi khởi động lại, chương trình điều khiển sẽ tự động nhảy trở lại phần vững sao lưu sau khi kiểm tra số phiên bản.

0

Một cách hay khác để làm điều đó là sử dụng bộ nạp khởi động tùy chỉnh. Tuy nhiên STM IAP không được lưu trữ trong Flash để nó không thể được ghi đè bởi chính nó. Những gì mọi người thường làm là để đổ đèn flash trong hai phần, một là dành riêng cho Customload Bootloader và một là dành cho ứng dụng. Trình khởi động đảm bảo rằng nó không ghi vào khu vực được gán riêng của nó. Bootloader có thể được lập trình thông qua JTAG và sau đó ứng dụng có thể sử dụng bộ tải khởi động cho chính chương trình.