Cơ quan giám sát độc lập (IWDG) hay Cơ quan giám sát cửa sổ (WWDG)?


15

Tôi vẫn đang tìm kiếm một câu trả lời cho câu hỏi này:

Tại sao trong khi các MCU stm32 có một cơ quan giám sát hoàn hảo (ý tôi là Cơ quan giám sát cửa sổ (WWDG)), có một cơ quan giám sát đơn giản (Cơ quan giám sát độc lập (IWDG))?

Tôi tìm thấy trang này đã nói:

ST Vi điện tử có một dòng thiết bị Cortex-M3. M3 đã trở nên cực kỳ phổ biến đối với các thiết bị nhúng cấp thấp hơn và STM32F của ST là đại diện cho các bộ phận này (mặc dù WDT là một tiện ích bổ sung ST và không nhất thiết phản ánh việc triển khai của các nhà cung cấp khác). STM32F có hai cơ chế bảo vệ khác nhau. Một "Cơ quan giám sát độc lập" là một thiết kế vani đẹp mà ít có ý nghĩa gì ngoài việc dễ sử dụng. Nhưng Window Watchdog của họ cung cấp bảo vệ mạnh mẽ hơn. Khi hết giờ đếm ngược, thiết lập lại được tạo ra, có thể bị cản trở bằng cách tải lại bộ hẹn giờ. Không có gì đặc biệt ở đó. Nhưng nếu tải lại xảy ra quá nhanh, hệ thống cũng sẽ thiết lập lại. Trong trường hợp này "quá nhanh" được xác định bởi một chương trình giá trị vào một thanh ghi điều khiển.

Một tính năng thú vị khác: nó có thể tạo ra một ngắt ngay trước khi đặt lại. Viết một chút mã để ngắt đoạn ngắt và bạn có thể thực hiện một số hành động, ví dụ, đặt hệ thống ở trạng thái an toàn hoặc để chụp nhanh dữ liệu cho mục đích gỡ lỗi. ST đề nghị sử dụng ISR để tải lại cơ quan giám sát - nghĩa là đá con chó để việc thiết lập lại không xảy ra. Đừng nghe lời khuyên của họ. Nếu chương trình gặp sự cố, trình xử lý ngắt rất có thể tiếp tục hoạt động bình thường. Và việc sử dụng ISR để tải lại WDT làm mất hiệu lực toàn bộ lý do cho một bộ giám sát cửa sổ.

điều này :

Dòng CPU STM32F4 Cortex ™ -M4 mới của STMicroelectronics có hai cơ quan giám sát độc lập. Một chạy từ bộ dao động RC nội bộ của chính nó. Điều đó có nghĩa là tất cả mọi thứ có thể sụp đổ trong CPU và WDT vẫn sẽ kích hoạt. Ngoài ra còn có một cửa sổ canh gác cửa sổ khác (WWDT) yêu cầu mã để đánh dấu nó thường xuyên, nhưng không quá thường xuyên. Đây là một cách rất hiệu quả để bảo đảm mã bị lỗi mà việc ghi ngẫu nhiên vào cơ chế bảo vệ không gây ra tiếng tích tắc WDT và WWDT có thể tạo ra một ngắt ngay trước khi xác nhận lại.

ok, hãy xem hướng dẫn tham khảo :

STM32F10xxx có hai thiết bị ngoại vi theo dõi nhúng, cung cấp sự kết hợp giữa mức độ an toàn cao, độ chính xác về thời gian và tính linh hoạt của việc sử dụng. Cả hai thiết bị ngoại vi watchdog (Độc lập và Cửa sổ) phục vụ để phát hiện và giải quyết các sự cố do lỗi phần mềm và để kích hoạt thiết lập lại hệ thống hoặc ngắt (chỉ theo dõi cửa sổ) khi bộ đếm đạt đến giá trị hết thời gian nhất định. Đồng hồ độc lập (IWDG) được đồng hồ bằng đồng hồ tốc độ thấp chuyên dụng (LSI) của riêng nó và do đó vẫn hoạt động ngay cả khi đồng hồ chính bị hỏng. Đồng hồ theo dõi cửa sổ (WWDG) được đặt trước từ đồng hồ APB1 và ​​có cửa sổ thời gian có thể định cấu hình có thể được lập trình để phát hiện hành vi ứng dụng trễ hoặc sớm bất thường. IWDG phù hợp nhất với các ứng dụng yêu cầu cơ quan giám sát chạy như một quy trình hoàn toàn độc lập bên ngoài ứng dụng chính, nhưng có ràng buộc độ chính xác thời gian thấp hơn. WWDG phù hợp nhất với các ứng dụng đòi hỏi cơ quan giám sát phải phản ứng trong một cửa sổ thời gian chính xác.

