Giáo trình Hệ thống nhúng (Phần 1)
Hệ thống nhúng (Embedded system) là một thuật ngữ để chỉ một hệ thống có khả
năng tự trị được nhúng vào trong một môi trường hay một hệ thống mẹ. Đó là các hệ
thống tích hợp cả phần cứng và phần phềm để thực hiện một hoặc một nhóm chức năng
chuyên biệt cụ thể.
Hệ thống nhúng (HTN) thường được thiết kế để thực hiện một chức năng chuyên
biệt nào đó. Khác với cac máy tính đa chức năng, chẳng hạn như may tính cá nhân, một
hệ thống nhúng chỉ thực hiện một hoặc một vài chức năng nhất định, thường đi kèm với
những yêu cầu cụ thể và bao gồm một số thiết bị máy móc và phần cứng chuyên dụng mà
ta không tìm thấy trong một máy tính đa năng nói chung. Vì hệ thống chỉ được xây dựng
cho một số nhiệm vụ nhất định nên các nhà thiết kế có thể tối ưu hóa nó nhằm giảm thiểu
kích thước và chi phí sản xuất. Các hệ thống nhúng thường được sản xuất hàng loạt với
số lượng lớn. HTN rất đa dạng, phong phú về chủng loại. Đó có thể là những thiết bị cầm
tay nhỏ gọn như đồng hồ kĩ thuật số và máy chơi nhạc MP3, hoặc những sản phẩm lớn
như đèn giao thông, bộ kiểm soát trong nhà máy hoặc hệ thống kiểm soát các máy năng
lượng hạt nhân. Xét về độ phức tạp, hệ thống nhúng có thể rất đơn giản với một vi điều
khiển hoặc rất phức tạp với nhiều đơn vị, các thiết bị ngoại vi và mạng lưới được nằm
gọn trong một lớp vỏ máy lớn.
Tóm tắt nội dung tài liệu: Giáo trình Hệ thống nhúng (Phần 1)
BỘ CÔNG THƯƠNG TRƯỜNG CAO ĐẲNG KỸ THUẬT CAO THẮNG KHOA ĐIỆN TỬ TIN HỌC LẠI NGUYỄN DUY LƯU VĂN ĐẠI GIÁO TRÌNH HỆ THỐNG NHÚNG THÀNH PHỐ HỒ CHÍ MINH - 2016 MỤC LỤC CHƯƠNG 1. TỔNG QUAN VỀ HỆ THỐNG NHÚNG .......................................................... 1 1.1. KHÁI NIỆM VỀ HỆ THỐNG NHÚNG ...................................................................... 1 1.2. LỊCH SỬ PHÁT TRIỂN CỦA HỆ THỐNG NHÚNG ................................................ 2 1.3. ĐẶC ĐIỂM HỆ THỐNG NHÚNG ............................................................................... 2 1.4. KIẾN TRÚC ĐIỂN HÌNH CỦA HỆ THỐNG NHÚNG ............................................. 3 1.5. PHÂN LOẠI HỆ THỐNG NHÚNG ............................................................................. 4 1.6. PHẠM VI ỨNG DỤNG CỦA HỆ THỐNG NHÚNG ................................................. 4 1.7. CÂU HỎI VÀ BÀI TẬP ................................................................................................. 5 CHƯƠNG 2. CÁC THÀNH PHẦN CỦA MỘT HỆ THỐNG NHÚNG ................................ 6 2.1. CÁC THÀNH PHẦN PHẦN CỨNG CỦA HỆ THỐNG NHÚNG ............................ 6 2.1.1. Đơ n vị xử lý trung tâm CPU ........................................................................... 6 2.1.2. Bộ nhớ ....................................................................................................................... 10 2.1.3. Ngoại vi ..................................................................................................................... 13 2.2. MỘT SỐ NỀN TẢNG PHẦN CỨNG THÔNG DỤNG ............................................ 21 2.3. CÁC THÀNH PHẦN PHẦN MỀM HỆ THỐNG NHÚNG ..................................... 23 2.3.1. Phần mềm nhúng là gì? ........................................................................................... 23 2.3.2. Đặc điểm của phần mềm nhúng ............................................................................. 24 2.3.3. Quy trình phát triển của phần mềm nhúng .......................................................... 24 2.4. CÂU HỎI VÀ BÀI TẬP ............................................................................................... 27 CHƯƠNG 3. XÂY DỰNG HỆ THỐNG NHÚNG ................................................................. 29 3.1. CÁC BƯỚC XÂY DỰNG PHẦN CỨNG .................................................................. 29 3.1.1. Lựa chọn kiến trúc CPU ......................................................................................... 29 3.1.2. Lựa chọn CPU vendor ............................................................................................. 29 3.1.3. CPU được support bởi hệ điều hành nào .............................................................. 29 3.1.4. Tìm hiểu đặc tả, cơ chế boot của CPU ................................................................... 30 3.1.5. Xây dựng sơ đồ nguyên lý cho hệ thống ................................................................ 30 3.1.6. Thiết kế PCB ............................................................................................................ 30 3.2. CÁC BƯỚC XÂY DỰNG PHẦN MỀM .................................................................... 31 3.2.1. Cài đặt boot loader .................................................................................................. 31 3.2.2. Cài đặt Linux OS (porting) ..................................................................................... 32 3.2.3. Phát triển driver ...................................................................................................... 32 3.2.4. Xây dựng root file system (rootfs) .......................................................................... 32 3.2.5. Phát triển phần mềm ứng dụng .............................................................................. 32 3.3. CÂU HỎI VÀ BÀI TẬP ............................................................................................... 33 CHƯƠNG 4. LẬP TRÌNH NHÚNG TRÊN ARM ................................................................. 34 4.1. GIỚI THIỆU ARM STM32 ......................................................................................... 34 4.2. GIỚI THIỆU KIT ........................................................................................................ 36 4.2.1. Đặc tính của kit ........................................................................................................ 36 4.2.2 Đặc tính STM32F103RDT6 ..................................................................................... 37 4.2.3. Sơ đồ nguyên lý board ............................................................................................. 39 4.2.4 Hướng dẫn set jump cho board ............................................................................... 41 4.3. TẠO DỰ ÁN VỚI KEIL ARM ................................................................................... 46 4.3.1. Bộ thư viện CMSIS .................................................................................................. 46 4.3.2. Khởi tạo dự án mới .................................................................................................. 46 4.3.3. Cấu hình project ...................................................................................................... 49 4.3.4. Trình diễn ................................................................................................................. 51 4.4. CÁC BƯỚC NẠP CHƯƠNG TRÌNH ........................................................................ 51 4.5. LẬP TRÌNH NHÚNG TRÊN ARM ........................................................................... 54 4.5.1. Điều khiển LED đơn ................................................................................................ 54 4.5.2. Đọc trạng thái nút nhấn .......................................................................................... 58 4.5.3. Điều khiển LED 7 đoạn ........................................................................................... 59 4.5.4. LCD 16X2 4 bit ........................................................................................................ 62 4.5.5. Lập trình UART giao tiếp PC ................................................................................ 64 4.6. CÂU HỎI VÀ BÀI TẬP ............................................................................................... 70 TÀI LIỆU THAM KHẢO ........................................................................................................ 72 Chương 1. Tổng quan về hệ thống nhúng 1 CHƯƠNG 1. TỔNG QUAN VỀ HỆ THỐNG NHÚNG 1.1. KHÁI NIỆM VỀ HỆ THỐNG NHÚNG Hệ thống nhúng (Embedded system) là một thuật ngữ để chỉ một hệ thống có khả năng tự trị được nhúng vào trong một môi trường hay một hệ thống mẹ. Đó là các hệ thống tích hợp cả phần cứng và phần phềm để thực hiện một hoặc một nhóm chức năng chuyên biệt cụ thể. Hệ thống nhúng (HTN) thường được thiết kế để thực hiện một chức năng chuyên biệt nào đó. Khác với cac máy tính đa chức năng, chẳng hạn như may tính cá nhân, một hệ thống nhúng chỉ thực hiện một hoặc một vài chức năng nhất định, thường đi kèm với những yêu cầu cụ thể và bao gồm một số thiết bị máy móc và phần cứng chuyên dụng mà ta không tìm thấy trong một máy tính đa năng nói chung. Vì hệ thống chỉ được xây dựng cho một số nhiệm vụ nhất định nên các nhà thiết kế có thể tối ưu hóa nó nhằm giảm thiểu kích thước và chi phí sản xuất. Các hệ thống nhúng thường được sản xuất hàng loạt với số lượng lớn. HTN rất đa dạng, phong phú về chủng loại. Đó có thể là những thiết bị cầm tay nhỏ gọn như đồng hồ kĩ thuật số và máy chơi nhạc MP3, hoặc những sản phẩm lớn như đèn giao thông, bộ kiểm soát trong nhà máy hoặc hệ thống kiểm soát các máy năng lượng hạt nhân. Xét về độ phức tạp, hệ thống nhúng có thể rất đơn giản với một vi điều khiển hoặc rất phức tạp với nhiều đơn vị, các thiết bị ngoại vi và mạng lưới được nằm gọn trong một lớp vỏ máy lớn. Các thiết bị PDA hoặc máy tính cầm tay cũng có một số đặc điểm tương tự với hệ thống nhúng như các hệ điều hành hoặc vi xử lý điều khiển chúng nhưng các thiết bị này không phải là hệ thống nhúng thật sự bởi chúng là các thiết bị đa năng, cho phép sử dụng nhiều ứng dụng và kết nối đến nhiều thiết bị ngoại vi. Hình 1.1 Một số thiết bị nhúng thông dụng * Một số ví dụ điển hình về hệ thống nhúng Các hệ thống dẫn đường trong không lưu, hệ thống định vị toàn cầu, vệ tinh. Các thiết bị gia dụng: tủ lạnh, lò vi sóng, lò nướng, Các thiết bị kết nối mạng: router, hub, gateway, Các thiết bị văn phòng: máy photocopy, máy fax, máy in, máy scan, Chương 1. Tổng quan về hệ thống nhúng 2 Các thiết bị y tế: máy thẩm thấu, máy điều hòa nhịp tim, Các máy trả lời tự động Dây chuyền sản xuất tự động trong công nghiệp, robots. 1.2. LỊCH SỬ PHÁT TRIỂN CỦA HỆ THỐNG NHÚNG Hệ thống nhúng đầu tiên là Apollo Guidance Computer (Máy tính Dẫn đường Apollo) được phát triển bởi Charles Stark Draper tại phòng thí nghiệm của trường đại học MIT. Hệ thống nhúng được sản xuất hàng loạt đầu tiên là máy hướng dẫn cho tên lửa quân sự vào năm 1961. Nó là máy hướng dẫn Autonetics D-17, được xây dựng sử dụng những bóng bán dẫn và một đĩa cứng để duy trì bộ nhớ. Khi Minuteman II được đưa vào sản xuất năm 1996, D-17 đã được thay thế với một máy tính mới sử dụng mạch tích hợp. Tính năng thiết kế chủ yếu của máy tính Minuteman là nó đưa ra thuật toán có thể lập trình lại sau đó để làm cho tên lửa chính xác hơn, và máy tính có thể kiểm tra tên lửa, giảm trọng lượng của cáp điện và đầu nối điện. Từ những ứng dụng đầu tiên vào những năm 1960, các hệ thống nhúng đã giảm giá và phát triển mạnh mẽ về khả năng xử lý. Bộ vi xử lý đầu tiên hướng đến người tiêu dùng là Intel 4004, được phát minh phục vụ máy tính điện tử và những hệ thống nhỏ khác. Tuy nhiên nó vẫn cần các chip nhớ ngoài và những hỗ trợ khác. Vào những năm cuối 1970, những bộ xử lý 8 bit đã được sản xuất, nhưng nhìn chung chúng vẫn cần đến những chip nhớ bên ngoài. Vào giữa thập niên 80, kỹ thuật mạch tích hợp đã đạt trình độ cao dẫn đến nhiều thành phần có thể đưa vào một chip xử lý. Các bộ vi xử lý được gọi là các vi điều khiển và được chấp nhận rộng rãi. Với giá cả thấp, các vi điều khiển đã trở nên rất hấp dẫn để xây dựng các hệ thống chuyên dụng. Đã có một sự bùng nổ về số lượng các hệ thống nhúng trong tất cả các lĩnh vực thị trường và số các nhà đầu tư sản xuất theo hướng này. Ví dụ, rất nhiều chip xử lý đặc biệt xuất hiện với nhiều giao diện lập trình hơn là kiểu song song truyền thống để kết nối các vi xử lý. Vào cuối những năm 80, các hệ thống nhúng đã trở nên phổ biến trong hầu hết các thiết bị điện tử và khuynh hướng này vẫn còn tiếp tục cho đến nay. Cho đến nay, khái niệm hệ thống nhúng được nhiều người chấp nhận nhất là: hệ thống thực hiện một số chức năng đặc biệt có sử dụng vi xử lý. Không có hệ thống nhúng nào chỉ có phần mềm. 1.3. ĐẶC ĐIỂM HỆ THỐNG NHÚNG * Hệ thống nhúng là một hệ thống máy tính Hệ thống nhúng thường không phải là một khối riêng biệt mà là một hệ thống phức tạp nằm trong thiết bị mà nó điều khiển. * Có tài nguyên giới hạn Các hệ thống nhúng bị giới hạn nhiều hơn về phần cứng và chức năng phần mềm so với máy tính cá nhân. Giới hạn phần cứng có thể bao gồm giới hạn về khả năng xử lý, tiêu thụ điện năng, bộ nhớ, chức năng phần cứng, Còn giới hạn phần mềm thường liên quan đến việc hỗ trợ ít ứng dụng, ứng dụng bị thu gọn tính năng, không có hệ điều hành hoặc hệ điều hành có nhiều hạn chế. Tuy nhiên, ngày nay, những giới hạn này đã được khắc phục đáng kể bằng các hệ thống nhúng được thiết kế phức tạp và đầy đủ tính năng hơn. Phần mềm của hệ thống nhúng được lưu trữ trên các bộ nhớ ROM, Flash và được gọi là Firmware. Chương 1. Tổng quan về hệ thống nhúng 3 * Chuyên dụng Hệ thống nhúng được thiết kế để thực hiện một chức năng chuyên biệt nào đó. Đây là điểm khác biệt so với các hệ thống máy tính khác như máy tính cá nhân hoặc các siêu máy tính có thể thực hiện nhiều chức năng khác nhau với những phép tính phức tạp. Chuyên dụng giúp nâng cao tính dễ sử dụng và tiết kiệm tài nguyên. * Tương tác với thế giới thực Cảm nhận môi trường: cảm biến nhiệt độ, độ ẩm, ánh sáng, trọng lượng, cảm nhận bằng tín hiệu điện (máy dò nhiễu điện từ) Tác động trở lại môi trường (hú còi báo động khi phát hiện khói trong tòa nhà) Tốc độ tương tác phải đáp ứng thời gian thực (hệ thống còi báo hỏa, hệ thống chống trộm trên ô tô,) Có thể có hoặc không có giao diện giao tiếp với người dùng như máy tính cá nhân. Với những hệ thống đơn giản, thiết bị nhúng sử dụng LCD nhỏ, Joystick, LED, nút bấm, chỉ thị chữ hoặc số và thường đi kèm với một menu đơn giản. Hiện nay chúng ta cũng có thể kết nối đến hệ thống nhúng thông qua giao diện Web, việc này cho phép giảm thiểu chi phí cho màn hình nhưng vẫn cung cấp khả năng hiển thị và nhập liệu thuận tiện thuận tiện thông qua mạng và máy tính khác. * Yêu cầu chất lượng, ổn định và độ tin cậy cao Nhiều loại thiết bị nhúng có những yêu cầu rất cao về chất lượng, tính ổn định và độ tin cậy. Lỗi của hệ thống nhúng có thể gây ra tai nạn khủng khiếp: Hệ thống điều khiển máy bay, tên lửa, hệ thống điều khiển động cơ ô tôLỗi trên hệ thống nhúng có thể không sửa được (vd: vệ tinh nhân tạo), nếu sửa được thì chi phí cũng rất cao (thu hồi sản phẩm hoặc thiết kế lại toàn bộ) Vì vậy việc phát triển hệ thống nhúng yêu cầu quy trình kiểm tra – kiểm thử rất cẩn thận. Thông thường với những hệ thống yêu cầu độ ACTIVE cao thì việc trang bị 1 hệ thống dự phòng, backup là điều chắc chắn. 1.4. KIẾN TRÚC ĐIỂN HÌNH CỦA HỆ THỐNG NHÚNG Mỗi hệ thống nhúng đều có một kiến trúc thổng thể như sau: Hình 1.2 Kiến trúc tổng thể của hệ thống nhúng * Hardware Vi xử lý, bộ nhớ, tụ điện, điện trở, mạch tích hợp, bảng mạch in, connector, . Tất nhiên, đây là thành phần bắt buột phải có cho tất cả các hệ thống nhúng. Nói thêm về bộ vi xử lý trong Hệ thống nhúng: Chương 1. Tổng quan về hệ thống nhúng 4 Vi xử lý: Bộ xử lý được thiết kế riêng, chỉ bao gồm phần xử lý. Có thể thay đổi thêm bớt các thành phần ngoại vi một cách linh hoạt. Vi điều khiển: Được tích hợp các thành phần ngoại vi trên chip để giảm kích thước hệ thống. SoC (System on Chip): Một vi mạch tích hợp cao, hỗ trợ đa nhân xử lý và nhiều giao tiếp trên 1 chip. Giúp tăng tốc thời gian thiết kế hệ thống. Sử dụng như một mạch tích hợp cho ứng dụng cụ thể (ASIC) hoặc mạch logic khả trình (FPGA) * Phần mềm hệ thống Không bắt buộc phải có. Device driver: UART, Ethernet, ADC Hệ điều hành nhúng: eCos, ucLinux, VxWorks, Monta Vista Linux, BIOS, QNX Quản lý bộ nhớ, quản lý tiến trình, quản lý chia sẽ tài nguyên Có thể tái sử dụng trên một hệ thống nhúng khác * Phần mềm ứng dụng Không bắt buộc phải có. Quyết định hành vi (chức năng) của một hệ thống nhúng. Khó tái sử dụng trên một hệ thống nhúng khác. 1.5. PHÂN LOẠI HỆ THỐNG NHÚNG *Hệ thống phân phối và hệ thống không phân phối: Các hệ thống không phân phối ... trường phát triển chương trình) và còn có tên gọi là bộ biên dịch chéo (cross - compiler). Vì bộ biên dịch chạy trên một nền phần cứng để tạo ra mã chương trình chạy trên môi trường phần cứng khác. Việc sử dụng bộ biên dịch chéo này là một thành phần không thể thiếu trong quá trình phát triển phần mềm cho hệ nhúng. Các bộ biên dịch chéo thường có thể cấu hình để thực thi việc chuyển đổi cho nhiều nền phần cứng khác nhau một cách linh hoạt. Và việc lựa chọn cấu hình biên dịch tương ứng với các nền phần cứng đôi khi cũng khá độc lập với chương trình ứng dụng của bộ biên dịch. Kết quả đầu tiên của quá trình biên dịch nhận được là một dạng mã lệnh được biết tới với tên gọi là tệp đối tượng (object file). Nội dung của tệp đối tượng này có thể được xem như là một cấu trúc dữ liệu trung gian và thường được định nghĩa như một định dạng chuẩn COFF (Common Object File Format) hay định dạng của bộ liên kết mở rộng ELF (Extended Linker Format) Nếu sử dụng nhiều bộ biên dịch cho các modul mã nguồn của một chương trình lớn thì cần phải đảm bảo rằng các tệp đối tượng được tạo ra phải có chung một kiểu định dạng. Hầu hết nội dung của các tệp đối tượng đều bắt đầu bởi một phần header để mô tả các phần theo sau. Mỗi một phần sẽ chứa một hoặc nhiều khối mã hoặc dữ liệu như được sử dụng trong tệp mã nguồn. Tuy nhiên các khối đó được nhóm lại bởi bộ biên dịch vào trong các phần liên quan. Ví dụ như tất cả các khối mã được nhóm lại vào trong một phần được gọi là text, các biến toàn cục đã được khởi tạo (cùng các giá trị khởi tạo của chúng) vào trong phần dữ liệu, và các biến toàn cục chưa được khởi tạo vào trong phần bss. Cũng khá phổ biến thường có một bảng biểu tượng chứa trong nội dung của tệp đối tượng. Nó chứa tên và địa chỉ của tất cả các biến và hàm được tham chiếu trong tệp mã nguồn. Các phần chứa trong bảng này không phải lúc nào cũng đầy đủ vì có một số biến và hàm được định nghĩa và chứa trong các tệp mã nguồn khác. Chính vì vậy cần phải có bộ liên kết để thực thi xử lý vấn đề này. • Quá trình liên kết (Linking): Chương 2. Các thành phần của một hệ thống nhúng 26 Tất cả các tệp đối tượng nhận được sau bước thực hiện biên dịch đầu tiên đều phải được tổ hợp lại theo một cách đặc biệt trước khi nó được nạp và chạy ở trên môi trường phần cứng đích. Như đã thấy ở trên, bản thân các tệp đối tượng cũng có thể là chưa hoàn thiện vì vậy bộ liên kết phải xử lý để tổ hợp các tệp đối tượng đó với nhau và hoàn thiện nốt phần còn khuyết cho các biến hoặc hàm tham chiếu liên thông giữa các tệp mã nguồn được biên dịch độc lập. Kết quả đầu ra của bộ liên kết là một tệp đối tượng mới có chứa tất cả mã và dữ liệu trong tệp mã nguồn và cùng kiểu định dạng tệp. Nó thực thi được điều này bằng cách tổ hợp một cách tương ứng các phần text, dữ liệu và phần bss từ các tệp đầu vào và tạo ra một tệp đối tượng theo định dạng mã máy thống nhất. Trong qúa trình bộ liên kết thực hiện tổ hợp các phần nội dung tương ứng nó còn thực hiện thêm cả vấn đề hoàn chỉnh các địa chỉ tham chiếu của các biến và hàm chưa được đầy đủ trong bước thực hiện biên dịch. Các bộ liên kết có thể được kích hoạt thực hiện độc lập với bộ biên dịch và các tệp đối tượng được tạo ra bởi bộ biên dịch được coi như các tham biến vào. Đối với các ứng dụng nhúng nó thường chứa phần mã khởi tạo đã được biên dịch cũng phải được gộp ở trong danh sách tham biến vào này. Nếu cùng một biểu tượng được khai báo hơn một lần nằm trong một tệp đối tượng thì bộ liên kết sẽ không thể xử lý. Nó sẽ kích hoạt cơ chế báo lỗi để người phát triển chương trình xem xét lại. Hoặc khi một biểu tượng không thể tìm được địa chỉ tham chiếu thực trong toàn bộ các tệp đối tượng thì bộ liên kết sẽ cố gắng tự giải quyết theo khả năng cho phép dựa vào các thông tin ví dụ như chứa trong phần mô tả của thư viện chuẩn. Điều này cũng thường hoặc có thể gặp với trường hợp các hàm tham chiếu trong chương trình. Rất đáng tiếc là các hàm thư viện chuẩn thường yêu cầu một vài thay đổi trước khi nó có thể được sử dụng trong chương trình ứng dụng nhúng. Vấn đề ở đây là các thư viện chuẩn cung cấp cho các bộ công cụ phát triển chỉ dừng đến khả năng định dạng và tạo ra tệp đối tượng. Hơn nữa chúng ta cũng rất ít khi có thể truy nhập được vào mã nguồn của các thư viện chuẩn để có thể tự thay đổi. Hiện nay cũng có một số nhà cung cấp dịch vụ phần mềm hỗ trợ công cụ chuyển đổi hay thay đổi thư viện C chuẩn để ứng dụng cho các ứng dụng nhúng, ví dụ như Cygnus. Gói phần mềm này được gọi là newlib và được cung cấp miễn phí. Chúng ta có thể tải về trang web của Cygnus. Nó sẽ hỗ trợ chúng ta giải quyết vấn đề mà bộ liên kết có thể gặp phải khi chương trình sử dụng các hàm thuộc thư viện C chuẩn. Sau khi đã hợp nhất thành công tất cả các thành phần mã và phần dữ liệu tương ứng cũng như các vấn đề về tham chiếu tới các biểu tượng chưa được thực thi trong quá trình biên dịch đơn lẻ, bộ liên kết sẽ tạo ra một bản sao đặc biệt của chương trình có khả năng định vị lại (relocatable). Hay nói cách khác, chương trình được hoàn thiện ngoại trừ một điều: Không có địa chỉ bộ nhớ nào chưa được gán bên trong các phần mã và dữ liệu. Nếu chúng ta không phải là đang phát triển phần Chương 2. Các thành phần của một hệ thống nhúng 27 mềm cho hệ nhúng thì quá trình biên dịch có thể kết thúc tại đây. Tuy nhiên, với hệ nhúng ngay cả hệ thống nhúng đã bao gồm cả hệ điều hành chúng ta vẫn cần phải có một mã chương trình (image) nhị phân được định vị tuyệt đối. Thực tế nếu có một hệ điều hành thì phần mã và dữ liệu cũng thường gộp cả vào bên trong chương trình có khả năng định vị lại. Toàn bộ ứng dụng nhúng bao gồm cả hệ điều hành thường liên kết tĩnh với nhau và thực hiện như một mã chương trình nhị phân thống nhất. • Quá trình định vị (Locating) Công cụ thực hiện việc chuyển đổi một chương trình có khả năng định vị lại thành một dạng mã chương trình nhị phân có thể thực thi được gọi là bộ định vị. Nó sẽ đảm nhiệm vai trò của bước đơn giản nhất trong các bước thực thi biên dịch nói chung. Thực tế chúng ta phải tự làm hầu hết công việc của bước này bằng cách cung cấp thông tin về bộ nhớ đã được cấu hình trên nền phần cứng mà chúng ta đang phát triển và đó chính là tham số đầu vào cho việc thực thi của bộ định vị. Bộ định vị sẽ sử dụng thông tin này để gán các địa chỉ vật lý cho mỗi phần mã lệnh và dữ liệu bên trong chương trình được thực thi mà có thể định vị lại. Tiếp theo nó sẽ tạo ra một tệp có chứa chương trình bộ nhớ nhị phân để có thể nạp trực tiếp vào bộ nhớ chương trình trên nền phần cứng thực thi. Trong nhiều trường hợp bộ định vị là một chương trình khá độc lập với các phần công cụ khác trong hệ thống phần mềm phát triển. Tuy nhiên trong các bộ công cụ phát triển GNU chức năng này được tích hợp luôn trong bộ liên kết. Tuy nhiên không nên nhầm lẫn về chức năng của chúng trong quá trình thực thi biên dịch. Thông thường chương trình chạy trên các máy tính mục đích chung thì hệ điều hành sẽ thực hiện việc chuyển đổi và gán chính xác địa chỉ thực cho các phần mã và dữ liệu trong chương trình ứng dụng, còn với chương trình phát triển chạy trên hệ nhúng thì việc này phải được thực hiện bởi bộ định vị. Đây cũng chính là điểm khác biệt cơ bản khi thực hiện biên dịch một chương trình ứng dụng cho hệ nhúng. Thông tin về bộ nhớ vật lý của hệ thống phần cứng phát triển mà cần phải cung cấp cho bộ định vị GNU phải được định dạng theo kiểu biểu diễn của bộ liên kết. Thông tin này đôi khi được sử dụng để điều khiển một cách chính xác thứ tự trong các phần mã chương trình và dữ liệu bên trong chương trình có thể định vị lại. Nhưng ở đây chúng ta cần phải thực hiện nhiều hơn thế, tức là phải thiết lập chính xác khu vực của mỗi phần trong bộ nhớ. 2.4. CÂU HỎI VÀ BÀI TẬP 1. Nêu các thành phần phần cứng thường có trong một hệ thống nhúng. 2. Bộ vi xử lý có thể đƣợc tổ chức theo những kiến trúc nào, đặc điểm của mỗi loại kiến trúc đó. 3. Nêu cấu trúc, nguyên lý hoạt động và các loại bộ nhớ Ram. 4. Nêu cấu trúc, nguyên lý hoạt động và các loại bộ nhớ Rom. Chương 2. Các thành phần của một hệ thống nhúng 28 5. Trình bày phương pháp quản lý bộ nhớ trong hệ thống nhúng. 6. Nêu sự khác nhau giữa vào ra nối tiếp và vào ra song song. 7. Phân tích đặc điểm, vị trí và chức năng của hệ thống BUS. 8. Trình bày về hệ điều hành trong hệ thống nhúng. 9. Trình bày về trình điều khiển thiết bị. 10. Trình bày về trình điều khiển ngắt. 11. Trình bày về trình điều khiển bộ nhớ. 12. Trình bày về trình điều khiển bus. Chương 3. Thiết kế và cài đặt hệ thống nhúng 29 CHƯƠNG 3. XÂY DỰNG HỆ THỐNG NHÚNG Để xây dựng hệ thống embedded Linux, chúng ta phải trải qua nhiều công đoạn. Nếu đi đúng hướng thì chúng ta có thể rút ngắn nhiều thời gian. Công đoạn thiết kế chia ra thành 2 phần, bao gồm phần cứng và phần mềm. Nếu là cá nhân thì có thể làm tuần tự từ hardware đến software, nếu làm việc theo nhóm thì có thể đi song song. Một điều quan trọng đối với kỹ sư phần cứng là: thiết kế phải thỏa mãn mối tương quan giữa phần cứng và phần mềm. Có nghĩa là giữa hardware và software phải được đồng bộ trong quá trình thiết kế. Nếu kỹ sư phần cứng có thêm 1 chút kiến thức nhất định về phầm mềm thì công việc sẽ tiến triển thuận lợi hơn, và ngược lại, kỹ sư phần mềm biết chút ít về phần cứng thì việc viết các chương trình ứng dụng sẽ trở nên trôi chảy. 3.1. CÁC BƯỚC XÂY DỰNG PHẦN CỨNG 3.1.1. Lựa chọn kiến trúc CPU Có rất nhiều kiến trúc CPU được support bởi Linux OS ví dụ như: ALPHA, ARM, SH, MIP, POWER PC... Tuy nhiên, chúng ta sẽ tập trung kiến trúc ARM. Hình 3.1 ARM’s Opportunity 3.1.2. Lựa chọn CPU vendor Sau khi lựa chọn cấu trúc CPU, ta sẽ lựa chọn sản phẩm CPU từ các nhà sản xuất chíp. Hiện nay trên thế giới có nhiều hãng khác nhau, bao gồm: TI, SAMSUNG, Marvell, Freescale, NXP, ATMEL... Theo mình thì chúng ta nên khởi đầu với sản phẩm của hãng nào có cộng đồng phát triển mã nguồn mở mạnh, có khả năng cấp tài liệu miễn phí (bao gồm cho cá nhân thay vì chỉ dành riêng cho công ty, doanh nghiệp). Việc lựa chọn này có ảnh hưởng đến khả năng thành công của dự án. 3.1.3. CPU được support bởi hệ điều hành nào Sau khi lựa chọn CPU vendor, chúng ta sẽ có được danh sách CPU trong 1 dòng sản phẩm. Điều đầu tiên ta cần xác định rõ CPU này được hỗ trợ bởi hệ điều hành nào, và có phù hợp với hệ điều hành mà chúng ta cần phát triển hay không. Ví dụ cho hệ điều hành Linux: CPU cần có MMU (Memory Management Unit) và Chương 3. Thiết kế và cài đặt hệ thống nhúng 30 hỗ trợ bus bộ nhớ ngoài. Ngoài ra chúng ta cần xem xét đến tốc độ CPU, các ngoại vi cần phải có trong hệ thống... Và cuối cùng là giá thành của CPU như thế nào, có sẵn trên thị trường hay không. 3.1.4. Tìm hiểu đặc tả, cơ chế boot của CPU Hình 3.2 Components of a Typical Embedded System Công việc đầu tiên của kỹ sư thiết kế hardware sẽ không loại trừ việc đọc datasheet và tìm hiểu các tài liệu đặc tả cho CPU này: + Cấu hình chân của CPU (package type): Cái này rất quan trọng đối với trường hợp VN chúng ta. Năng lực sản xuất PCB trong nước là có hạn, vì thế việc lựa chọn cấu hình chân CPU sẽ trở nên khó khăn và eo hẹp hơn. + Cơ chế boot của CPU: Trước tiên xâu dựng dự án, cơ chế boot của CPU là phần cực kỳ quan trọng mà chúng ta cần phải xem xét đến. Thông thường thì các đặt tả từ nhà sản xuất đề cập đến vấn đề này. Khi có đầy đủ thông tin về cơ chế này, người thiết kế phần cứng sẽ có quyết định lựa chọn linh kiện nào phù hợp cho từng kiểu boot. Ví dụ: NAND Flash, NOR FLash, SPI Dataflash, I2C EEPROM, MMC... 3.1.5. Xây dựng sơ đồ nguyên lý cho hệ thống Để có được schematic hoàn chỉnh cho hệ thống, chúng ta cần tập hợp thông tin từ các CPU vendor càng nhiều càng tốt, bao gồm các tài liệu về schematic check list, CPU user manual, design application note... 3.1.6. Thiết kế PCB Công đoạn thiết PCB tốn nhiều công sức, khi layout cần chú ý đến các đường bus giao tiếp bộ nhớ ngoài, các tụ trở mạch lọc cho PLL, các tụ lọc nguồn cho CPU. Chương 3. Thiết kế và cài đặt hệ thống nhúng 31 Hình 3.3 The board CAD layout with layers merged 3.2. CÁC BƯỚC XÂY DỰNG PHẦN MỀM Tương tự phần cứng, việc xây dựng phần mềm cũng được chia ra nhiều công đoạn: 3.2.1. Cài đặt boot loader Thông thường các hãng sản xuất chíp cung cấp cho chúng ta mã nguồn, công cụ để xây dựng boot loader. Đa số các CPU được sản xuất với ROM on chip và được cài sẵn chương trình boot. Tuy nhiên, thông thường những chương trình này ko đủ khả năng boot được Linux OS, người thiết kế hệ thống cần phải kết hợp chương trình này với các thiết bị lưu trữ (được nêu ở trên) để thực hiện những chương trình boot có tính năng mạnh hơn. Tùy vào loại CPU khác nhau mà ta phải trải qua 2 hay 3 tầng boot loader để khởi động được Linux OS. Ví dụ như MPU AT91SAM9 của ATMEL có 3 tầng bootloader: ROM boot ---> AT91BootStrap - ---> u-boot. Chương 3. Thiết kế và cài đặt hệ thống nhúng 32 Hình 3.4 Boot sequence 3.2.2. Cài đặt Linux OS (porting) Thành phần nồng cốt của Linux OS là kernel, về bản chất nó chỉ là các mã lệnh chương trình thực thi trên CPU. Tuy nhiên, kernel giữ vai trò quản lý các tiến trình hoạt động trong hệ thống. Kernel Linux được xây dựng bởi code C và một số ASM cho từng loại kiến trúc CPU cụ thể. Source code của kernel được quản lý bởi tổ chức phát triển mã nguồn mở Linux, chúng ta có thể download miễn phí tại www.kernel.org. Tuy nhiên, khi ta xây dựng phần cứng mới thì không hẳn có thể chạy được Linux OS, bởi vì can phải đảm bảo mối tương quan giữa phần cứng và kernel. Thông thường các CPU vendor xây dựng phần cứng chuẩn được gọi là evaluation kit. Họ sẽ chỉnh sửa source kernel (startup code, driver...) để board có thể vận hành được Linux OS. Thao tác này theo thuật ngữ người ta gọi là porting. Kết quả của việc porting tạo ra các bản vá (patch). 3.2.3. Phát triển driver Source kernel Linux bao gồm tập hợp các driver đã viết sẵn và được chuẩn hóa thành tài liệu. Tuy nhiên, người phát triển có thể tự viết driver cho riên mình để phù hợp với nhu cầu của dự án. Linux kernel hỗ trợ cho việc phát triển driver theo 2 dạng: built-in hoặc là module. 3.2.4. Xây dựng root file system (rootfs) Khung sườn của hệ điều hành Linux là rootfs. Đây là tập hợp những chương trình ứng dụng, các tiện ích của hệ điều hành. Chúng ta có thể xây dựng rootfs từ nhiều nguồn khác nhau: OpenEmbedded (Angstrom), LTIB, Buildroot, Debian... 3.2.5. Phát triển phần mềm ứng dụng Chương 3. Thiết kế và cài đặt hệ thống nhúng 33 Linux OS cung cấp cho chúng ta tập hợp thư viện rất phong phú cho nhiều lĩnh vực khác nhau: mạng, đồ họa, image processing, telecom... Người phát triển phần mềm sẽ dùng những thư viện này và viết chương trình theo mong muốn. Hình 3.5 Architecture of the GNU/Linux operating system 3.3. CÂU HỎI VÀ BÀI TẬP 1. Liệt kê các bước trong quá trình thiết kế hệ thống nhúng 2. Mô tả các bước trong quá trình thiết kế hệ thống nhúng 3. Liệt kê các bước trong quá trình cài đặt và thử nghiệm hệ thống nhúng 4. Mô tả các bước trong quá trình cài đặt và thử nghiệm hệ thống nhúng
File đính kèm:
- giao_trinh_he_thong_nhung_phan_1.pdf