Cách lập trình nhiều STM32F trên cùng một PCB


7

Tôi làm việc trong một cuộn quản lý và chỉ có kiến ​​thức điện tử rất hạn chế (đủ để thực hiện các dự án arduino đơn giản, v.v.).

Chúng tôi đang làm việc trên một sản phẩm tại thời điểm này có 3 STM32F303 và 2 STM32F103 và bộ xử lý chính là AM5718.

Tôi chỉ tự hỏi làm thế nào bạn sẽ tải lên và nâng cấp chương trình cơ sở và bộ nạp khởi động mỗi bộ xử lý bao gồm AM5718.

5 STM32 được kết nối với AM5718 thông qua UART và tất cả đều trên cùng một PCB.

Tôi muốn có một ý tưởng tốt về cách điều này sẽ được thực hiện sau khi PCB được sản xuất và sản phẩm đang ở trong lĩnh vực này.

Tôi rõ ràng sẽ yêu cầu kỹ sư điện tử làm việc trong dự án nhưng chúng tôi đã hoàn thành cho xmas.


Bạn không được ở Mỹ, bởi vì ông chủ ở đây sẽ gọi bạn ở nhà ....: /
Daniel

Haha bạn nói đúng, tôi đang ở Anh! Nó không phải là một vấn đề lớn đến nỗi nó đảm bảo gọi điện cho ai đó ở nhà. Chủ yếu chỉ để thỏa mãn sự tò mò của tôi và cũng tốt để có được lời khuyên của bên thứ 3!
Terry Gould

Chào. Nếu có câu trả lời giúp bạn giải quyết vấn đề của mình, vui lòng nhấp vào Chấp nhận câu trả lời đó. Cảm ơn.
Armandas

Câu trả lời:


5

Nếu thiết kế phần cứng được thực hiện chính xác và giả sử UART được sử dụng để lập trình, các bước sẽ đại khái như sau:

  1. CPU chính đặt lại MCU đã chọn.
  2. CPU sau đó đưa các chân BOOT cần thiết đến trạng thái thích hợp và giải phóng thiết lập lại.
  3. Bộ tải khởi động MCU khởi động và chờ dữ liệu xuất hiện trên dòng UART thích hợp.
  4. CPU gửi dữ liệu nhị phân qua UART và đặt lại MCU khi hoàn tất.
  5. MCU chạy với phần sụn mới.

Đây là hình ảnh hiển thị lựa chọn bộ nạp khởi động cho các phần STM32F10xxx:

nhập mô tả hình ảnh ở đây

Các bước tương tự sẽ được lặp lại cho mỗi MCU.

Bộ xử lý chính có thể được cập nhật theo nhiều cách, nhưng nó thường diễn ra như vậy:

  1. Chương trình cơ sở được tải xuống bộ nhớ cục bộ (FLASH, RAM, Thẻ SD, v.v.)
  2. CPU khởi động lại và bộ nạp khởi động phát hiện mã nâng cấp.
  3. Bộ tải khởi động CPU đọc dữ liệu, kiểm tra xem nhị phân có hợp lệ không và lập trình các thành phần FLASH thích hợp.
  4. CPU tự khởi động lại một lần nữa và tải với phần sụn mới.

Cập nhật.

Dựa trên phần cứng hiện tại của bạn, bạn sẽ phải thực thi bộ tải khởi động bằng cách chuyển đến địa chỉ bộ nhớ phù hợp (xem trang 20 của AN2606 ). Tôi không biết nhiều về điều này, nhưng nhà thiết kế phần cứng của bạn sẽ có thể tìm ra nó. Không có sự kiểm soát của dòng thiết lập lại là một chút giám sát.


Vì vậy, sẽ yêu cầu nhiều chân hơn 2 chân USART hoặc MCU sẽ được kết nối với CPU chính thông qua các chân khác.
Terry Gould

Tôi muốn đoán rằng bạn cần ít nhất hai GPIO nữa. Một để đặt lại MCU và một để chọn chế độ BOOT.
Armandas

