Điều gì có thể khiến vi điều khiển thiết lập lại bất ngờ?


26

Một loại lỗi đặc biệt khó chịu trong hệ thống do bộ vi xử lý điều khiển là cho bộ vi xử lý bất ngờ thiết lập lại. Một công cụ quan trọng để gỡ lỗi loại vấn đề này là một danh sách các nguyên nhân có thể. Điều gì có thể khiến vi điều khiển thiết lập lại bất ngờ?


1
Một số câu trả lời ở đây có thể hữu ích: Electronics.stackexchange.com/questions/30430/NH Bạn đang sử dụng loại vi điều khiển nào?
Jon L

Tôi thường sử dụng DSPIC. Nhưng tôi không cố gắng gỡ lỗi bất cứ điều gì cụ thể ngay bây giờ, chỉ cần biên soạn một danh sách tham khảo các vấn đề tiềm ẩn.
Stephen Collings

2
Đây có phải là một câu hỏi bài tập về nhà?
old_timer

1
@dwelch Có lẽ là dành cho ai đó ở đâu đó, nhưng không phải cho tôi hay bất kỳ học sinh nào của tôi.
Stephen Collings

1
@Vorac phải đọc rằng Atmel không thể cam kết giữ URL đáng tin cậy.
Kaz

Câu trả lời:


51

Trên chip PIC và DSPIC, tôi đã quan sát thấy các nguyên nhân sau khi thiết lập lại không mong muốn.

Phần cứng:

  • Đặt lại pin điều khiển thấp hoặc nổi. Kiểm tra những thứ rõ ràng đầu tiên!
  • Khớp nối ESD vào pin reset. Tôi đã thấy điều này xảy ra khi thiết bị hoàn toàn không liên quan được bật trên cùng một bàn. Đảm bảo có đủ điện dung trên pin đặt lại, có thể lên tới 1 uF.
  • Khớp nối ESD vào các chân khác của bộ xử lý. Các đầu dò phạm vi đặc biệt có thể hoạt động như ăng ten, ghép nhiễu vào chip và gây ra các thiết lập lại lẻ. Tôi đã nghe báo cáo về mã đặt lại "opcode không hợp lệ".
  • Mối hàn không tốt / cầu không liên tục. Có thể bị mất hoặc rút ngắn đường ray điện, trên bộ xử lý hoặc ở nơi nào khác trên bảng.
  • Đường sắt điện trục trặc / tiếng ồn. Có thể được gây ra bởi bất kỳ số lượng các vấn đề bên ngoài, bao gồm một bộ điều chỉnh bị hư hỏng hoặc nhúng trong nguồn cung cấp thượng nguồn. Đảm bảo đường ray nguồn cho bộ xử lý ổn định. Có thể yêu cầu thêm nắp ở đâu đó, có thể tách nắp trực tiếp trên bộ xử lý.
  • Một số bộ vi điều khiển có chân Vcap, không được kết nối với VDD và phải có tụ điện riêng. Việc không kết nối pin này đúng cách có thể có kết quả không thể đoán trước.
  • Điều khiển đầu vào tương tự âm qua một giới hạn nhất định sẽ gây ra thiết lập lại báo cáo trong RCON giống như mất điện. Điều tương tự cũng có thể đúng với đầu vào kỹ thuật số.
  • DV / dt rất cao trong bộ chuyển đổi năng lượng gần đó có thể gây ra thiết lập lại mất điện. (Xem câu hỏi này .) Tôi đã thấy điều này trong hai trường hợp và trong một lần tôi đã có thể theo dõi nó để ghép điện dung. Một IGBT đang chuyển đổi 100-200 ampe và khi tắt một số mạch phản hồi đã thấy một vài micro giây, chuyển từ 2V sang hơn 8V trên bộ xử lý 3,3V. Việc tăng nắp bộ lọc trên đường ray phản hồi đó đã khiến cho việc đặt lại dừng lại. Người ta có thể tưởng tượng rằng việc thêm bộ lọc dV / dt trên bóng bán dẫn có thể có tác động tương tự.

