Có thể tạo giao diện JTAG với arduino không?


14

Nếu vậy, một người có thể hướng tôi đến một trang web cho biết làm thế nào để làm điều này? Tôi tin rằng tôi có thể đã tìm ra một cách , nhưng tôi không chắc liệu nó có hoạt động hay không (cần phải tìm một cái gì đó để kiểm tra nó).

Câu hỏi này liên quan đến một câu hỏi trước đây của tôi nằm ở đây.

Trong trường hợp cần thêm thông tin cơ bản.


JBailey Tôi vừa bắt gặp Câu hỏi của bạn về việc sử dụng arduino để tạo bộ chuyển đổi JTAG-USB và tôi đã tự hỏi làm thế nào bạn tìm ra? \

Câu trả lời:


14

Có, có thể biến Arduino thành bộ chuyển đổi ARM JTAG.

Có ba vấn đề, điện áp, tốc độ và trình điều khiển.

Arduino thực sự chạy ở 5V. Hầu hết các bộ vi điều khiển ARM không chịu được 5V trên các chân JTAG của chúng và cần 3,3V. Giải pháp đơn giản nhất là chạy Arduino của bạn ở mức 3,3V, không thành công rằng bạn sẽ cần một số loại chuyển đổi cấp độ (xem chuyển đổi I2C 3.3 sang 5.0 V để biết ý tưởng).

Arduino được kết nối với PC thông qua một liên kết nối tiếp. Tôi nghi ngờ nó có khả năng có thể đi nhanh hơn 115200bps, điều này sẽ khiến các hoạt động tương tác như bước qua mã trong trình gỡ lỗi rất chậm. Nhưng, bạn sẽ có thể tải lên mã và thiết bị phản xạ.

JTAG là một giao thức cấp cao, dành riêng cho từng họ bộ xử lý, sử dụng giao diện giống SPI để trao đổi dữ liệu. Hầu hết các khóa JTAG chỉ cung cấp giao diện SPI qua USB sau đó để phần còn lại của công việc cho ứng dụng PC. OpenOCD và URJTag là những lựa chọn phổ biến. Bạn sẽ cần một trình điều khiển trong một trong số này cho giao thức Arduino JTAG của bạn.

Bus Pirate rất giống với Arduino (vi điều khiển tốc độ thấp + chip FTDI). Nó hỗ trợ JTAG với OpenOCD, vì vậy chắc chắn là có thể.

Nếu bạn sử dụng bảng Teensy / Opendous hoặc bảng AVR-USB khác, bạn có thể sử dụng eStick-JTAG .

Nhưng, đối với JTAG chi phí bị mất, tôi muốn giới thiệu một trong các khóa dựa trên FTDI2232. Chúng rẻ và được hỗ trợ tốt bởi OpenOCD.


5

Điều đó có thể nhưng rất khó khăn. Tôi không thích các JTAG dựa trên FTDI, vì các chip FTDI đã sẵn sàng làm hộp đen và người ta không thực sự học bằng cách sử dụng chúng.

Nếu tôi muốn xây dựng USB-JTAG với AVR, tôi sẽ nhận được một cái có ít nhất hỗ trợ tốc độ tối đa usb trong chip. Sau đó lấy ngăn xếp USB AVR (mã nguồn c) và xem xét một ví dụ nối tiếp usb. Vì bitbanging trên usb là một ý tưởng tồi (độ trễ cao), nên nó cần được chuyển đổi thành các lệnh cấp cao hơn sẽ hướng dẫn MCU tự thực hiện bitbanging (hoặc sử dụng SPI nếu có thể) và trả về kết quả cấp cao qua usb (hoàn thành byte ). Nhưng sau đó xuất hiện nhu cầu viết trình điều khiển cho IDE để hỗ trợ thiết bị JTAG mới để gỡ lỗi. OpenOCD và URJTag có mã nguồn trình điều khiển cho nhiều thiết bị jtag, vì vậy bạn sẽ cần lấy và làm lại một cho thiết bị mới được phát minh của mình. Xem cách một số người đã thực hiện công việc tương tự: http://code.google.com.vn/p/estick-jtag/


1

Nhìn vào openocd. Các phụ trợ chủ yếu dựa trên cách tiếp cận cổng bit song song, tôi nghĩ rằng nó chỉ đi xa đến mức chỉ thay đổi một bit mỗi lần. Nó khá đơn giản để lấy những gì tôi nghĩ họ gọi là phụ trợ giả là một ví dụ. Gửi bất cứ lệnh ghi bit nào tới arduino và đặt nó hoặc xóa bit đó. Khi được yêu cầu đọc bit đầu vào sau đó gửi lệnh đến arduino để thực hiện nhiệm vụ đó và trả về kết quả.

Tôi đã thực hiện chính xác điều này với thành công, nhưng không phải với một arduino, tôi đã nói chuyện openocd từ một máy chủ thành một lõi cánh tay mô phỏng chạy trong một trình giả lập hdl.

Lưu ý rằng một số thông số kỹ thuật của jtag đã bị đóng, ví dụ cortex-m3 là một số loại jtag giảm được nối tiếp mà lần trước tôi nhìn thấy không có sẵn nếu không có NDA. điều đó có thể không quan trọng bởi vì openocd sẽ chăm sóc tất cả những thứ đó cho bạn miễn là bạn đang sử dụng giao diện jtag mà openocd hỗ trợ, bit backed back là nơi arduino của bạn và bất kỳ giao diện nào bạn sử dụng để đến / từ đó đến để chơi .

Như đã lưu ý bởi Joby, bạn cần cẩn thận với điện áp (không phải tất cả các hương vị arduino là 5V và không phải tất cả các bộ điều khiển cánh tay là 3,3 volt) và điều hòa tín hiệu và nối đất và tất cả những thứ đó. Nếu bảng mục tiêu của bạn được cung cấp bởi một nguồn cung cấp ở một mức độ khác so với những gì bạn cung cấp năng lượng cho arduino của bạn với bạn, bạn có thể làm tan chảy thứ gì đó khi bạn kết nối cả hai.


Lưu ý rằng việc sử dụng giao diện nối tiếp (hoặc tệ hơn, USB với giao diện được đóng gói) để đập bit proxy có thể cực kỳ chậm. Sẽ hiệu quả hơn nhiều khi vi điều khiển thực hiện các hoạt động hoàn chỉnh và giao tiếp với nó ở mức cao hơn, tức là bảo nó đọc thanh ghi này, viết cái đó hoặc thậm chí lập trình khối dữ liệu này.
Chris Stratton

1

Có thể, và tôi thực sự đã thực hiện nó và giải thích tất cả ở đây .

Có một thư viện trên github ở đây bao gồm hai phần: chương trình chạy trên arduino và tập lệnh python gửi các tệp XSVF đến arduino.

Rất có thể bạn sẽ cần một vài điện trở để chuyển đổi 5 V thành 3,3 V, vì hầu hết các GPU và CPLD đều sử dụng mức điện áp này.

Tôi cũng đã thực hiện một số kinh nghiệm khi viết trình biên dịch / trình dịch ngược cho các tệp XSVF, mã nằm trong cùng thư viện github và được giải thích trong bài đăng này tại đây .

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.