CHƢƠNG 3 : THỰC NGHIỆM
3.1 Một số công cụ đƣợc dùng trong kiểmthử phần mềm nhúng
3.1.1 Giới thiệu về trình biên dịch CodeWarrior
CodeWarrior là một công cụ phát triển phần mềm nhúng cho các dòng vi xử lý của FreeScale. Có nhiều phiên bản CodeWarrior vàởđâytôi dùng phiên bản 10.6. Có thể tải phiên bản này trên trang web của freescale[10].
Hình 3. 1: Giao diện CodeWarrior Các thành phần cơ bản của CodeWarrior: Các thành phần cơ bản của CodeWarrior:
Trình dịch (Compiler): Dùng để biên dịch mã nguồn (source code) sang mã đối tượng (object code).
Trình liên kết (Linker): Liên kết mã đối tượng được dịch ra từ trình dịch với các mã đối tượng trong thư viện và những tập tin khác.
Debugger: Được dùng để thực thi và chỉ rõ các hoạt động bên trong chương trình. Sử dụng debugger để phát hiện lỗi trong khi thực thi chương trình.
Editor: Dùng để soạn thảo và quản lý mã nguồn.
Hình 3. 2: Giao diện Debugger cho CodeWarrior
3.1.2 Giới thiệu về công cụ JTAG (Joint Test Action Group)
JTAG (Joint Test Action Group) là một phương pháp tích hợp để kiểm tra các kết nối trên PCB (printed circuit boards) dựa theo chuẩn IEEE 1149.1. Nhưng công cụ này cũng được dùng để kết nối với các chíp và gỡ lỗi (debug) phần mềm. [8,11]
JTAG được một nhóm kỹ sư Harry Wardrop đề xuất vào năm 1985. Sự ra đời của công cụ này xuất phát từ tính phức tạp về phần cứng trong các hệ thống ngày càng cao. Do vậy việc tích hợp JTAG vào các chip giúp cho việc kiểm thử, giải quyết các khó khăn về các lỗi thuận lợi, nhanh chóng hơn. Ngày nay các chíp hiệnđại hầu như đều có tích hợp JTAG bên trong ví dụ dòngARM, Coldfire,… Việc tích hợp JTAG vào chíp làm tăng chi phí nhưng nó lại rất hữu ích cho việc kiểm tra khi mà số lượng sản phẩm có giá trị từ hàng ngàn trở lên.
JTAG bao gồm các thành phần sau:[8]
TDI (Test Data In): Đường dữ liệu vào TDO (Test Data Out): Đường dữ liệu ra
TCK (Test Clock): Tín hiệu đồng bộ hóa tần số.
TRST (Test Reset) : Tuỳ chọn có thể có hoặc không dùngđể thực hiện khởiđộng lại JTAG và toàn hệ thống
Hình 3. 3: Sơ đồ kiến trúc JTAG
Ứng dụng điển hình của JTAG là để kiểm tra kết nối giữa các thiết bị (Interconnection testing between devices), kiểm tra logic core (Core logic testing), kiểm tra bộ nhớ (Memory testing), kiểm tra mức hệ thống (System level test).
Ứng dụng thực tế của JTAG là để truy cập vào các chíp, các mạch, các hệ thốngđể: Kiểm tra thiết kế/gỡ lỗi (Design verification/debug), Kiểm tra sản xuất (Manufacturing test), Kiểm tra tích hợp phần cứng/ phần mềm (Hardware/software integration), lập trình hệ thống (in-system programming).
3.1.3 Giới thiệu về chuẩn SWD (Serial Wire Debug)
SWD là cổng debug sử dụng 2 đường tín hiệu để truy cập vào giao diện debug ARM. Nó là một chuẩn debug của dòng ARM đang dần được thay thế cho JTAG. SWD gồm hai tín hiệu [9]:
SWDIO (Serial Wire Data Input/Output): Dòng dữ liệu hai chiều được điều khiển bởi cả máy chủ (host) và thiết bị (target).
SWCLK (Serial Wire Clock): Tín hiệu clock được điều khiển bởi máy chủ, đồng bộ hóa việc chuyển giao dữ liệu qua SWD.
Ngoài việc gỡ lỗi SWD có thể được sử dụng cho lập trình flash. Thông thường một thuật toán lập trình flash với các lệnh hỗ trợ “flash command” sẽ được nạp vào vi
điều khiển của chíp trên RAM qua cổng SWD, sau đó SWD sẽ được sử dụng để kiểm soát hoạt động ghi xóa xuống flash.
SWDvàJTAGlàhai giao diệnvật lý khác nhau, nhưng các lệnh và các thanh ghi truy cập được sử dụngcho lập trìnhflashđều giống nhau. Đối với dòng ARM Kinetis K được tích hợp cả hai chuẩn debug SWD và JTAG nhưng dòn Kinestis L chỉ tích hợp chuẩn SWD.[6]
3.2Tổng quan về mạch MKL46Z256 và phần mềm điều khiển chuẩn (Standard Software Driver - SSD)