ARM sử dụng JTAG hoặc SWD và các lõi ARM vi điều khiển phổ biến nhất là dòng Cortex, hầu như được lập trình và gỡ lỗi trên SWD.
Cả JTAG và SWD đều được xác định rõ và hầu hết các nhà cung cấp mô tả cách nhập và thao tác Cổng truy cập gỡ lỗi (DAP), đó là cách bạn thường truy cập vào các bus nội bộ, CPU, bộ nhớ và thiết bị ngoại vi. Giao diện vật lý giữa PC bạn đang sử dụng để phát triển / gỡ lỗi và cổng JTAG / SWD của micro là bộ điều hợp.
Mặc dù đúng là bạn có thể sử dụng thực tế mọi thứ để kết nối với cổng và thao tác với giao diện SWD, hầu hết các nhà cung cấp sẽ có "hương vị" của bộ chuyển đổi riêng. Sử dụng công cụ được đề xuất của nhà cung cấp thường là con đường ít kháng cự nhất, vì nhà cung cấp sẽ hỗ trợ bộ điều hợp của họ, phần mềm được đề xuất của họ sẽ hoạt động với bộ điều hợp của họ và mọi thứ phải được ghi lại một cách hợp lý, giúp mọi thứ trơn tru nhất có thể.
Điều đó đang được nói, kinh nghiệm của tôi với các công cụ của nhà cung cấp là chúng là những công cụ không đạt tiêu chuẩn, nhanh và bẩn. Tôi thường gặp rắc rối với OpenOCD và các công cụ của nhà cung cấp (chủ yếu là ST-Link, Olimex, OpenSDA, v.v.), đặc biệt là với gỡ lỗi. Để tôi nói cho bạn biết: không có gìbực bội hơn là cuối cùng việc một hệ thống nhúng xuất hiện lỗi trong môi trường gỡ lỗi và một cái gì đó giữa phần mềm / ide của trình gỡ lỗi (gdb, nhật thực, v.v.), OpenOCD, trình điều khiển của nhà cung cấp và bộ điều hợp nhà cung cấp không đồng bộ hóa, làm rơi gỡ lỗi kết nối và yêu cầu khởi động lại phần cứng để thử lại. Sự bất ổn môi trường bực bội này mở ra cơ hội cho các nhà cung cấp như Segger, người tự sản xuất bộ điều hợp JTAG / SWD của họ, cung cấp hỗ trợ tuyệt vời và công cụ của họ làm việc với nhiều nhà cung cấp khác nhau. Có một điều cần nói cho một giao diện hợp nhất duy nhất để sử dụng với thực tế tất cả các thiết bị bạn làm việc cùng.
Tôi đã dành rất nhiều thời gian để tránh J-Link vì giá cả và vì tôi thích sử dụng phần mềm mở và các công cụ của nhà cung cấp. Tôi đã bắt đầu sử dụng bộ điều hợp J-Link vài năm trước trong một dự án đã có chúng và không nhìn lại. Các công cụ của họ là tất cả đa nền tảng và trình gỡ lỗi độc lập của họ, Ozone, thật tuyệt vời. Tôi hiếm khi gặp vấn đề "không ổn định gỡ lỗi" với OpenOCD và J-Link và chưa bao giờ có vấn đề với Ozone.
Segger cũng đã thực hiện một bước khá hay là cung cấp "nâng cấp" miễn phí cho bất kỳ trình gỡ lỗi trên tàu nào trên bộ công cụ dev để biến trình gỡ lỗi dành riêng cho nhà cung cấp thành J-Link được cấp phép. Điều này là tất nhiên để giúp bạn thử và sử dụng các công cụ của họ để bạn sẽ mua chúng để sử dụng trên bảng của riêng bạn, nhưng đó là một chiến thuật tuyệt vời. Thông tin thêm ở đây cho ST-Link, hãy theo liên kết "Mô hình -> Liên kết J khác" của họ cho các nhà cung cấp khác. Họ cũng có giảm giá giáo dục và phần cứng "lite" J-Link có giá rất hợp lý (tôi nghĩ là 50 USD?) Và bị giới hạn trong các lõi của bộ xử lý Cortex.
Bây giờ Segger không phải là bộ điều hợp bên thứ ba duy nhất ngoài đó: trình gỡ lỗi nguồn mở cụ thể nhắm mục tiêu gdb có sẵn. Đó là Black Magic Thăm dò. Họ bán phần cứng nhưng cũng có sơ đồ, bố cục và phần mềm đầy đủ được phát hành theo GPL. Tôi chưa có cơ hội sử dụng chúng nhưng tôi rất hào hứng dùng thử trình gỡ lỗi này. Việc thực hiện giao thức GDB trên trình gỡ lỗi sẽ cải thiện sự ổn định đáng kể. Tất nhiên cũng có các hệ thống cao cấp khác như Lauterbach và bộ điều hợp Abatron BDI2000 và BDI3000 (hiện không còn tồn tại). Công cụ fancier / đắt tiền hơn thường được nối mạng thay vì được kết nối trực tiếp với PC gỡ lỗi, cung cấp các giao diện JTAG nhanh hơn và thường có các cổng theo dõi riêng biệt, với MCU tương thích, cung cấp cho bạn nhật ký chi tiết của mỗi lệnh được thực thi, thời gian nó được thực thi và trạng thái bộ xử lý bên trong sau mỗi lệnh.
Bạn luôn có thể thực hiện của riêng bạn là tốt. Tôi đã nhúng các giao diện SWD của riêng mình vào PSoC5LP của Cypress để giải quyết một vấn đề cụ thể cho phép tôi lập trình toàn bộ chuỗi thiết bị thông qua một kết nối USB để sản xuất. Bạn cũng có thể sử dụng cổng song song hoặc cặp đường GPIO để vẫy tín hiệu. Tất cả phụ thuộc vào những gì bạn đang theo đuổi.
J-Tagg
?