Phần mềm:

  • Đồng hồ bấm giờ. Hãy chắc chắn rằng bộ định thời watchdog được xóa đủ thường xuyên, đặc biệt là trong các nhánh của mã của bạn có thể mất nhiều thời gian để thực thi, như EEPROM viết. Kiểm tra điều này bằng cách vô hiệu hóa cơ quan giám sát để xem vấn đề có biến mất không.
  • Chia cho số không. Nếu bạn đang thực hiện bất kỳ thao tác phân chia nào trong mã của mình, hãy đảm bảo số chia không bao giờ có thể bằng 0. Thêm một kiểm tra giới hạn trước khi phân chia. Đừng quên rằng điều này cũng áp dụng cho các hoạt động modulo .
  • Chồng tràn. Quá nhiều lệnh gọi hàm lồng nhau có thể khiến hệ thống hết bộ nhớ động cho ngăn xếp, điều này có thể dẫn đến sự cố tại các điểm bất thường trong thực thi mã.
  • Ngăn xếp dưới. Nếu bạn đang lập trình trong trình biên dịch chương trình, bạn có thể vô tình thực hiện nhiều RETURN hơn bạn đã thực hiện CALL.
  • Thói quen không tồn tại thường xuyên. Nếu một ngắt được kích hoạt, nhưng không có thói quen ngắt được xác định, bộ xử lý có thể đặt lại.
  • Thói quen bẫy không tồn tại. Tương tự như một thói quen ngắt, nhưng đủ khác tôi sẽ liệt kê nó một cách riêng biệt. Tôi đã thấy hai dự án riêng biệt sử dụng DSPIC 30F4013, thiết lập lại ngẫu nhiên và nguyên nhân được theo dõi đến một cái bẫy được gọi nhưng không xác định. Tất nhiên, bây giờ bạn có câu hỏi tại sao một cái bẫy được gọi ở vị trí đầu tiên, có thể là bất kỳ số lượng nào, bao gồm cả lỗi silicon. Nhưng việc xác định tất cả các trình xử lý bẫy có lẽ là bước khởi đầu tốt trong chẩn đoán các thiết lập lại không giải thích được.
  • Chức năng con trỏ bị lỗi. Nếu một con trỏ hàm không trỏ đến một vị trí hợp lệ, hủy bỏ con trỏ và gọi hàm được trỏ đến có thể gây ra thiết lập lại. Một nguyên nhân gây cười của điều này là khi tôi khởi tạo một cấu trúc, với các giá trị liên tiếp của NULL (cho một con trỏ hàm) và -1 (cho một int). Dấu phẩy đã được đánh máy, do đó, con trỏ hàm thực sự đã được khởi tạo thành NULL-1. Vì vậy, đừng cho rằng chỉ vì nó là CONST nên nó phải chứa giá trị hợp lệ!
  • Chỉ số mảng không hợp lệ / âm. Hãy chắc chắn rằng bạn thực hiện kiểm tra giới hạn trên tất cả các chỉ số mảng, cả giới hạn trên dưới, nếu có.
  • Tạo một mảng dữ liệu trong bộ nhớ chương trình lớn hơn phần lớn nhất của bộ nhớ chương trình. Điều này thậm chí có thể không ném một lỗi biên dịch.
  • Truyền địa chỉ của một cấu trúc cho một con trỏ sang một loại khác, hủy bỏ con trỏ đó và sử dụng con trỏ được hủy đăng ký làm LVALUE trong một câu lệnh có thể gây ra sự cố. Xem câu hỏi này . Có lẽ, điều này cũng áp dụng cho các hành vi không xác định khác.

Trên một số DSPIC, thanh ghi RCON lưu trữ các bit cho biết nguyên nhân thiết lập lại. Điều này có thể rất hữu ích khi gỡ lỗi.


1
@reset pin: một pin thiết lập lại nổi được biết đến với các thiết lập lại giả. Luôn luôn buộc nó vào Vcc thông qua một điện trở.
jippie

4
Đây là một danh sách cực kỳ đầy đủ. Tôi tin tưởng vào kinh nghiệm của mình với các máy AVR rằng hầu hết nếu không phải tất cả các tình huống tương tự sẽ gây ra kết quả không mong muốn hoặc đặt lại.
HL-SDK

4
Hãy để tôi thêm một cái khác để lập trình ngôn ngữ Trình biên dịch - Đăng ký chưa từng có PUSH và POP từ ngăn xếp.
Michael Karas

2
Một vài điều nữa: dưới phần cứng, thiết lập lại màn hình. Theo phần mềm, hướng dẫn thiết lập lại phần mềm. Cả hai đều có sẵn trên một số vi điều khiển.
tcrosley

2
Một số khác cho danh sách: điện thoại di động đặt gần cáp có thể gây ra một lượng điện áp đáng kể trên các đường truyền yếu. Nếu bạn có đường dây đặt lại đi qua cáp (ví dụ: một bảng có thể buộc thiết lập lại dây khác), điện thoại di động gần cáp có thể kích hoạt thiết lập lại nếu ví dụ như nhận được cuộc gọi.
supercat

7