Các chân nào sẽ là chế độ khởi động lại và khởi động trên MCU và các chân nào chúng sẽ kết nối với CPU? Tôi đã cố gắng để nhìn bản thân mình nhưng không thể hiểu ý nghĩa của nó. Hiện tại các chân NRST được kết nối với nguồn thông qua một điện trở và các chân khởi động được kết nối với gnd.
Terry Gould

@ProductDesigner cho kết nối hiện tại bằng điện trở và kết nối trực tiếp xuống đất, bạn sẽ cần một thiết kế lại mạch / PCB để chứa các tín hiệu được Logic kiểm soát thay vào đó, bây giờ mà bạn biết làm thế nào nó hoạt động
KyranF

NRST được sử dụng để đặt lại và BOOT0 và BOOT1 được sử dụng để chọn chế độ khởi động. Về phía CPU, họ có thể kết nối với bất kỳ GPIO nào. Dựa trên mô tả phần cứng của bạn, bạn có thể phải sử dụng một phương pháp khác để chạy bộ tải khởi động. Tôi sẽ cập nhật câu trả lời của tôi.
Armandas

3

Tôi nghi ngờ bạn cần tải firmware AM5718 qua JTAG, tuy nhiên tôi không quá quen thuộc với họ CPU này.

STM32 (giống như nhiều CPU ARM khác hiện nay) có bộ tải khởi động ROM được tích hợp bởi ST. Trên một số dòng STM32, điều này được thực hiện bằng cách giữ chân BOOT0 cao trong khi đặt lại. Để khởi động chương trình bình thường của bạn, bạn cần giữ pin thấp. Tuy nhiên, điều này thuận tiện không phải lúc nào cũng trong bảng dữ liệu, mà thường trong hướng dẫn sử dụng.

Bộ tải khởi động ST thường hỗ trợ một số giao thức và UART là một giao thức rất phổ biến. Mặc dù vậy, không phải tất cả các vị trí UART hoặc chân trên chip STM32 đều được hỗ trợ - vì vậy bạn cần chọn các chân cổng nối tiếp. Tài liệu này rất hữu ích nếu bạn có thể tìm đúng gia đình.

Các thủ tục Armandas mô tả là chính xác. Nếu bạn có một số chân dự phòng trên CPU AM5718, bạn có thể tự động kích hoạt bộ tải khởi động của ST thông qua phần mềm. Điều này không tốn một số chân GPIO trên CPU - theo lý thuyết, 1 dòng thiết lập lại bổ sung cho mỗi CPU được thêm vào. Bạn cũng có thể cần xem xét cách bo mạch của bạn sẽ khởi động trong thiết lập này trong khi AM5718 không hoàn toàn chạy.

Một lưu ý nhỏ: trên một số bộ phận STM32, bộ tải khởi động ROM sẽ bị tắt khi bạn bật bảo vệ đọc. Bạn vẫn có thể truy cập chip thông qua JTAG (sau khi xóa), nhưng không thông qua bộ tải khởi động. Ngoài ra, nếu bạn không thể làm cho kích hoạt tự động có vẻ phù hợp với phần cứng, bạn có thể cần thực hiện thủ công thông qua bộ nhảy & thủ tục giấy. Tuy nhiên, điều này chỉ thực tế trong nhà máy - nó không phải là một giải pháp rất hữu ích.

Cả hai lý do có thể giúp bạn hướng tới một bộ tải khởi động trong nhà có thể được kích hoạt thông qua một lệnh nối tiếp. Nó cũng bổ sung lợi thế 'bảo vệ' hình ảnh phần sụn của bạn thông qua mã hóa, với điều kiện bạn xử lý việc giải mã bên trong bộ tải khởi động.


