Một cách tốt để mcu xác định phiên bản phần cứng nào đang chạy?


13

Tôi đang làm việc trên một thiết kế sản phẩm mới và có thể sẽ có những thay đổi / sửa chữa phần cứng nhỏ hoặc lớn trong suốt vòng đời của sản phẩm. Để cập nhật firmware trong tương lai trong trường, tôi cần một cách để xác định sửa đổi phần cứng. Một chiến lược tốt là gì?

Tôi hiện đang kéo hai chân dự phòng lên / xuống bằng các điện trở bên ngoài và kiểm tra mẫu. Điều này chỉ cho phép sửa đổi 4 phần cứng, nhưng điều đó có thể đủ cho các mục đích thực tế. Nó có thể trở thành vấn đề nếu tôi cần một hoặc cả hai chân đó trong lần sửa đổi phần cứng trong tương lai.

Tôi đoán một cách kinh tế hơn có thể là có một bộ chia điện trở được kết nối với chân ADC. Mỗi sửa đổi phần cứng có thể có điện trở giá trị khác nhau. Thật không may, tôi không có bất kỳ ADC dự phòng nào trong thiết kế hiện tại của mình.

Tôi đoán một cách khác có thể là mã hóa số phiên bản phần cứng trong EEPROM hoặc đèn flash mcu trong quá trình sản xuất? (Chúng tôi không có cơ sở đó vào lúc này.)

Tôi đoán tôi đang tìm kiếm gợi ý cho một phương pháp linh hoạt và mạnh mẽ.

[BIÊN TẬP]

Re. đề xuất từ ​​@ trav1s: Tôi không có bus địa chỉ mỗi se nhưng tôi có EEPROM 24LCxx trên bus I2C. 3 bit thấp của Địa chỉ nô lệ được kết nối cứng. Tôi đoán rằng tôi có thể thay đổi các bit địa chỉ và tìm kiếm EEPROM trong khi khởi động.

Câu trả lời:


7

Đây là một cái gì đó tôi đối phó với trên cơ sở liên tục. Chúng tôi có phần cứng rất phức tạp đã hoạt động trong gần 10 năm, với các phiên bản khác nhau của các hệ thống con khác nhau. Một số hệ thống con có mã 2 bit, nhưng như bạn đã đề cập, điều đó không phải lúc nào cũng đủ.

Đề xuất EEPROM là một gợi ý tốt, nhưng nó yêu cầu lập trình EEPROM và điền vào bảng với phiên bản phù hợp.

Những gì tôi muốn đề xuất là một thanh ghi dịch chuyển ra song song 8 bit như 74HC166. Số phiên bản có thể được đặt trên đầu vào bởi chính bo mạch PC buộc đầu vào CAO hoặc THẤP và sau đó bạn chỉ cần 3 chân để tải và đọc thanh ghi thay đổi từ MCU.


Tôi thích rằng phiên bản hw được cài đặt sẵn trên bo mạch, theo cách đó tôi chỉ cần một phiên bản phần sụn và tôi không cần phải xử lý các EEPROM được lập trình sẵn. Có vẻ như một thanh ghi thay đổi có thể được tìm thấy với giá khoảng 0,1 USD và điều đó là ổn.
vữa

2
Dọc theo những dòng tương tự, bạn cũng có thể sử dụng bộ mở rộng cổng I2C treo trên xe buýt I2C của mình. Nó có thể đắt hơn một chút, mặc dù.
alex.forencich

8

Tôi sẽ không sử dụng số phiên bản được lập trình vào vi điều khiển. Trừ khi phần mềm là khác nhau cho các phiên bản bảng khác nhau, nhưng sau đó phiên bản bảng có vẻ không cần thiết đối với tôi. Có càng ít phiên bản phần mềm của vi điều khiển càng tốt, lý tưởng chỉ là một. Mỗi phiên bản khác nhau có thể gây ra vấn đề hậu cần.

Mã EEPROM là một ý tưởng tốt, vì nó cho phép nhiều mã bảng khác nhau, nhưng lấy nó ra khỏi vi điều khiển, trong một thiết bị riêng biệt. EEPROM đắt tiền cho dung lượng lớn (đắt hơn nhiều so với Flash), nhưng với một vài byte bạn có thể thấy chúng rẻ. Cái này chỉ 16 xu trong 100 giây và chỉ cần 1 dòng I / O.

Một cách để giảm khả năng xảy ra lỗi là có một gói khác nhau cho mỗi phiên bản bảng. Vì vậy, có một loạt EEPROM được lập trình với phiên bản số 1 trong SOT-23, phiên bản 2 tiếp theo trong MSOP, v.v. Sau đó, bạn không thể có EEPROM phiên bản 1 trên bảng phiên bản 2.


Cám ơn. Đây có thể là một câu hỏi ngu ngốc, nhưng làm thế nào để tôi có được một loạt EEPROM được lập trình trước khi đưa chúng lên bảng? Tôi không có cơ sở để tháo EEPROMS khỏi băng, lập trình chúng, đặt lại băng và gửi băng cho nhà lắp ráp PCB.
vữa

@morten - Nhà cung cấp của bạn có thể làm điều đó cho bạn. Bạn gửi cho họ tệp của bạn (một byte :-)) và bạn lấy lại các phần được lập trình lại, được đánh dấu bằng dấu của sự lựa chọn của bạn. Chi phí sẽ phụ thuộc vào kích thước lô; bạn sẽ có chi phí cố định + chi phí cho mỗi phần. Chúng tôi đã từng tính toán nếu việc tự lập trình sẽ rẻ hơn, nhưng trong mọi trường hợp đối với hàng ngàn người, điều đó không đáng.
stevenvh

4

Một tùy chọn sẽ chỉ sử dụng hai chân kỹ thuật số là như thế này:

Sơ đồ mạch

Bằng cách thay đổi giá trị R1 và C1, bạn có thể có thời gian sạc khác nhau cho tụ điện mà bạn có thể đo để xác định phiên bản phần cứng.


Aha, giải pháp khá thông minh :-)
morten

2

Nếu có bất kỳ không gian chưa sử dụng nào trên bus địa chỉ, bạn có thể đặt một thanh ghi ROM trên bus có thể được MCU đọc. Thanh ghi sẽ chứa số phiên bản của phần cứng. Khi MCU đọc từ địa chỉ đó, thanh ghi sẽ ghi giá trị của nó vào bus dữ liệu. Sổ đăng ký có thể được gắn cứng trên bảng hoặc nếu bạn muốn có thể thay đổi số phiên bản bằng tay không, bạn có thể tạo các chân có thể được buộc lên / xuống như bạn đang làm bây giờ.


Có lẽ tôi có thể sử dụng địa chỉ của chính EEPROM ... xem chỉnh sửa để đặt câu hỏi.
vữa

ĐỒNG Ý. Không biết có xe buýt I2C. Có lẽ bạn chỉ có thể tạo một nô lệ I2C nhỏ xíu đọc lại số phiên bản khi MCU đọc từ nó.
travisbartley
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.