Chân RESET phải được điều khiển chính xác bằng cách đặt lại giám sát mạch trên / dưới điện áp và tạo tín hiệu đặt lại đủ dài. Với ý nghĩ đó, những trải nghiệm của tôi với thiết lập lại phần cứng không được kiểm soát xuất phát từ:

  • Crosstalk từ chuyển đổi dòng thành pin / dòng RESET (làm cho chúng ngắn lại)
  • Dịch chuyển / vòng lặp mặt đất gây ra bằng cách bật / tắt tải cao hiện tại bên ngoài
  • Tăng điện áp không được lọc bởi nguồn điện và quá ngắn để kích hoạt RESET thích hợp
  • Chuyển đổi tải bên ngoài bằng vi điều khiển gây ra các vấn đề trên (chủ yếu là tải cảm ứng như bật / tắt động cơ, rơle hoặc đèn cũ (dòng điện khởi động)
  • Điện áp / dòng tăng đột biến trên bất kỳ chân vi điều khiển nào (tệ nhất là bộ tạo dao động) có thể gây ra dòng ngược và có thể chuyển đổi thanh ghi bên trong (giống như điện áp tăng trên đường cung cấp). Nói chung, khi can thiệp vào một loại cảnh báo môi trường công nghiệp cần phải được áp dụng (để xem thêm: http://www.ichaus.biz/wp1_mcu_interface ). Sự thay đổi mức độ trên IO, lọc đầu vào và đầu ra chuyển mạch mềm cần được xem xét. Làm cho các đường cung cấp sạch sẽ là ưu tiên hàng đầu về phía phần cứng. Sau đó đặt lại và chân dao động, sau đó là IO-lines. -mm

1
Mặt đất thay đổi chỉ cắn tôi. Trong trường hợp của tôi, tôi có một phần cụ thể của mạng chung mang theo ~ 100 amps. Bộ vi điều khiển được tham chiếu đến một mặt của dấu vết dày đó, nhưng một số mạch mà vi điều khiển đang lái được tham chiếu đến đầu kia của dấu vết. Dấu vết chỉ có 3 mOhm, nhưng ở tốc độ 100 ampe đủ để có sự khác biệt 300 mV giữa micro và các thiết bị ngoại vi mà nó đang lái. Định tuyến lại các thiết bị ngoại vi là chung cho cùng một dấu vết đó như bộ điều khiển, và tất cả đều ổn. Không có thứ gọi là nút tại các dòng đó.
Stephen Collings

4

Một khả năng bổ sung mà tôi không thấy trong danh sách này, là một thiết bị hỗ trợ ICSP. Nếu không đủ lực kéo được sử dụng trên các dòng kích hoạt trong chế độ lập trình nối tiếp mạch, đôi khi có thể vào chế độ đó một cách ngẫu nhiên. Điều này dẫn đến việc thiết lập lại một khoảng thời gian ngắn sau đó khi không có bản cập nhật chương trình nào được gửi đến các dòng máy thu nối tiếp được chỉ định. Tôi nghi ngờ một bộ đếm thời gian theo dõi nội bộ buộc thiết lập lại nếu ICSP được khởi động và không có dữ liệu lập trình nào được gửi. Đây là một lỗi tôi đã mắc phải và mất rất nhiều thời gian để tìm kiếm với 16F876.


3

Đảm bảo rằng nếu bạn đang sử dụng chip logic CMOS hoặc TTL trong mạch của mình thì chúng có các tụ tách rời thích hợp trên Vdd và mặt đất (thường là 0,1 uF). Tôi đã sử dụng CD4021 trong một thiết kế và khi nó được sử dụng, rõ ràng nó đã gây ra một số đột biến khiến bộ vi xử lý khởi động lại. Sau đó, chu kỳ sẽ lặp lại. Đây cũng là lý do tại sao nên đặt một chuỗi thử nghiệm rõ ràng (như bật và tắt đèn LED một vài lần) khi bắt đầu mã của bạn để bạn biết rằng bộ vi xử lý đang hoạt động và thực thi mã.


2

Đây là một trong những điều hiếm hoi có thể bật lên:

Tôi đã có một dự án liên quan đến một vi điều khiển và nó sẽ tự thiết lập lại. Câu chuyện dài, hóa ra một số tùy chọn phải được kích hoạt hoặc vô hiệu hóa nếu không có thể đặt lại. Tôi chỉ tìm ra điều này bằng cách đọc errata sau khi từ bỏ mọi thứ khác.

Bây giờ tôi tạo thói quen đọc errata trước khi tôi quyết định sử dụng chip để biết bản thân mình đang làm gì và liệu đó có phải là thứ tôi có thể quản lý được không. Thật không may, sau khi tốt nghiệp, tôi thực sự không có ai để dạy tôi về những thực hành phổ biến nên phần lớn việc học trong thế giới thực của tôi đã trải qua thất bại và thất vọng.


Tôi thậm chí không nhận ra rằng câu hỏi này đã cũ và câu trả lời đã được cung cấp. Rất tiếc.
efox29 17/03/2015
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.