Bộ theo dõi cửa sổ được sử dụng để phát hiện sự cố xảy ra lỗi phần mềm, thường được tạo ra bởi sự can thiệp từ bên ngoài hoặc bởi các điều kiện logic không lường trước được, khiến chương trình ứng dụng từ bỏ trình tự thông thường. Mạch watchdog tạo ra thiết lập lại MCU khi hết thời gian được lập trình, trừ khi chương trình làm mới nội dung của bộ đếm xuống trước khi bit T6 bị xóa. Thiết lập lại MCU cũng được tạo nếu giá trị bộ đếm xuống 7 bit (trong thanh ghi điều khiển) được làm mới trước khi bộ đếm xuống đạt đến giá trị thanh ghi cửa sổ. Điều này ngụ ý rằng bộ đếm phải được làm mới trong một cửa sổ giới hạn.

Như bạn có thể thấy, không ai trong số họ nói rằng Tại sao có hai cơ quan giám sát. Nếu tôi hỏi rằng sự khác biệt giữa cả hai cơ quan giám sát là gì, bạn sẽ tính tất cả các tính năng mà bạn có thể thấy ở trên và nếu bạn muốn so sánh cả hai, rõ ràng cơ quan giám sát Window (WWDG) sẽ là người chiến thắng! Vậy thì tại sao lại có hai con chó canh gác?

Tôi muốn biết rằng khi nào tôi nên sử dụng IWDG và khi WWDG?

và có lý do nào nói với chúng tôi Tại sao họ gọi chiếc đồng hồ thứ hai bằng tên này -> "Cửa sổ theo dõi"?

Câu trả lời:


23

Đồng hồ bấm giờ thông thường phải được đặt lại tại một thời điểm trước khi hết thời gian. Nếu bạn có WDT 100ms, bạn có thể đặt lại sau mỗi 99,9ms hoặc cứ sau 10 giây và nó sẽ không bao giờ hết thời gian.

Bộ đếm thời gian theo dõi cửa sổ có một cửa sổ thời gian trong đó chúng phải được đặt lại. Nếu bạn đặt lại quá sớm hoặc quá muộn (từ lần đặt lại trước), nó sẽ khiến bộ xử lý đặt lại.

Mục đích, nếu không rõ ràng, là để giúp đảm bảo rằng mã đặt lại WDT là mã dự định, hoạt động theo kiểu dự định. Một số loại điều kiện không lường trước được tạo ra đặt lại WDT tần số cao sẽ không ngăn hệ thống được thiết lập lại.

Chạy WDT từ đồng hồ hệ thống có thể là một vấn đề - nếu đồng hồ bị lỗi và nếu không có mạch giám sát đồng hồ độc lập, điều tồi tệ có thể xảy ra. Đồng hồ độc lập cho WDT có nghĩa là nếu một số lý do bắt đầu chạy ở tốc độ 1/10, WDT sẽ đặt lại (nhưng cửa sổ WDT sẽ không).

Sử dụng cả hai nếu bạn có thể.

Như trang nói, việc đặt lại WDT bằng ISR thường là juju xấu (nhưng có thể được chấp nhận nếu ISR xác minh thiết lập lại phần sụn đang hoạt động trước khi đặt lại bộ hẹn giờ).


Thực sự có thể là đồng hồ hệ thống bị lỗi? Nếu nó xảy ra, thì chúng ta có thể hiểu nó. Vì vậy, WDT không hữu ích, phải không? Vậy thì tại sao nó lại là một mối lo?
Roh

1
Nếu đồng hồ WDT độc lập buộc MCU ở trạng thái thiết lập lại (và trạng thái đó là an toàn) thì có thể ngăn chặn thảm họa. Một tinh thể MCU ngắn đã gây ra một tai nạn nghiêm trọng trong những ngày đầu (BART, IIRC).
Spehro Pefhany

