Điều này đòihỏi các hệ thống nhúng phải có cấu trúc mạnh mẽ, đáp ứng thời gian thực, bộ nhớ lớn,tiêu thụ ít năng lượng, ổn định và tích hợp nhiều thiết bị ngoại vi.. Hệ thống nhúng Hệ th
Trang 1MỤC LỤC
DANH MỤC HÌNH VẼ 3
LỜI MỞ ĐẦU 5
CHƯƠNG 1: TỔNG QUAN VỀ HỆ THỐNG NHÚNG VÀ QUY TRÌNH PHÁT TRIỂN HỆ THỐNG NHÚNG 7
1.1 Tổng quan về hệ thống nhúng 7
1.1.1 Một số khái niệm 7
1.1.2 Một số ứng dụng 8
1.2 Quy trình phát triển hệ thống nhúng 8
1.2.1 Các mô hình phát triển hệ nhúng 8
1.2.2 Các giai đoạn phát triển hệ thống nhúng 12
1.2.2.1 Xác định yêu cầu sản phẩm 12
1.2.2.2 Lựa chọn chip 13
1.2.2.3 Phân chia giữa phần cứng và phần mềm 14
1.2.2.4 Giai đoạn phát triển 15
1.2.2.5 Tích hợp phần cứng phần mềm 15
1.2.2.6 Kiểm thử mức hệ thống nhúng 17
CHƯƠNG 2: KIẾN TRÚC ARM VÀ VI ĐIỀU KHIỂN LÕI ARM 18
2.1 Tổng quan về vi xử lý ARM và vi điều khiển lõi ARM 18
2.2 Kiến trúc ARM Cortex M3 20
2.2.1 Giới thiệu ARM Cortex-M3 20
2.2.2 Kiến trúc ARM cortex M3 21
2.2.3 Mô hình giao tiếp ARM 23
2.2.4 Một số giao tiếp ARM 24
2.2.5 Tập thanh ghi 26
2.3 Vi điều khiển STM32 29
CHƯƠNG 3: LẬP TRÌNH MÔ PHỎNG HỆ THỐNG NHÚNG 31
3.1 Thiết kế mạch với Proteus 31
3.1.1 Lấy linh kiện 31
3.1.2 Thiết kế mạch 32
3.2 Lập trình nhúng trên Keil C 34
3.2.1 Môi trường phát triển 34
3.2.2 Lập trình ứng dụng trên Keil C 38
3.2.2.1 Nguồn Clock trong STM32 38
3.2.2.2 Tạo thư viện Delay sử dụng SYSTICK trong STM32 39
3.2.2.3 Lập trình GPIO điều khiển led đơn 41
Trang 23.2.2.4 Lập trình hiển thị LCD 43
3.2.2.5 Lập trình điều khiển USART 45
3.2.3 Nạp code cho vi điều khiển 46
CHƯƠNG 4: THỰC NGHIỆM 49
4.1 Thực nghiệm 1 – Hiển thị LCD 49
4.2 Thực nghiệm 2 – Giao tiếp nút nhấn điều khiển led 51
4.3 Thực nghiệm 3 – Giao tiếp UART, LCD 53
KẾT LUẬN 55
TÀI LIỆU THAM KHẢO 57
Trang 3DANH MỤC HÌNH VẼ
Hình 1.1: Quan hệ giữa hệ nhúng và thời gian thực 8
Hình 1.2: Quy trình phát triển hệ thống nhúng theo phương pháp truyền thống 9
Hình 1.3: Quy trình phát triển hệ thống nhúng theo phương pháp đồng thiết kế 10
Hình 1.4: Quy trình thiết kế và xây dựng phần cứng 11
Hình 1.5: Các mức trừu tượng của platform phần cứng 12
Hình 1.6: Mô tả platform phần mềm 12
Hình 1.7: Minh họa vấn đề big endian/little endian 16
Hình 2.1 Quá trình phát triển và các dòng vi xử lý dựa trên ARM7 19
Hình 2.2 Các thành phần chính của ARM Cortex – M3 22
Hình 2.3 Mô hình giao tiếp ARM 23
Hình 2.4 Bản đồ bộ nhớ 24
Hình 2.5 Bộ điều khiển ngắt FIQ và IRQ 25
Hình 2.6 Kiến trúc load và store của vi xử lý ARM Cortex-M3 26
Hình 2.7 Tập thanh ghi của vi xử lý ARM Cortex-M3 27
Hình 2.8 Thanh ghi trạng thái chương trình của vi xử lý Cortex-M3 27
Hình 2.9 Kiến trúc của STM32 nhánh Performance và Access 30
Hình 3.1 Công cụ thiết kế mạch nguyên lý – Proteus 31
Hình 3.2 Lấy linh kiện 32
Hình 3.3 Khung tìm kiếm, lựa chọn thiết bị 32
Hình 3.4 Môi trường thiết kế mạch nguyên lý 33
Hình 3.5 Sơ đồ nguyên lý mạch điều khiển đèn led 34
Hình 3.6 Lựa chọn vi xử lý 35
Hình 3.7 Thiết lập cấu trúc project 36
Hình 3.8 Cấu trúc file và package trong project ARM 37
Hình 3.9 Thiết lập đường dấn thư viện 38
Hình 3.10a Thiết lập cấu hình debug 47
Hình 3.10b Thiết lập cấu hình thiết bị 48
Trang 4Hình 3.10c Load mã hexa 48
Hình 4.1a Sơ đồ mạch 50
Hình 4.1b Định nghĩa lại các chân LCD kết nối ARM 50
Hình 4.1c Hiển thị dữ liệu lên LCD 51
Hình 4.2 Sơ đồ mạch đèn led và nút bấm 51
Hình 4.2a Định nghĩa các chân vào ra GPIO 52
Hình 4.2a Chương trình giao tiếp nút nhấn điều khiển led 53
Hình 4.2b Mạch thực nghiệm 53
Hình 4.3 Mô phỏng truyền nhận uart 54
Trang 5LỜI MỞ ĐẦU
Hệ thống nhúng hiện nay đang phát triển mạnh mẽ trong lĩnh vực điện tử và côngnghệ thông tin, với những ứng dụng rộng rãi trong công nghiệp và đời sống Điều này đòihỏi các hệ thống nhúng phải có cấu trúc mạnh mẽ, đáp ứng thời gian thực, bộ nhớ lớn,tiêu thụ ít năng lượng, ổn định và tích hợp nhiều thiết bị ngoại vi
Vi điều khiển ARM được đánh giá là một trong những dòng vi điều khiển mạnh, đápứng được những yêu cầu trong hệ thống nhúng ngày nay, được sử dụng rộng rãi ở trên thếgiới và đang được nghiên cứu phát triển ở Việt Nam Trong đề tài này, chúng tôi tập trungnghiên cứu mô hình, kiến trúc ARM Cortex M3, quy trình phát triển hệ thống nhúng Cáccông cụ, môi trường thiết kế, mô phỏng mạch cũng như môi trường phát triển phần mềmnhúng được sử dụng để xây dựng các chương trình mô phỏng
Đề tài “Nghiên cứu thử nghiệm kỹ thuật xây dựng hệ thống nhúng dựa trên vi điềukhiển lõi ARM” là bước đầu tiếp cận của nhóm Qua đây chúng tôi đã tìm hiểu đượcnhiều kiến thức quý báu về vi điều khiển ARM, lập trình nhúng trên ARM và đồng thờicũng là điều kiện rất tốt để chúng tôi chuẩn bị những kiến thức, tài liệu quan trọng phục
vụ cho đào tạo đầu ra chuyên ngành “Kỹ thuật phần mềm nhúng và di động”
Trong báo cáo này, chúng tôi trình bày những nội dung đã nghiên cứu và các kết quảđạt được của nhóm đề tài trong 04 chương:
Chương 1: Tổng quan về hệ thống nhúng và quy trình phát triển hệ thống nhúng Trong chương này, chúng tôi trình bày các khái niệm cơ bản, các ứng dụng của hệ
thống nhúng và đặc biệt là đề xuất quy trình phát triển hệ thống nhúng
Chương 2: Kiến trúc ARM Chương này chỉ ra kiến trúc của ARM nói chung cũng
như kiến trúc, các thành phần của ARM Cortex M3 Bên cạnh đó, các đặc điểm của tậpcác thanh ghi cũng được giới thiệu chi tiết
Chương 3: Lập trình mô phỏng hệ thống nhúng Chương này giới thiệu công cụ
thiết kế, mô phỏng mạch trên Proteus, các thao tác cơ bản, các thành phần cơ bản đượcchỉ rõ Đồng thời việc lập trình phần mềm trên môi trường Keil C, các kỹ thuật xuất dữliệu ra LCD, điều khiển nút nhấn hay truyền dữ liệu USART được trình bày chi tiết
Chương 4: Thực nghiệm Trong phần thực nghiệm, chúng tôi đã tiến hành cài đặt 3
chương trình thực nghiệm là mô phỏng hiển thị dữ liệu LCD, điều khiển nút bấm hiển thịđèn led và truyền dữ liệu USART Trong đó chương trình giao tiếp nút nhấn để điềukhiển hiển thị trên led được cài đặt và nạp trực tiếp lên một mạch thật trên chipSTM32F103R, 2 chương trình còn lại được nạp vào mạch mô phỏng được thiết kế trênproteus
Trang 6Trong quá trình thực hiện đề tài, nhóm chúng tôi đã cố gắng và làm việc nghiêm túc,khoa học Tuy nhiên, do hạn chế về thời gian cũng như kiến thức về vấn đề này cùng với
sự phát triển mạnh mẽ của công nghệ nên không tránh khỏi những thiếu sót, hạn chế.Chúng tôi rất mong nhận được sự đóng góp của các nhà khoa học, các cấp quản lý cùngđồng nghiệp để chỉnh sửa bổ sung và hoàn thiện hơn nữa
Chúng tôi xin chân thành cảm ơn Ban giám đốc, phòng Sau Đại Học, khoa Côngnghệ thông tin, các phòng chức năng thuộc Học viện Kỹ thuật Mật mã và các bạn đồngnghiệp đã tạo điều kiện thuận lợi cho việc nghiên cứu và hoàn thiện đề tài này
Hà Nội, tháng 12/2015
Trang 7CHƯƠNG 1: TỔNG QUAN VỀ HỆ THỐNG NHÚNG VÀ QUY
TRÌNH PHÁT TRIỂN HỆ THỐNG NHÚNG
Phần này sẽ trình bày tổng quan về các vấn đề trong phát triển hệ thống nhúng Đầutiên, chúng tôi trình bày về các khái niệm hệ thống nhúng, phần mềm nhúng và hệ thốngnhúng thời gian thực Sau đó, chúng tôi sẽ tóm lược các phạm vi ứng dụng và các loại hệthống nhúng điển hình Cuối cùng, chúng tôi trình bày về các giai đoạn trong quy trìnhphát triển hệ thống nhúng
1.1 Tổng quan về hệ thống nhúng
1.1.1 Một số khái niệm
i Hệ thống nhúng
Hệ thống nhúng là một hệ thống tính toán gồm phần cứng và phần mềm được gắn theo một hệ thống khác để điều khiển hoạt động và xử lý thông tin của hệ thống đó.
ii Hệ thống nhúng thời gian thực
Hệ thống thời gian thực là hệ thống mà tính đúng đắn của toàn bộ hệ thống phụ thuộc cả vào tính đúng đắn về chức năng và tính đúng đắn về thời gian Tính đúng đắn về
thời gian được hiểu là yêu cầu của hệ thống phải đảm bảo thoả mãn về tính tiền địnhtrong hoạt động của hệ thống Tính tiền định nói lên hành vi của hệ thống thực hiện đúngtrong một khung thời gian cho trước hoàn toàn xác định Hệ thống thời gian thực đượcphân làm hai loại đối với khái niệm thời gian thực là cứng (hard real-time) và mềm (softreal-time)
- Thời gian thực cứng là khi hệ thống hoạt động với yêu cầu thoả mãn sự ràng buộctrong khung thời gian cứng tức là nếu vi phạm thì sẽ dẫn đến hoạt động của toàn hệ thống
bị sai hoặc bị phá huỷ
- Thời gian thực mềm là khi hệ thống hoạt động với yêu cầu thoả mãn ràng buộctrong khung thời gian mềm, nếu vi phạm và sai lệch nằm trong khoảng cho phép thì hệthống vẫn có thể hoạt động được và chấp nhận được
Thực tế thấy rằng hầu hết hệ thống nhúng là các hệ thời gian thực và hầu hết các hệthời gian thực là hệ nhúng Điều này phản ánh mối quan hệ mật thiết giữa hệ nhúng và hệthời gian thực, tính thời gian thực đã trở thành như một thuộc tính tiêu biểu của hệ thốngnhúng Quan hệ giữa hệ thống nhúng và hệ thống nhúng thời gian thực được chỉ ra trongHình 1.1
Trang 8Hình 1.1: Quan hệ giữa hệ nhúng và thời gian thực
iii Phần mềm nhúng
Phần mềm nhúng là phần mềm tích hợp trong các hệ thống nhúng Mục đích của phần mềm nhúng nhằm điều khiển phần cứng, cho phép đáp ứng tương tác người dùng hoặc cung cấp môi trường để phát triển các phần mềm nhúng tích hợp khác.
1.1.2 Một số ứng dụng
Hiện nay, các ứng dụng của hệ thống nhúng đang được sử dụng rộng rãi và xu thế sẽcòn tăng mạnh Một số lĩnh vực, sản phẩm ứng dụng hệ thống nhúng:
• Các thiết bị điều khiển, đo lường
• Ô tô, tàu điện
• Truyền thông
• Thiết bị y tế
• Các thiết bị thông minh: smart home, smart phone,
• Các thiết bị điện tử tiêu dùng
Trang 9Hình 1.2: Quy trình phát triển hệ thống nhúng theo phương pháp truyền thống
Quy trình phát triển hệ thống nhúng theo phương pháp truyền thống được minh họatrong Hình 1.2 Căn cứ vào đặc tả yêu cầu, mỗi tác vụ hệ thống có thể được phân thànhtác vụ phần cứng hoặc tác vụ phần mềm Các tác vụ phần cứng được thực hiện theo cácmạch tích hợp có sẵn hoặc xây dựng mới còn các tác vụ phần mềm được thực hiện bởiCPU Phát triển phần cứng là giai đoạn tiếp theo sau khi phân chia phần cứng – phầnmềm Giai đoạn phát triển phần mềm được thực hiện sau khi đã phát triển phần cứng.Tiếp đến là giai đoạn tích hợp phần mềm lên hệ thống phần cứng, kiểm thử hệ thống, làmbản mẫu và sản xuất Phương pháp truyền thống có hai hạn chế chính là thời gian pháttriển lâu và không linh động do phần mềm được phát triển cho phần cứng cố định vàkhông thể thay đổi việc phân chia phần cứng – phần mềm
ii Phương pháp đồng thiết kế
Phương pháp phát triển hệ thống nhúng truyền thống có thời gian phát triển lâu vàtách biệt giữa phát triển phần cứng, phần mềm thành các giai đoạn khác nhau do đó sựphù hợp giữa phần cứng, phần mềm bị hạn chế Đồng thời việc đánh giá, cải tiến sự phânchia phần cứng – phần mềm trong phương pháp truyền thống cũng gặp khó khăn Để khắcphục vấn đề này, phương pháp đồng thiết kế phần cứng – phần mềm đã được đề xuất,triển khai Quy trình phát triển theo hướng tiếp cận đồng thiết kế được chỉ ra như trongHình 1.3 Theo phương pháp này, giai đoạn thiết kế hệ thống nhúng bắt đầu từ đặc tả mộtphân chia phần cứng – phần mềm; sau đó tiến hành song song mô hình phần cứng, môhình phần mềm; sau khi mô hình, tiến hành liên kết phần cứng, phần mềm và thực hiện
mô phỏng để đánh giá hệ thống; sau khi đánh giá hệ thống có thể quay lại cải tiến, tối ưu
Trang 10phát triển hệ thống, tăng sự liên kết, phù hợp giữa phần cứng – phần mềm và có thể thựchiện tối ưu mức hệ thống trong giai đoạn thiết kế dựa trên phân chia phần cứng – phầnmềm
Hình 1.3: Quy trình phát triển hệ thống nhúng theo phương pháp đồng thiết kế
Hai phương pháp phát triển hệ thống nhúng trên đều gồm ba giai đoạn chính làphát triển phần cứng, phát triển phần mềm và tích hợp Quy trình phát triển phần mềmnhúng cũng như phát triển phần mềm thông thường, gồm các bước chính theo mô hìnhthác nước đó là phân tích, thiết kế, lập trình, kiểm thử, triển khai và bảo trì Điểm khácbiệt chính là việc lập trình phần mềm nhúng thường gắn với một CPU và thường phải sửdụng môi trường phát triển chéo Phát triển phần cứng hệ thống nhúng thường được thựchiện theo mô hình chữ Y như trong Hình 1.3 Phát triển phần cứng hệ thống nhúng đượcchia thành bốn mức từ mức mạch đến mức hệ thống và được thiết kế theo ba khía cạnh làchức năng, cấu trúc và bố cục vật lý Trong mức hệ thống, dựa vào các thành phần cơ bảnnhư CPU, RAM, ROM, cache, v.v để thiết kế, xây dựng lên hệ thống nhúng Trong mứcCPU, các phần tử cơ bản là các đơn vị chức năng như ALU, CU, bộ cộng, bộ nhân, cácthanh ghi, v.v được kết hợp để thiết kế, xây dựng CPU và các thành phần mức trên khác.Các phần tử cơ bản trong mức CPU lại được thiết kế và xây dựng từ các cổng lôgic nhưAND, OR, NOT, XOR, v.v trong mức lôgic Các cổng lôgic lại được thiết kế và xâydựng từ các thiết bị bán dẫn trong mức mạch
Trang 11Hình 1.4: Quy trình thiết kế và xây dựng phần cứng
iii Phương pháp dựa trên platform
Phương pháp dựa trên platform hướng đến khả năng tái sử dụng, tính linh động vàkhả năng tái cấu trúc Platform là một thư viện các thành phần được sử dụng như cácphần tử cơ bản để thiết kế phần cứng hoặc thiết kế, lập trình phần mềm Platform phầncứng có các mức trừu tượng khác nhau như mô tả trong Hình 1.5 Platform phần mềm cóthể bao gồm các mẫu thiết kế hoặc các thư viện chương trình và các API để phát triểnphần mềm Platform phần mềm được mô tả như trong Hình 1.6
Trang 12Hình 1.5: Các mức trừu tượng của platform phần cứng
Hình 1.6: Mô tả platform phần mềm
Như vậy, quy trình phát triển phần mềm theo các phương pháp tiếp cận khác nhauchỉ khác nhau chủ yếu ở giai đoạn thiết kế Quy trình này gồm các công việc chính như:đặc tả yêu cầu, phân chia phần cứng-phần mềm, phát triển phần cứng, phát triển phầnmềm, tích hợp hệ thống, kiểm thử, làm bản mẫu và sản xuất Nội dung chi tiết trong cácgiai đoạn này sẽ được trình bày trong các phần tiếp theo
1.2.2 Các giai đoạn phát triển hệ thống nhúng
1.2.2.1 Xác định yêu cầu sản phẩm
Trong giai đoạn phân tích và thiết kế mức cao, hệ thống nhúng xem như một hệthống tính toán không phân biệt phần cứng, phần mềm Do đó, giai đoạn xác định yêu cầucần làm rõ các vấn đề sau: các chức năng của hệ thống, những thành phần vào ra, giaodiện hệ thống Trong hệ thống nhúng việc xác định yêu cầu là rất quan trọng Đặc tả yêucầu có thể giúp chúng ta tránh được những vấn đề sau này như lượng RAM thiết kế cho
hệ thống nhúng không đủ cho hoạt động hay bộ xử lý được chọn có tốc độ quá chậm chocông việc Đồng thời, việc đặc tả yêu cầu còn là cơ sở để thẩm định trong các giai đoạnthiết kế, triển khai và kiểm thử
Trang 131.2.2.2 Lựa chọn chip
Sau giai đoạn xác định yêu cầu, trước khi phân chia phần cứng – phần mềm có mộtbước nhỏ, ít được nghiên cứu là lựa chọn chip Việc lựa chọn chip không được quan tâmnhiều do mỗi họ CPU, vi điều khiển thường được sử dụng trong các lĩnh vực cụ thể của
hệ thống nhúng Tuy nhiên, việc lựa chọn chip tốt cũng là tiền đề để xây dựng một hệthống nhúng tốt Các kỹ thuật lựa chọn chip thường dựa vào đặc tả yêu cầu và các hồ sơsản phẩm Những câu hỏi sau đây có thể hữu ích khi xác định xem sử dụng bộ vi xử lý cóhợp lý không:
Đầu vào và đầu ra được xử lý và cập nhật ở tốc độ nào? Mặc dù xung đồng hồ vẫnđang tăng lên nhưng có một giới hạn trên thực tế với tốc độ bộ vi xử lý có thể đọc từ mộtđầu vào hoặc cập nhật đầu ra và vẫn đang thực hiện công việc Nếu hệ thống phải thựchiện việc xử lý quan trọng, xử lý bộ đệm, hoặc những tính toán khác thì tỉ lệ cập nhật sẽgiảm xuống
Liệu có một mạch tích hợp đơn (IC) hoặc một thiết bị logic khả trình (PLD) thựchiện được công việc không? nếu có thì sử dụng bộ vi xử lý là không cần thiết
Hệ thống có nhiều đầu vào và ra, như công tắc hay màn hình hiển thị không? nếu cóthì bộ vi xử lý sẽ giải quyết công việc thuận lợi hơn
Những giao diện đối với những hệ thống bên ngoài Nếu hệ thống phải làm việc với
hệ thống khác dùng giao thức điều khiển liên kết dữ liệu đồng bộ (SDLC) hoặc một vàigiao thức truyền thông phức tạp khác thì sử dụng bộ vi xử lý là lựa chọn đúng đắn
Hệ thống có phải tính toán và xử lý nhiều việc Ví dụ hệ thống đánh lửa điện tử hiệnđại có rất nhiều đầu vào (các cảm ứng không khí, động cơ …) với những liên quan phứctạp sẽ có vài lựa chọn thay vì sử dụng bộ vi xử lý
Thiết kế có được sửa đổi khi hoàn thành hoặc thay đổi trong quá trình thiết kế Cócần phải tuỳ biến sản phẩm cho những phiên bản đặc biệt không Những yêu cầu này đềuảnh hưởng đến việc có lựa chọn bộ vi xử lý hay không
Giả sử chúng ta đã quyết định sử dụng bộ vi xử lý cho hệ thống nhúng của mình thìvấn đề tiếp theo là lựa chọn bộ vi xử lý cho phù hợp với hệ thống cần xây dựng Thực tếcho thấy có nhiều sự lựa chọn đúng bộ xử lý cho hệ thống nhúng bởi vì sẽ có vài bộ xử lý
có thể đạt các yêu cầu đặt ra Sự lựa chọn bao gồm việc cân bằng các yếu tố giữa chi phí
và các chức năng Một số vấn đề cần phải được xem xét khi lựa chọn:
- Số lượng chân vào ra yêu cầu
- Những giao tiếp yêu cầu
- Yêu cầu bộ nhớ
- Xem xét vấn đề thời gian thực
- Môi truờng phát triển
Trang 14- Tốc độ xử lý được yêu cầu
- Khả năng của ROM
- Kiến trúc bộ nhớ
1.2.2.3 Phân chia giữa phần cứng và phần mềm
Như trình bày trong các phương pháp phát triển hệ thống nhúng trước đó, sau khi đặc
tả yêu cầu, việc phân chia phần cứng – phần mềm có vai trò quan trọng và khởi đầu để tạo
ra một sản phẩm nhúng tốt Thông thường, phân chia phần cứng – phần mềm gắn liền vớiphương pháp đồng thiết kế để tối ưu mức hệ thống trong giai đoạn thiết kế hệ thốngnhúng Thiết kế hệ nhúng sẽ liên quan đến cả hai vấn đề là thiết kế các thành phần phầncứng và các thành phần phần mềm, người thiết kế phải xác định xem vấn đề nào được giảiquyết trong phần cứng và vấn đề nào thì giải quyết ở phần mềm Sự lựa chọn này đượcgọi là phân bổ quyết định Tuy nhiên, việc đánh giá các thành phần trong giai đoạn sớmcủa chu kỳ phát triển gặp khó khăn và thường được đánh giá chính xác hơn trong các giaiđoạn cài đặt, sản xuất, thực thi Phương pháp phân chia phần cứng – phần mềm phổ biến
là dựa trên tối ưu đa mục tiêu Pareto Đồng thời việc đánh giá các thành phần ở mức hệthống trong giai đoạn thiết kế cũng được tiến hành theo hai phương pháp tiếp cận chính làdựa trên mô phỏng và dựa trên kiểm chứng mô hình
Trong phương pháp phát triển hệ thống nhúng truyền thống, những nhà phát triểnứng dụng thường phát triển với phần cứng được xác định trước do đó có thể gặp nhữngkhó khăn trong việc điều chỉnh về phần cứng để nâng cao hiệu quả Đồng thời họ cũng cóthể đã gặp phải những vấn đề lựa chọn cân nhắc giữa phần cứng và phần mềm Ví dụ,trong thế hệ PC đầu tiên, những bộ xử lý 8086, 80286 và 80386 đều không có đơn vị xử
lý dấu phảy động trên chip Những bộ xử lý này cần kết hợp với đơn vị xử lý dấu phảyđộng như 8087, 80287 và 80387 để chạy trực tiếp các chỉ thị dấu phảy động trong chươngtrình Nếu PC không có một đơn vị xử lý dấu phẩy động, thì mã chương trình dịch phảichuyển những chỉ thị dấu phảy động thành tập chỉ thị xử lý dấu phẩy tĩnh tương đương.Nói cách khác, hệ thống sẽ thực hiện vấn đề xử lý dấu phảy động trên phần mềm Tuynhiên điều này sẽ chậm hơn nhiều so với có đơn vị xử lý dấu phảy động trên bảng mạch
Mặt khác, những yêu cầu cho phần cứng chặt chẽ hơn nhiều so với phần mềm bởi
vì nó phức tạp hơn và chi phí cho sản xuất và sửa lỗi phần cứng nhiều hơn so với sửa lỗiphần mềm Nếu phần cứng là IC chuyên về ứng dụng tùy biến (ASIC) thì càng phải xemxét nhiều hơn vì tính phức tạp của việc thiết kế một IC tùy biến Nếu cách tiết cận nàydường như quá rủi ro cho dự án, đội thiết kế có thể chuyển sang giải pháp phần mềm hoặcđội thiết kế có thể đưa ra quyết định cần phải sử dụng một bộ xử lý mới hơn, mạnh hơn để
Trang 15nâng cao hiệu năng Hai phương pháp thiết kế khác nhau này đã được áp dụng thành côngcho thiết kế máy in laser Một phương pháp thiết kế hướng các thành phần phần mềmbằng cách lựa chọn bộ xử lý đủ mạnh và tối thiểu hoá dùng các thiết bị phần cứng chuyênbiệt Phương pháp thiết kế ngược lại sử dụng các thiết bị phần cứng chuyên biệt để giảmgánh nặng cho bộ xử lý Cả hai đều có những sản phẩm cạnh tranh nhưng thực hiện haichiến lược thiết kế khác nhau cho phân chia các thành phần cứng và mềm Tuy nhiên,phương pháp tiếp cận mới cải tiến quá trình phát triển tuần tự phần cứng, phần mềm làphương pháp đồng thiết kế Phương pháp đồng thiết kế có sự tương tác giữa thiết kế phầncứng, thiết kế phần mềm và tối ưu phân chia phần cứng – phần mềm Phương pháp này sẽđược trình bày chi tiết trong chương sau.
1.2.2.4 Giai đoạn phát triển
Trong giai đoạn này, các module phần cứng, phần mềm sẽ được đồng thiết kế vàphát triển Việc phát triển hệ thống nhúng chia thành hai phần: phát triển phần cứng, pháttriển phần mềm Sau đó phải tích hợp phần cứng, phần mềm cho hệ thống Việc xây dựngcác module phần mềm cũng tuân theo các bước trong quy trình phát triển phần mềm như:đặc tả phần mềm, thiết kế phần mềm, cài đặt phần mềm, kiểm thử module phần mềm vàkiểm thử tích hợp Về việc xây dựng các thành phần phần cứng tuân theo các bước sau:đặc tả phần cứng, thiết kế phần cứng, mô phỏng và xây dựng, kiểm thử module và kiểmthử tích hợp Sau khi phát triển xong phần cứng, phần mềm cần tích hợp chúng trong hệthống nhúng và tích hợp hệ thống nhúng trong hệ thống chứa Do đó cần kiểm thửmodule và kiểm thử tích hợp hệ thống nhúng trong hệ thống chứa
1.2.2.5 Tích hợp phần cứng phần mềm
Giai đoạn tiếp theo sau khi phát triển phần cứng và phát triển phần mềm trong hệthống nhúng là tích hợp phần mềm vào phần cứng hệ thống nhúng Giai đoạn tích hợpgiữa phần mềm và phần cứng phải có những công cụ đặc biệt và phương pháp để quản lý
độ phức tạp Quy trình tích hợp phần cứng và phần mềm nhúng là quá trình thực nghiệm
và gỡ lỗi Thông thường, việc dò vết và gỡ lỗi phần mềm trên các bộ mạch phần cứng cụthể có thể được thực hiện bằng các phần mềm mô phỏng Trong quá trình tích hợp phảixác định xem phần mềm có chạy tốt trên nền phần cứng không và có thực sự hiểu tài liệuđặc tả phần cứng không Ví dụ, một vấn đề về big endian/little endian trong quá trình tíchhợp Người thiết kế phần cứng thực hiện thứ tự các byte được tổ chức theo big endian,còn người thiết kế phần mềm cho rằng theo thứ tự little endian Nghĩa là thành phần phần
Trang 16mềm và phần cứng có thể đúng đắn trong quá trình phát triển riêng nhưng bị lỗi trong quátrình tích hợp Hình 1.7 dưới đây minh họa vấn đề big endian/little endian trong cổng tuần
tự được thiết kế cho một ASIC với một bus 16 bit vào ra Cổng là vùng bộ nhớ ánh xạ tạiđịa chỉ 0x400000, 8 bit của một từ là phần dữ liệu của cổng, 8 bít khác là phần trạng tháicủa cổng Thậm chí người thiết kế phần cứng có thể xác định những bit nào là trạng thái,bit nào là dữ liệu thì người thiết kế phần mềm vẫn có thể gán sai địa chỉ cổng khi ghi vàocổng theo cách truy cập byte
Hình 1.7: Minh họa vấn đề big endian/little endian
Trang 171.2.2.6 Kiểm thử mức hệ thống nhúng
Do tính đa dạng và môi trường không đồng nhất của hệ thống nhúng so với hệthống PC nên kiểm thử hệ thống nhúng cần sự quan tâm đặc biệt vì không những nó phảiđảm bảo các chức năng của hệ thống hoạt động đúng và đủ mà còn phải đảm bảo cả vềyếu tố thời gian thực hiện Việc kiểm thử hệ thống nhúng bao gồm kiểm thử phần cứng,kiểm thử phần mềm, kiểm thử tích hợp phần cứng – phân mềm và kiểm thử tích hợp hệthống nhúng trong hệ thống chứa Khác với việc kiểm thử phần mềm thông thường, việckiểm thử hệ thống nhúng thường tuân theo mô hình chữ V Đồng thời các test case, cácràng buộc trong hệ thống nhúng cũng phức tạp, đa dạng hơn
Trang 18CHƯƠNG 2: KIẾN TRÚC ARM VÀ VI ĐIỀU KHIỂN LÕI ARM
Vi xử lý ARM có nguồn gốc trong một công ty máy tính của Anh có tên là Acorn.Vào giữa những năm 1980, người ta tìm kiếm vi xử lý để thay thế cho vi xử lý 6502 đượcdùng rộng rãi trong các trường học ở Anh Không có kiến trúc 16-bit nào thỏa mãn cácyêu cầu ở thời điểm đó Vì thế vi xử lý 32-bit đã được thiết kế cho mục đích này.Những công ty khác cũng quan tâm tới vi xử lý này, bao gồm Apple – công ty đang tìmkiếm một vi xử lý cho dự án PDA của họ Sau nhiều lần thương thảo dẫn tới kết quả lànhóm thiết kế vi xử lý của Acorn tách ra khỏi Acorn vào cuối năm 1990 để trở thành công
ty Advanced RISC Machines Ltd, hay gọi tắt là ARM Ltd
2.1 Tổng quan về vi xử lý ARM và vi điều khiển lõi ARM
ARM (Advanced RISC Machines) là bộ vi xử lý với kiến trúc tập lệnh RISC cải tiến
Vi xử lý ARM đầu tiên là ARM1, ra đời năm 1985 Tuy nhiên, đến năm 1994, ARM7 rađời và phát triển rất thành công mới giúp ARM trở thành kiến trúc được lựa chọn của thếgiới kĩ thuật số Trong vài năm qua, hơn 10 tỉ thiết bị có sử dụng chip ARM7 đã được ứngdụng trong nhiều lĩnh vực của đời sống Ngày nay, ARM7, ARM9, ARM-Cortex vẫn tiếptục được sử dụng rộng rãi để thiết kế các thiết bị 32 bit đặc biệt là các họ vi điều khiểnkhác nhau ARM tuân theo kiến trúc công nghiệp chuẩn, dễ thiết kế và gỡ lỗi ARM đượcứng dụng trong các lĩnh vực chính sau:
- Nhúng trong thiết bị: USB controllers, HDD controllers, Bluetooth controllers,Networking/WiFi, máy quét y khoa
- Nhúng dân dụng: đồ chơi điện tử, thiết bị cầm tay, GPS, MP3 Player, máy thu phátcầm tay
- Tự động: chẩn đoán, bảo trì, giải trí, cảm ứng
- Nhúng công nghiệp: đồng hồ năng lượng, bộ ngắt mạch, UPS, tự động hóa nhàmáy
- Đầu đọc thẻ, máy ATM, máy tính tiền, máy bán hàng
Họ ARM7 gồm có các vi xử lý: ARM7TDMI-S, ARM7TDMI, ARM7EJ-S Quátrình phát triển và các dòng vi xử lý dựa trên ARM7 được mô tả như trong Hình 2.1
Trang 19Hình 2.1 Quá trình phát triển và các dòng vi xử lý dựa trên ARM7
Một trong những lĩnh vực quan trọng của hệ thống nhúng là điều khiển và tự độnghóa Để rút ngắt thời gian thiết kế và phát triển hệ thống nhúng, sử dụng các hệ thống tíchhợp trên chip (SoC – System on Chip) là một giải pháp tốt Vi điều khiển là một dạng cụthể của SoC Vi điều khiển là một vi mạch tích hợp bao gồm một vi xử lý và bộ nhớROM, RAM và flash Có nhiều họ vi điều khiển khác nhau như AVR, PIC, v.v nhưng viđiều khiển lõi ARM vẫn được dùng rộng rãi với các mức khác nhau của phần mềm nhúng
từ các chương trình nhúng đơn, đến mức máy ảo và mức hệ điều hành Họ vi điều khiểnlõi ARM được tổng hợp trong Bảng 2.1
Trang 20Bảng 2.1 Tổng hợp các vi điều khiển lõi ARM
Vi xử
lý
Các họ vi điều khiển theo hãng sản xuất
NXP Semiconductors
EFM32 Tiny,Gecko, Leopard, Giant
SAM3U SAM3S SAM3N SAM3A SAM3X
Stellari
2.2 Kiến trúc ARM Cortex M3
2.2.1 Giới thiệu ARM Cortex-M3
Bộ vi xử lý ARM Cortex-M3 là bộ xử lý ARM thế hệ mới cho các hệ thống nhúng
Nó được phát triển để cung cấp một nền tảng chi phí thấp, đáp ứng yêu cầu thực thi củaMCU với việc giảm số bóng bán dẫn trong lõi ARM Cortex dẫn tới tiêu thụ năng lượngthấp và giảm giá thành vi xử lí, đồng thời cung cấp hiệu năng tính toán cao và một hệthống tiên tiến để đáp ứng ngắt Bộ vi xử lý ARM Cortex-M3 32-bit RISC đạt hiệu suấtcao hơn so với ARM7TDMI-S
Trang 21Dòng Cortex gồm có 3 phân nhánh chính: dòng A dành cho các ứng dụng cao cấp,dòng R dành cho các ứng dụng thời gian thực như các đầu đọc và dòng M dành cho cácứng dụng vi điều khiển và chi phí thấp.
Không giống với ARM7 được thiết kế theo kiến trúc Von Neumann (bộ nhớ chươngtrình và bộ nhớ dữ liệu chung với nhau), Cortex-M3 được thiết kế dựa theo kiến trúcHarvard (bộ nhớ chương trình và bộ nhớ dữ liệu tách biệt với nhau), và có nhiều bus chophép thực hiện các thao tác song song với nhau, do đó làm tăng hiệu suất của chip
Bộ xử lý Cortex-M3 là một vi điều khiển được tiêu chuẩn hóa gồm một CPU 32 bit,cấu trúc bus, đơn vị xử lý ngắt có hỗ trợ tính năng ngắt lồng nhau, hệ thống gỡ lỗi (debugsystem) và tiêu chuẩn bố cục bộ nhớ
Dòng Cortex được thiết kế hỗ trợ tập lệnh ARM Thumb-2, tập lệnh này được phatrộn giữa tập lệnh 16 và 32 bit, nhằm đạt được hiệu suất cao của tập lệnh ARM 32-bit vớimật độ mã chương trình tối ưu của tập lệnh Thumb 16 bit Tập lệnh Thumb-2 được thiết
kế đặc biệt dành cho trình biên dịch C/C++, tức là các ứng dụng dựa trên nền Cortex hoàntoàn có thể được viết bằng ngôn ngữ C mà không cần đến chương trình khởi động viếtbằng Assembly như ARM7 và ARM9
2.2.2 Kiến trúc ARM cortex M3
Vi xử lý ARM cortex M3 gồm một nhân cortex kết nối với bộ nhớ Flash thông quađường bus lệnh chuyên biệt Các bus dữ liệu và bus hệ thống được kết nối tới ma trận bustốc độ cao như trên Hình 2.2 đã chỉ ra
kì để phục vụ cho các tác vụ được lập lịch Thanh ghi trạng thái và điều khiển của đồng
hồ hệ thống trong đơn vị không gian điều khiển hệ thống Cortex-M3 cho phép chọn cácnguồn xung nhịp
Trang 22Hình 2.2 Các thành phần chính của ARM Cortex – M3
Xử lý ngắt
Một trong những cải tiến quan trọng của lõi Cortex so với các CPU ARM trước đó làcấu trúc ngắt của nó và xử lý các ngắt ngoại lệ (exception handling) Phát triển hệ thống
Trang 23nhúng đòi hỏi tính thời gian thực cao Điều này được giải quyết nhờ tốc độ ngắt đơn rấtnhanh và một số phương pháp như xây dựng quyền ưu tiên ngắt, giảm thời gian trễ xuốngtối thiểu giữa các lần phục vụ nhắc.
Các thiết bị ngoại vi
Các cổng I/O đa dụng: có 5 cổng được đánh số từ A -> E với mức áp tiêu thụ ở 5V.Nhiều chân ngoại có thể cấu hình như Input/Output tương tác với các thiết bị của ngườidùng (UART), ngoài ra còn đóng vai trò nguồn gốc ngoại kết hợp với cổng GPIO khác
2.2.3 Mô hình giao tiếp ARM
Vi điều khiển ARM được thực thi trên hệ thống kiến trúc các bus truyền dữ liệu đachức năng của vi điều khiển Bao gồm bộ xử lý ARM kết nối qua hệ thống bus truyền dữliệu hiệu suất cao để đồng bộ nhanh với SRAM, các bus giao tiếp ngoài, và cầu nối tớicác bus truyền ngoại vi công suất thấp, được mô tả trong hình 2.3 Thiết bị ngoại vi bênngoài được xây dựng từ các thiết bị riêng và tùy theo ứng dụng người dùng
Hình 2.3 Mô hình giao tiếp ARM
Các khối chức năng trong vi điều khiển ARM bao gồm:
Trang 24- Cầu nối ngoài AHB;
- Bộ đếm/định thời;
- Khối SPI (Serial Peripheral Interface): Khối giao tiếp các thiết bị ngoại vi nối tiếp;
- Khối Serial UART (Serial Universal Asynchronous Receiver/Transmitter): Khốigiao tiếp nối tiếp truyền/thu không đồng bộ đa năng
2.2.4 Một số giao tiếp ARM
ii Giao tiếp với bộ điều khiển ngắt
Bộ điều khiển ngắt trong ARM cung cấp giao tiếp phần mềm độc lập cho hệ thốngngắt Các bit ngắt được định nghĩa cho yêu cầu chức năng cơ bản trong thiết kế hệ thống.Trong hệ thống ARM có hai mức ngắt:
Trang 25- FIQ (Fast Interrupt Request) dành cho ngắt nhanh.
- IRQ (Interrupt Request) dành cho các ngắt chung
Các bộ điều khiển ngắt được chia ra để sử dụng cho FIQ và IRQ, chỉ khác ở vị trímột bit riêng được định rõ cho bộ điều khiển FIQ, các bit còn lại trong bộ điều khiển ngắtnày dành cho nguồn ngắt độc lập trong 32 bit của bộ điều khiển IRQ và được mô tả tronghình 2.5
Hình 2.5 Bộ điều khiển ngắt FIQ và IRQ
iii Giao tiếp bộ định thời
Mỗi một bộ định thời là một bộ đếm ngược rộng 16 bit, có thể lựa chọn phân chia tần
số đầu vào Bộ định thời có hai chế độ hoạt động là kiểu đếm tự do và kiểu tuần hoàn.Trong chế độ định thời tuần hoàn bộ đếm sẽ tạo ra một ngắt tại một khoảng thời gian.Trong chế độ định thời tự do, bộ định thời sẽ tràn bộ đếm sau khi đến giá trị 0 và tiếp tụcđếm ngược từ giá trị cực đại
Bộ định thời được kích hoạt bằng một bit trong thanh ghi điều khiển Việc khởi độnglại sẽ làm bộ định thời được xóa, ngắt sẽ được xóa và thanh ghi nạp sẽ không xác định
iv Giao tiếp UART
Giao tiếp UART là giao tiếp nối tiếp, có các tính năng sau:
- Cấp tín hiệu cho các đầu vào bộ điều khiển;
- Điều khiển đầu ra tín hiệu;
Trang 26dữ liệu Giao tiếp bán song công được thực hiện khi mà cả hai chiều chia sẻ một đườngdẫn hoặc nếu có hai đường nhưng cả hai thiết bị chỉ giao tiếp qua một đường ở cùng mộtthời điểm
Dữ liệu truyền được ghi vào thành 16 byte FIFO (bộ đệm vào trước ra trước) và bắtđầu quá trình truyền các khung dữ liệu với các tham số được xác định trong thanh ghiđiều khiển UART Truyền sẽ kết thúc khi dữ liệu trong FIFO là trống
Trong quá trình thu, UART bắt đầu lấy mẫu sau khi nhận một bit khởi động (đầu vàomức thấp) Khi một word (16 bit) được nhận đủ, nó sẽ được chứa trong FIFO nhận
Khung truyền trong giao tiếp UART gồm bốn thành phần: start bit, data, parity (kiểmtra lỗi) và stop bit
2.2.5 Tập thanh ghi
Vi xử lý Cortex-M3 có các thanh ghi 32 bit:
- 13 thanh ghi đa dụng, r0-r12
- Stack Pointer (SP), r13
- Thanh ghi liên kết LR (Link Register), r14
- Thanh ghi PC (Program Counter), r15
- Thanh ghi trạng thái chương trình đặc biệt (xPSR)
CPU Cortex là bộ xử lý dựa trên kiến trúc RISC, do đó hỗ trợ kiến trúc nạp và lưutrữ (load and store architecture) Để thực hiện lệnh xử lý dữ liệu, các toán hạng phải đượcnạp vào một tập thanh ghi trung tâm, các phép tính dữ liệu phải được thực hiện trên cácthanh ghi này và kết quả sau đó được lưu lại trong bộ nhớ
Hình 2.6 Kiến trúc load và store của vi xử lý ARM Cortex-M3
Do vậy tất cả các hoạt động của chương trình tập trung xung quanh tập thanh ghi củaCPU Tập thanh ghi này bao gồm 16 thanh ghi 32 bit Các thanh ghi R0-R12 là các thanhghi đơn giản, có thể được dùng để chứa các biến của chương trình Các thanh ghi R13-R15 có chức năng đặc biệt trong CPU Cortex
Thanh ghi R13 được dùng như là con trỏ ngăn xếp (stack pointer) Thanh ghi nàyđược chia thành nhóm (banked), cho phép CPU Cortex có hai chế độ hoạt động, mỗi chế
độ có không gian ngăn xếp riêng biệt Đặc điểm này thường được hệ điều hành thời gian
Trang 27thực (Real Time Operating System) sử dụng để có thể chạy mã hệ thống của mình trongmột chế độ bảo vệ Trong CPU Cortex có hai ngăn xếp được gọi là main stack và processstack.
Thanh ghi R14 tiếp theo được gọi là thanh ghi liên kết (link register) Thanh ghi nàyđược sử dụng để lưu trữ các địa chỉ trở về khi một cuộc gọi thủ tục (call a procedure)được thực hiện Điều này cho phép CPU Cortex thực hiện rất nhanh việc nhập và thoátkhỏi một thủ tục Nếu chương trình của bạn gọi sâu vào nhiều lớp chương trình con, trìnhbiên dịch sẽ tự động lưu R14 trên ngăn xếp
Thanh ghi cuối cùng R15 là bộ đếm chương trình (Program Counter); nó là một phầncủa tập thanh ghi trung tâm, nó có thể đọc được và thao tác giống như bất kỳ thanh ghinào khác
Hình 2.7 Tập thanh ghi của vi xử lý ARM Cortex-M3
Thanh ghi XPSR
Ngoài tập thanh ghi trung tâm còn có một thanh ghi riêng biệt được gọi là thanh ghitrạng thái chương trình (Program Status Register) Nó không phải là một phần của tậpthanh ghi chính và chỉ có teher truy cập thông qua hai lệnh chuyên dụng XPSR chứa một
số các vùng chức năng quan trọng ảnh hưởng đến việc thực thi của CPU Cortex
Hình 2.8 Thanh ghi trạng thái chương trình của vi xử lý Cortex-M3
Trang 28Thanh ghi XPSR cũng có thể được truy cập thông qua ba biệt hiệu đặc biệt cho phéptruy cập vào các bit trong XPSR Năm bit đầu là những cờ mã điều kiện và được gán biệthiệu (aliased) như thanh ghi trạng thái chương trình ứng dụng Bốn cờ N, Z, C, V(Negative, Zero, Carry và Overflow) sẽ được thiết lập và xóa tùy thuộc vào kết quả củamột lệnh xử lý dữ liệu Bit Q là được sử dụng bởi các lệnh toán học DPS để chỉ ra rằngmột biến đã đạt giá trị tối đa hoặc tối thiểu của nó Giống như tập lệnh ARM 32 bit, cáclệnh Thumb-2 chỉ được thực hiện nếu mã điều kiện của lệnh phù hợp với trạng thái củacác cờ trong thanh ghi trạng thái chương trình ứng dụng Nếu mã điều khiển của lệnhkhông phù hợp, thì lệnh đi ngang qua đường ống như là một lệnh NOP (lệnh này khônglàm gì cả).