Hiện tại tôi đang nghĩ rằng tốt nhất là để STM32 được kết nối với CPU chính thông qua UARTS của riêng chúng và có các chân khởi động và đặt lại được kết nối với các GPIO của CPU. Tôi chưa quan tâm đến phần mềm, tôi chỉ muốn thiết kế phần cứng là bằng chứng trong tương lai.
Terry Gould

3

Nếu tất cả các bộ phận đều tuân thủ JTAG và đều nằm trong cùng một miền sức mạnh (hoặc nói cách khác là ở trạng thái đảm bảo tính toàn vẹn của chuỗi), bạn có thể xây dựng chuỗi quét và lần lượt sử dụng chuỗi đó để đánh từng bộ phận.

Tuy nhiên, có vẻ như dự án đã hoàn thành và bạn đang quản lý :), vì vậy tôi nghĩ tùy chọn UART là tuyến đường tốt nhất. Để rõ ràng, mỗi STM có UART riêng cho bộ xử lý lớn hoặc họ chia sẻ (điều này hơi kỳ lạ ...)? Nếu sau này, như các áp phích khác đã nói, bạn sẽ cần một GPIO cho mỗi người để chọn người đang hoạt động.


Giai đoạn đầu tiên của sự phát triển phần cứng đã sẵn sàng để tạo mẫu. Tôi chỉ xem qua sơ đồ và lo ngại rằng các STM chỉ được kết nối với CPU chính thông qua UART, các chân thiết lập lại và khởi động của chúng được kết nối với nguồn / gnd như trên. Mỗi STM được kết nối với CPU chính thông qua UART của riêng chúng. Vì vậy, hiện tại tôi đang nghĩ rằng đặt cược tốt nhất là để mỗi STM được kết nối với CPU thông qua các UART riêng biệt (như hiện tại) và sau đó kết nối các chân khởi động và đặt lại của chúng với các GPIO của CPU chính.
Terry Gould

Đúng, có vẻ lành mạnh. Điều duy nhất tôi chắc chắn là chuỗi thiết lập lại của bạn sẽ truyền qua CPU bất kể trạng thái phần mềm; tức là khi VDD giảm xuống dưới ngưỡng chấp nhận được, người giám sát nội bộ sẽ đảm nhận và kích hoạt thiết lập lại, hoặc bạn nên chạy điều khiển GPIO cho mỗi lần đặt lại STM thông qua IC giám sát đặt lại.
Krunal Desai

Ok bạn đã mất tôi bây giờ .. Hãy nhớ rằng tôi chưa có kiến ​​thức lớn về làm việc trên các thiết bị điện tử ở quy mô này. Vì vậy, bạn đang nói về việc có một IC riêng để xử lý các thiết lập lại? Tôi thực sự chỉ quan tâm đến việc có được phần cứng ngay tại thời điểm này.
Terry Gould

Một trình giám sát thiết lập lại riêng biệt thường được sử dụng khi bạn muốn một phần tử phần cứng không trạng thái để xác nhận thiết lập lại trong các điều kiện nhất định. Ví dụ: người giám sát thiết lập lại 3,3V có thể là một bộ phận 5 chân - VDD, GND, RST, RST # và MR #. Nó sẽ xác nhận thiết lập lại khi điện áp đạt 3.08V (hoặc bất cứ điều gì nó được đặt quá, một số có thể điều chỉnh) để tất cả các bộ xử lý / vv đi vào thiết lập lại an toàn trước khi nguồn điện của chúng giảm quá xa. Chân MR # là thứ bạn có thể móc ra để nói nút ấn; nó tạo ra một xung khi bạn xác nhận nó và sau đó giải phóng, hoặc nếu bạn giữ nó, nó sẽ giữ tất cả trong thiết lập lại.
Krunal Desai

Bạn có nghĩ rằng một giám sát viên thiết lập lại là cần thiết trong ứng dụng này? Nó sẽ là một ic cho mỗi bộ xử lý hay chỉ là một cho toàn bộ hệ thống? Điều gì sẽ là một ic tốt để sử dụng?
Terry Gould
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.