1
@Roh: Tôi thực sự đã thấy đồng hồ hệ thống không quay trở lại sau khi vào chế độ ngủ trên chính bộ xử lý này (vâng, STM32 F0, là M0). Hóa ra khi bạn làm một số việc vào một số thời điểm nhất định, đồng hồ PLL có thể không khởi động được và toàn bộ hoạt động ở tốc độ 1/6.
Nathon

@Nathon Cảm ơn. hấp dẫn. Tôi hoàn toàn ghét loạt M0. Âm thanh như mỗi loạt STM có một vấn đề.
Roh

7

Văn bản bạn dán vào câu hỏi đưa ra câu trả lời bạn cần.

  1. Bạn sử dụng IWDG khi bạn cần một bộ đồng hồ đơn giản hoặc khi bạn cần một bộ giám sát hoàn toàn độc lập - IWDG có đồng hồ riêng, WWDG lấy đồng hồ từ một trong những đồng hồ xe buýt - nếu nó bị lỗi hoặc phần mềm của bạn tắt thì đồng hồ sẽ chết.
  2. Bạn sử dụng WWDG khi bạn cần một bộ giám sát chỉ có thể được đặt lại trong một khoảng thời gian nhất định (cửa sổ.) Nếu phần mềm của bạn đặt lại WWDG quá muộn, thì WWDG sẽ ngắt thiết lập lại bộ xử lý. Nếu phần mềm của bạn đặt lại WWDG quá SỚM thì nó cũng sẽ gây ra việc thiết lập lại bộ xử lý.

Nó được gọi là "cửa sổ theo dõi" vì lý do đơn giản là chỉ thiết lập lại cơ quan giám sát trong một khoảng thời gian xác định (cửa sổ cơ hội) sẽ ngăn cơ quan giám sát đặt lại bộ xử lý của bạn.

Cả hai đều làm những công việc tương tự nhau, nhưng họ làm chúng khác nhau. Mà bạn cần phụ thuộc vào các yêu cầu bạn phải đáp ứng.


xin vui lòng đọc bình luận của tôi cho Spehro Pefhany.
Roh

1
Đồng hồ bấm giờ mà WWDG sử dụng có thể lập trình được - bạn có thể thay đổi tốc độ của nó thông qua phần mềm của mình. Nếu phần mềm của bạn vượt khỏi tầm kiểm soát và thay đổi tốc độ APB1, thì cửa sổ thời gian sẽ sai và cơ quan giám sát sẽ thiết lập lại bộ xử lý của bạn liên tục - kicker watchdog của bạn sẽ không bao giờ (hoặc chỉ bởi sự trùng hợp) đá vào cơ quan giám sát đúng lúc. Chương trình của bạn cũng có thể vô hiệu hóa hoàn toàn đồng hồ APB1 hoặc bộ hẹn giờ WWDG, trong trường hợp đó, nó sẽ không bao giờ thiết lập lại bộ xử lý của bạn.
JRE

5

Có một lý do khác để sử dụng bộ giám sát cửa sổ, thay vào đó hoặc ngoài bộ giám sát độc lập. WWDG có một ngắt bạn có thể hook. Điều này có nghĩa là, nếu mã đã vào vòng lặp hoặc fugue, bạn có thể đặt điểm dừng trong WWDG ISR và làm việc ngược lại để tìm hiểu phần sụn đang làm gì khi con chó sủa.

Bạn không thể làm điều này với IWDG. Như tên cho thấy, đó là độc lập với bộ xử lý. Thay vì đưa ra một ngắt, nó chỉ đơn giản là xác nhận và xác nhận lại / RESET - điều này không cung cấp cho bạn nhiều manh mối về lý do tại sao nó sủa. Tôi thực sự khuyên bạn nên đặt WWDG trong các thông số vận hành bình thường của bạn, cộng với IWDG ở khoảng thời gian dài hơn nhiều, có thể là tối đa 2 * WWDG. Tạo một chức năng kick-dog đá cả hai. Bằng cách này, IWDG chỉ sủa khi WWDG cũng bị khóa, như là một bản sao lưu cuối cùng.


1

Tôi đảm nhận nó:

Sử dụng cả hai cùng một lúc, vì chúng tìm kiếm các điều kiện thất bại khác nhau:

Đồng hồ bấm giờ độc lập (IWDG) cần được thiết lập lại liên tục trước khi hết giờ. Trong thực tế, bạn chỉ có thể thêm mã đặt lại ở mọi nơi bạn có trạng thái chương trình hợp lệ hoặc một lần trong vòng lặp chính nếu bạn có một vòng lặp chính được cho là thực thi thường xuyên mà không có bất kỳ sự chậm trễ lớn nào. Bằng cách này, nếu cuộc gọi của bạn để đặt lại bộ hẹn giờ (đôi khi được gọi là "vuốt ve", "cù lét hoặc đơn giản là" đặt lại "" con chó canh gác ") không xảy ra kịp thời, điều đó có nghĩa là mã của bạn A) vô tình bị kẹt ở đâu đó bạn không thấy trước --- một số loại trạng thái vòng lặp vô hạn không lường trước được, hoặc B) cố tình bị mắc kẹt ở một nơi nào đó mà bạn thi hành thông qua mộtassert()gọi hàm với một vòng lặp vô hạn được nhúng mà bạn muốn mã đi đến bất cứ khi nào một số điều kiện quan trọng không đúng. Vì vậy, bây giờ khi điều kiện khẳng định của bạn là sai, mã của bạn cố tình bị kẹt trong một vòng lặp vô hạn và cơ quan giám sát đặt lại bộ vi điều khiển để đưa nó trở về trạng thái hợp lệ. Cũng lưu ý rằng "cơ quan giám sát độc lập (IWDG) được đồng hồ bằng đồng hồ tốc độ thấp chuyên dụng (LSI) của riêng nó và do đó vẫn hoạt động ngay cả khi đồng hồ chính bị hỏng" (xem Hướng dẫn tham khảo ST RM0008 p493 ).

Tuy nhiên, đối với tôi, bộ đếm thời gian của Window Watchdog (WWDG) được thiết kế để không tìm thấy các trường hợp được mô tả ở trên (trong đó mã của bạn vô tình hoặc cố ý [thông qua một xác nhận] bị "kẹt" ở đâu đó), nhưng cụ thể hơn là trong trường hợp A) mã của bạn KHÔNG thực thi cái gì đó nên . Nói cách khác, nó có lỗi khiến vòng lặp chính của nó hoặc phần phụ mã khác thực thi quá nhanh (hoặc bị bỏ qua hoàn toàn), vì vậy bạn đặt lại bộ giám sát quá sớm, bên ngoài cửa sổ của nó và mcu được đặt lại. Hoặc, B)điều kiện khác nó có thể phát hiện là thiết lập bộ đếm thời gian không thành công. Có lẽ bạn đang đặt lại nó ở một khoảng thời gian cố định, nhưng bộ đếm thời gian của bạn được sử dụng để tạo khoảng thời gian này có thể vô tình thay đổi cấu hình của nó ở một nơi nào đó không nên hoặc bạn cấu hình sai ở vị trí đầu tiên, sau đó khoảng thời gian sẽ bị tắt, cố định của bạn thiết lập lại khoảng thời gian sẽ đặt lại WWDG bên ngoài cửa sổ của nó (quá sớm hoặc quá muộn) và mcu được đặt lại để thông báo cho bạn và / hoặc khắc phục tình trạng này.

Đây là quan điểm của tôi về nó. Suy nghĩ hoặc phản hồi đều được chào đón.


0

Cơ quan giám sát "cửa sổ" chỉ là một cơ quan giám sát thông thường bảo vệ một số cách thực hành lập trình thậm chí còn tồi tệ hơn. Giống như những người khác đã nói, bạn có "khung thời gian" thường được điều chỉnh trong đó "nguồn cấp dữ liệu" của bạn sẽ được cung cấp.

Không ai trong số họ là bằng chứng đạn nếu mã của bạn có thể nhập vào một vòng lặp tự động duy trì. Ví dụ. Nếu bạn dự định "cung cấp" dựa trên các IRQ liên quan đến bộ đếm thời gian, điều này có thể là một thực tế cực kỳ tồi tệ vì mã của bạn có thể bị kẹt trong một số do / while trong chuỗi thư, trong khi các ngắt vẫn có thể cung cấp WWDT của bạn theo đúng trình tự.

Trên thực tế, bạn có thể sử dụng các ngắt để cung cấp WWDT nếu bạn có thể hạ mức ưu tiên IRQ của mình theothực thi thông thường như bạn có thể làm trên MIPS (Microchip).

Nếu mã của bạn là hỗ trợ cuộc sống, quan trọng, v.v., chỉ cần bỏ tất cả chúng và sử dụng WDT bên ngoài (ưu tiên dựa trên Q & A).

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.