Bài giảng Xây dựng các Hệ thống nhúng
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Xây dựng các Hệ thống nhúng", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- bai_giang_xay_dung_cac_he_thong_nhung.pdf
Nội dung text: Bài giảng Xây dựng các Hệ thống nhúng
- Xây dựng các Hệ thống nhúng HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG Khoa Công nghệ thông Tin Bộ môn Khoa học máy Tính XÂY DỰNG CÁC HỆ THỐNG NHÚNG PTIT Hà Nội, tháng 11 năm 2013 (bản sửa và bổ sung) 1
- Xây dựng các Hệ thống nhúng Lời nói đầu Dạy và học hệ thống nhúng là đề cập tới một chủ đề có phạm vi rộng bao gồm thiết kế, môi trường ứng dụng, loại hình công nghệ, qui tắc cần thiết để tiếp cận một cách có hệ thống. Lĩnh vực thiết kế và ứng dụng các hệ thống nhúng bao gồm : các hệ thống vi điều khiển (micro- controller) nhỏ và đơn giản, các hệ thống điều khiển, hệ thống nhúng phân tán, hệ thống trên chip, mạng máy tính (có dây và không dây), các hệ thống PC nhúng, các hệ thống ràng buộc thời gian, robotic, các thiết bị ngoài của máy tính, xử lý tín hiệu, hệ thống lệnh và điều khiển Nền tảng công nghệ hiện đại là kỹ thuật vi điện tử với mật độ tích hợp lớn và rất lớn. Khi muốn thiết kế hệ thống nhúng, có nhiều yếu tố cần tuân thủ giống như khi thiết kế máy tính, nhưng lại bị ràng buộc bởi đặc thù ứng dụng. Thêm vào đó là sự đan chéo của các kỹ năng rất cần thiết cho thiết kế hệ thống nhúng, độc lập vận hành, thiết kế với tiêu chí tiêu hao năng lượng thấp, công nghệ phần cứng, công nghệ phần mềm (hệ thống và ứng dụng), hệ thời gian thực, tương tác người máy và đôi khi cả vấn đề an ninh hệ thống. Như vậy đào tạo và học hệ thống nhúng cần một khối lượng kiến thức tập hợp ít nhất từ các bộ môn khác như khoa học máy tính (computer science), khoa học truyền thông (communication), kỹ thuật thiết kế điện tử: các mạch tương tự và số, sử dụng tốt các phần mềm thiết kế bo mạch (như Protel, Proteus, DXP ), kiến thức về chế tạo bán dẫn. Vì là bộ môn công nghệ có tính ứng dụng cao với bài toán cụ thể, nên lại cần có chuyên môn của ngành nghề, mà ở đó hệ thống nhúng sẽ ứng dụng. Tóm lại đây là một chủ đề hợp nhất và việc thực hiện chủ đề này thực không dễ dàng. Với lượng thời gian nhất định, môn học XÂY DỰNG CÁC HỆ THỐNG NHÚNG sẽ mang lại cho người học những vấn đề cơ bản nhất về hệ thống nhúng ở Chương 1. Chương 2 đề cập tới kiến trúc phần cứng hệ thống, cách thiết kế một số khối chức năng cơ sở có tính thực tế cao. Chương 3 chủ yếu giới thiệu về phần mềm cài đặt trên hệ thống nhúng, bao gồm các trình điều khiển thiết bị, các phần mềm trungPTIT gian, và phần mềm hệ thống được cài đặt . Đặc biệt nhắc lại một số yêu cầu về khái niệm của các hệ thống thời gian thực và hệ điều hành thời gian thực. Chương 4 giới thiệu các tiêu chí và phương pháp thiết kế hệ thông nhúng. Cuối chương là một số các bài tập lớn kiểu Dự án thiết kế, có thể lựa chọn cho thực hành với các kiểu kiến trúc hệ thống nhúng khác nhau. Như đã nêu, đây là chủ đề rộng, mang tính kỹ thuật và kiến thức lại được tổng hợp từ các môn khác, nên tài liệu này chắc không thể thật sự đầy đủ. Các phần kiến thức nào không được đề cập sâu ở đây, người học cần tham khảo thêm các tài liệu khác, hay từ các môn học liên quan. Tác giả xin chân thành cám ơn các cán bộ, giảng viên Khoa Công nghệ thông tin và bộ môn Khoa học máy tính, Học viện Công nghệ BCVT Hà Nội đã góp ý để tác giả hoàn thành giáo trình. Tác giả cũng xin đón nhận các ý kiến đóng góp, phê bình từ người đọc, người học, sao cho tài liệu này có ích hơn. Địa chỉ theo e-mail: htcuoc@ioit.ac.vn. 2
- Xây dựng các Hệ thống nhúng Hà Nội, tháng 10 năm 2013 Huỳnh Thúc Cước, Viện Công nghệ thông tin, VAST, 18, Hoàng Quốc Việt, Hà Nội. PTIT 3
- Xây dựng các Hệ thống nhúng Lời nói đầu 2 Một số chữ viết tắt 7 Danh sách các hình vẽ 9 Chương 1. GIỚI THIỆU CHUNG VỀ CÁC HỆ THỐNG NHÚNG 15 1.1 KHÁI NIỆM VỀ HỆ THỐNG NHÚNG (HTN) 15 1.2 ĐẶC ĐIỂM CỦA HTN 15 1.3 CÁC YÊU CẦU VỚI HTN 18 1.4 MÔ HÌNH TỔNG THỂ HTN 19 1.4.1 Mô hình cấu trúc phần cứng của máy tính 19 1.4.2 Kiến trúc của CPU 23 1.4.3 Mô hình tổng quát của một HTN 25 1.4 PHÂN LOẠI HTN 27 1.5 KẾT CHƯƠNG 32 1.6 CÂU HỎI CUỐI CHƯƠNG 33 Chương 2. CÁC THÀNH PHẦN PHẦN CỨNG CỦA HỆ THỐNG NHÚNG 34 2.1 BỘ XỬ LÍ TRUNG TÂM (Central Processing Unit-CPU) 34 2.2.1 Các loại CPU và nguyên lí hoạt động 34 2.2.2 Ví dụ về một CPU và nguyên lí hoạt động 35 2.2 CPU 8085 VÀ HỆ THỐNG BUS 44 2.2.1 Khái niệm và bản chất vPTITật lý của các BUS 45 2.2.2 Khuyếch đại BUS (bus driver) 47 2.2.3 Bus đồng bộ (Synchronous bus): 48 2.2.4 Bus không đồng bộ (Asynchronous bus) 50 2.2.5 Trọng tài BUS (bus arbitration) 51 2.2.6 Bus mở rộng (Expansion bus) EISA, MCA, Bus cục bộ, PCI 54 2.2.7 Bus SPI (Serial Peripheral Interface ) 55 2.2.8 Bus I2C (Inter-Integrated Circuit) 56 2.2.9 Thực hiện kĩ thuật của BUS 62 2.3 BO MẠCH một HTN VỚI CẤU HÌNH TỐI THIỂU 66 2.4 HTN VỚI CÁC CPU KHÁC NHAU 69 2.4.1 CPU đa năng 16 bit 69 2.4.2 Bo mạch với CPU HARVARD (microcontroller Unit-MCU) họ Intel 8051/8052/8xC25173 4
- Xây dựng các Hệ thống nhúng 2.4.3 Vi mạch Hệ thống khả trình trong một Chip (Programmable System on chip-PsoC) và Máy tính thông minh khả trình (Programmable Intelligent Computer-PIC) 84 2.5 BỘ NHỚ VÀ THIẾT KẾ BỘ NHỚ 98 2.5.1 Một số thông số chính của mạch nhớ 99 2.5.2 Phân loại bộ nhớ 101 2.5.3 Phân cấp bộ nhớ 108 2.5.4 Tổ chức bộ nhớ vật lý và thiết kế bộ nhớ 110 2.6 GHÉP NỐI VỚI THIẾT BỊ NGOẠI VI 121 2.6.1 Tổng quan 121 2.6.2 Ghép nối CPU chủ động 125 2.6.3 Ghép nối I/O chủ động 130 2.6.4 Cổng vào/ra 144 2.6.5 Ghép nối với tín hiệu tương tự (analog signal) 150 2.6.6 Biến đổi tương tự thành số (số hóa) 152 2.6.7 Biến đổi số thành tương tự (DAC) 153 2.7 KẾT CHƯƠNG 153 2.8 CÂU HỎI VÀ BÀI TẬP 153 2.8.1 Câu hỏi cuối chương 153 2.8.2 Bài tập cuối chương 154 Chương 3. CÁC THÀNH PHẦN PHẦN MỀM CỦA HỆ THỐNG NHÚNG 156 3.1 TRÌNH ĐIỀU KHIỂN THIPTITẾT BỊ ( viết tắt: TĐKTB) 156 3.1.1 Tổng quan 156 3.1.2 Các loại TĐKTB 160 3.1.3 3.1.3 Hoạt động của TĐKTB 161 3.1.4 Phát triển TĐKTB 161 3.1.5 Một số ví dụ về TĐKTB 163 3.2 HỆ THỐNG NHÚNG THỜI GIAN THỰC 165 3.2.1 Hệ điều hành đa nhiệm (multitasking) 165 3.2.2 Hệ thống thời gian thực 184 3.2.3 Hệ điều hành thời gian thực (RTOS) 189 3.2.4 Hệ thời gian thực không có hệ điều hành thời gian thực 195 3.3 PHẦN MỀM TRUNG GIAN (middleware) 198 3.4 PHẦN MỀM ỨNG DỤNG 200 5
- Xây dựng các Hệ thống nhúng 3.5 KẾT CHƯƠNG 201 3.6 CÂU HỎI CUỐI CHƯƠNG 201 Chương 4 THIẾT KẾ VÀ CÀI ĐẶT CÁC HỆ THỐNG NHÚNG 203 4.1 THIẾT KẾ HỆ THỐNG 203 4.1.1 Các nền tảng cơ bản khi xây dựng kiến trúc HTN 207 4.1.2 Phân hoạch thiết kế phần cứng, phần mềm 211 4.1.3 Xây dựng bo mạch khi phát triển hệ thống 217 4.2 CÀI ĐẶT VÀ THỬ NGHIỆM HTN 221 4.2.1 Chọn CPU cho thiết kế 221 4.2.2 Bộ nhớ cho HTN 223 4.2.3 Ghép nối với thiết bị 225 4.2.4 Phát triển phần mềm cho HTN 225 4.2.5 Gở rối và mô phỏng 235 4.2.6 Phát triển HTN 240 4.2.7 Ví dụ phát triển HTN 266 4.3 KẾT CHƯƠNG 267 4.4 CÂU HỎI CUỐI CHƯƠNG 267 TÀI LIỆU THAM KHẢO 267 PHỤ LỤC Các ví dụ 270 PTIT 6
- Xây dựng các Hệ thống nhúng Một số chữ viết tắt CPU Central Processing Unit Đơn vị xử lý trung tâm ROM Read Only Memory Bộ nhớ chi đọc EPROM Erasable programmable read-only Bộ nhớ chỉ đọc, xóa và lập trình lại được memory RAM Random Access Memory bộ nhớ truy cập ngẫu nhiên non-volatile computer storage Bộ nhớ bán dẫn không bị mất nội dung ngay cả khi không cung cấp nguồn nuôi FLASH (memory cards, USB flash drives, solid-state drives -SSD) OS Operating System Hệ điều hành RTOS Real Time Operating System Hệ điều hành thời gian thực ES Embedded System Hệ thống nhúng HTN Embedded System Hệ thống nhúng OS hay HĐH Operating System Hệ Điều Hành TĐKTB Device Driver Trình điều khiển thiết bị PLC Programmable Logic Controller bộ điều khiển logic khả trình PIC Programmable IntelligentPTIT Máy tính khả trình thông minh Computer PSoC Programmable System - on - Chip Hệ thống khả trinh trên vi mạch ASIC Application-Specific Integrated ASIC là một vi mạch được thiết kế dành cho một Circuit ứng dụng cụ thể theo yêu cầu cá biệt MCU Microcontroller Unit Vi điều khiển CICS Complex Instruction Set Tập lệnh đầy đủ RISC Reduced Instruction Set Tập lệnh rút gọn SPI Serial Peripheral Interface Đường liên kết dữ liệu nối tiếp, đồng bộ, hoạt động theo kiểu Chủ/tớ (Master/Slave) I2C Inter-Integrated Circuit Bus dùng để nối giữa các vi mạch điện tử 7
- Xây dựng các Hệ thống nhúng USART Universal Serial Aynchronous Bộ thu/phát nối tiếp di bộ đa năng Receiver/Transmitter ISR Interrupt Service Routine Chương trình con xử lí ngắt hay Dịch vụ xử lí ngắt MAC Media Access Control Điều khiển truy nhập môi trường (mạng máy tính). Ví dụ: MAC address: Địa chỉ vật lí của thiết bị mạng. MIPS Million instructions per second Triệu lệnh máy trong một giây Integrated Development Là tập các phần mềm hổ trợ các công cụ, tiện ích Environment, hoặc: đê phát triển phần mềm máy tính, bao gồm: Integrated Design Environment Soạn thảo mã nguồn, trình thông dịch, trình biên IDE dịch, trình gở rối hoặc: Integrated Debugging Environment Là loại thiết bị phần cứng dùng để gở rối khi phát triển phần cứng và phần mềm hợp nhất, như HTN. ICE In-Circuit Emulator Vid dụ như Logic anlyzer, phần mềm MPLAB của Microchip PTIT 8
- Xây dựng các Hệ thống nhúng Danh sách các hình vẽ Hình 1.1 Mô hình tổng quát bo mạch chủ Hình 1.2 Nguồn nuôi cho hệ máy tính Hình 1.3 HTN xây dựng từ xây dựng từ vi xử lý(Microprocessor-based) và vi điều khiển (microcontroller based) Hình 1.4 Microcontroller và các thành phần cơ bản, BUS kết nối bên trong.Tất cả trong một chip Hình 1.5 Hai kiểu HTN với 2 loại kiến trúc CPU Hình1.6 Havard CPU ARM 920T của Amtel Hình 1.7 Mô hình tổng quát HTN-Mô hình với các khối chức năng Hình 1.8 Một cách nhìn khác về mô hình tổng quát HTN:Với các khối ngoại vi và phần mềm Hình 1.9 Kiến trúc trừu tương HTN Hình 1.10 Sơ đồ khối CPU DSP-MP3. Hình 1.11 Bộ MP3 với CPU BlackFin của ANALOG DEVICES Hình 1.12 Một số HTN thương mại Hình 2.1 Intel CPU 8085 Hình 2.2 Các khối chức năng của CPU 8080/8085 Hình 2.3 Các khái niện qui chiếuPTIT theo CPU Clock Hình 2.4 Lưu đồ thời gian cơ sở của CPU 8085 (Theo tài liệu của hãng Intel) Hình 2.5 Biểu đồ thời gian của chu kì tìm lệnh. Hình 2.6 Cấu hình tối thiểu: CPU 8085 và tạo BUS hệ thống Hình 2.7 CPU Bus và BUS hệ thống Hình2.8 Chu kì đọc đồng bộ Hình 2.9 BUS không đồng bộ, hoạt động đồng bộ bởi “đối thoại” giữa các tín hiệu điều khiển Hình 2.10 BUS chuỗi quay vòng (daisy chaining) Hình 2.11 Trọng tài BUS Hình 2.12 Trọng tài Bus không tập trung trong multibus Hình 2.13 Liên kết qua bus SPI Hình 2.14 Liên kết qua bus I2C 9
- Xây dựng các Hệ thống nhúng Hình 2.15 Nguyên lí nối BUS I2C Hình 2.16 Ghi/đọc trên BUS I2C Hình 2.17 Ví dụ dữ liệu thu/phát trên BUS I2C Hình 2.18 Các mạch logic thường dùng trong thiết kế kĩ thuật số Hình 2.19 Các kiểu nối đầu ra, đầu ra trở kháng cao Hình 2.20 Vi mạch 3 trạng thái: hai trạng thái logic và trạng thái thứ 3 HZ: đầu ra bị “tách” khỏi BUS. Hình 2.21 Mạch chốt (hay nhớ, gữi lại) kiểu D, làm việc theo mức hay sườn lên của xung đồng hồ CK. (Xem thêm chi tiết mach SN 7474). Hình2.22 Chốt 4 bit với D-Flip/flop Hình 2.23 Cổng khuyếch đại (driver) chốt hai chiều Hình 2.24 Cấu hình tối thiểu bo mạch CPU 8085, RAM/ROM/Ports Hình 2.25 Mạch in cho hình 2.24 Hình 2.26 CPU Intel x86 Hình 2.27 Bo mạch với tối thiểu với CPU 8086:BUS controller, Ngắt controller, RAM Hình 2.28 CPU 8086 timing: lệnh đọc Hình 2.29 Mô hình kiến trúc Havard: BUS cho bộ nhớ chương trình: Code Bus và Code Address; BUS cho RAM dữ liPTITệu: Data Bus và Data Address; SRC1, SRC2:nguồn, DST: đích, là các Bus nội bộ. Hình 2.30 Các khối chức năng của CPU 8051/8052 Hình 2.31 CPU 8051: EEPROM, RAM bên trong và khả năng mở rộng bộ nhớ tới 128 KB (64 KB code+64 KB data) Hình 2.32 Bo mạch với CPU 8051/8052 Hình 2.33 Các khối chức năng của nhân 8XC251Sx Hình 2.34 CPU 8051 Hình 2.35 Phân hoạch địa chỉ trong CPU 8051 Hình 2.36 Bo mạch với CPU Intel 8051 và RAM, ROM mở rộng bên ngoài. Hình 2.37 Mô hình một vi điều khiển kiểu PSoC hay PIC kiểu Vi xử lí trong một Chip (Microprocessor-based system on a chip) 10
- Xây dựng các Hệ thống nhúng Hình 2.38 Vi điều khiển PSoC CY8C29466 Hình 2.39 Bố trí võ-chân PIC 12F675 Hình 2.40 Mô hình khối chức năng PIC12F629/675 Hình 2.41 Vi điều khiển PIC 16F882/883/88 Hình 2.42 Cách tạo bit nhớ cố định bằng công tắc cơ học hay diode bán dẫn Hình 2.43 Mô hình đầu vào/ra của phần tử nhớ Hình 2.44 Cách tổ chức 1 đơn vị nhớ chuẩn (1 byte) từ các phần tử 1 bit, 4bit và 8 bit Hình 2.45 Phân loại bộ nhớ Hình 2.46 Các loại bộ nhớ ROM Hình 2.47 Các loại RAM Hình 2.48 1 phần tử RAM tĩnh Hình 2.49 1 chip RAM 32K x 8 (32K byte) Hình 2.50 Phần tử DRAM, 1 bit DRAM và ma trận DRAM Hình 2.51 Các cách ghi/đọc/làm tươi của DRAM Hình 2.52 Phân cấp bộ nhớ Hình 2.53 Mô hình hoạt động của RAM cache Hình 2.54 Sơ đồ võ ngoài một vi mạch (chip) nhớ (pin-out) Hình 2.55 Sơ đồ khối chức năng bên trong chip 16K x 1 bit Hình 2.56 Sơ đồ thiết kế băng nhớ SRAM 16K x 8, với Chip 16Kx1 Hình 2.57 Sơ đồ khối chức năngPTIT của 1 chip DRAM thương mại 4164Kb Hình 2.58 Quan hệ các tín hiệu điều khiển DRAM 4164x1 thương mại. Hình 2.59 CPU 8080/8085 Module DRAM 64 KB toàn phần Hình 2.62 Ví dụ về cách phân bố bộ nhớ trong máy tính PC Hình 2.63 Mô hình kĩ thuật ghép nối Hình 2.64 Các kiểu ghép nối Hình 2.65 Đọc dữ liệu vào: Dữ liệu_từ thiết bị vào ACC sau đó vào RAM Hình 2.66 Đưa dữ liệu từ RAM vào ACC sau đó ACC ra thiết bị Hình 2.67 Trao đổi dữ liệu đọc vào có điều kiện Hình 2.68 Lưu đồ điều khiển đọc dữ liệu và có điều kiện Hình 2.69 Lưu đồ điều khiển đọc dữ liệu kiểu quay vòng Hình 2.70 Mô hình hoạt động của ngắt 11
- Xây dựng các Hệ thống nhúng Hình 2.71 Các kiểu ngắt Hình 2.72 Thiết kết với ngắt cứng che được INTR của CPU Hình 2.73 Vector ngắt và chuyển xử lý tới ISR Hình 2.74 Tổ chức ngắt với điều khiển ngắt Hình 2.75 Mở rộng số ngắt với 2 vi mạch 8259 Hình 2.76 Nguyên lí DMA Hình 2.77 DMA và hoạt động của CPU là độc lập Hình 2.78 Ghép nối DMAC 8237 vào với CPU 8085và lưu đồ thời gian của qui trình DMA Hình 2.79 Lưu đồ DMA ghi dữ liệu từ RAM ra thiết bị ngoài Hình 2.80 Định nghĩa các chân của cổng SSP Hình 2.68 Cổng song song trên PC và giải nghĩa các chân cổng Hình 2.81 Lưu đồ các tín hiệu cổng song song Hình 2.82 Cổng song song hai chiều Hình 2.83 Đầu nối RS 232 các loại DB9, DB 25 và DEC MMJ Hinh 2.84 PC làm hệ phát triển phần mềm cho HTN, phù hợp tín hiệu giữa RS-232 cua PC và cổng SI-P của HTN đang phát triển Hình 2.85 Cổng SI-P đơn giản, dùng nguồn từ RS 232 của PC Hình 2.86 ADC và ghép vào HTN Hình 2.87 HTN và DAC Hình 2.88 Bài tập thiết kế ghépPTIT nối ADC, cổng LPT vào máy tính PC Hình 3.1 Mô hình tổng quát các phần mềm trên máy tính Hình 3.2 Mô hình tổng quát các kiểu sắp xếp phần mềm trên máy tính Hình 3.3 Trạng thái của tiến trình Hình 3.4 Triển khai API qua GHT Hình 3.4 Nguyên lí đa trình và quan hệ giữa chế độ người dùng và chế độ nhân HĐH Hình 3.5 Các kiểu tác vụ Hình 3.6 Hầu hết các loại tác vụ đề xuyên qua lập biểu. Hình 3.7 Biểu đồ thực hiện một tác vụ Hình 3.8 Phân loại các giải thuật lập lịch thực hiện tác vụ Hình 3.9 Quay vòng kết hợp ưu tiên và chen ngang Hình 3.10 Mô hình nguyên lí cho WD 12
- Xây dựng các Hệ thống nhúng Hình 3.12 Sự kiện và đáp ứng Hình 3.13 RTOS nhân thời gian thực và RTOS đa năng Hình 3.14 Module lập biểu của nhân HĐH Hình 3.15 Các chức năng nhân RTOS Hình 3.16 Các hệ điều hành RTOS Hình 3.17 Hệ thống nhúng thời gian thực Hình 3.18 Vị trí cua PMTG ở HTN Hình 3.19 Mô hình các lớp mạng theo TCP/IP, OSI và ánh xạ vào HTN Hình 3.20 Các ứng dụng WEB trong HTN, đặt ở lớp phần mềm ứng dụng Hình 4.1 Các thuộc tính chung của phần cứng của một HTN Hình 4.2 Một kiểu đặc tả tiền thiết kế HTN Hình 4.3 Kịch bản mô phỏng hiệu năng khi thiết kế HTN Hình 4.4 Các cấu trúc kiểu “4+1” Hình 4.5 Các pha thiết kế HTN Hình 4.6 Giải thuật thiết kế máy in laser: phân hoạch cứng/mềm Hình 4.7 Phân hoạch thiết kế phần cứng và phần mềm Hình 4.8 Đồng thiết kế phần cứng và phần mềm-đồng kiểm nghiệm, tối ưuthiết kế Hình 4.9 Qui trình thiết kế kiểu ASIC Hình 4.10 Xây dựng mô hình hình thức: Bước sàng lọc sử dụng cách tổng hợp phần cứng và phần mềm để chuyPTITển hóa xác định chức năng vào mô hình phần cứng của thiết kế. Hình 4.11 Bo mạch HTN Hình 4.12 Mối tương quan giữa giá thành hệ thống/hiệu năng và mức độ tích hợp thống/hiệu năng Hình 4.14 Quá trình biên dịch thành mã maý tạo ra HĐH Hình 4.15 Định dạng một tệp thực thi ELF Hình 4.16 Tổng quát các bước tạo nhân HĐH mới từ mã nguồn Hình 4.17 Tổng quát các bước tạo nhân HĐH mới từ mã nguồn và kiểu khởi động Hình 4.19 Các loại công cụ hổ trợ gở rối Hình 4.20 Kết quả hiển thị của gở rối Hình 4.21 Liên kết giữ hệ phát triển và hệ đích đang được gở rối 13
- Xây dựng các Hệ thống nhúng Hình 4.22 Môi trường phát triển chéo: hệ phát triển – công cụ - HTN đích Hình 4.23 Hệ thống nhúng : phần mềm nhúng và phần cứngnhúng Hình 4.24 Hệ phát triển HTN Hình 4.25 Qui trình phát triển phần mềm đích để nạp vào HTN đích. Hình 4.26 Qui trình phát triển phần mềm cho HTN Hình 4.27 Sở đồ đơn giản hệ thống và ánh xạ bộ nhớ vào EEPROM hay FLASH của HTN đích. Hình 4.28 Vai trò của trình loader Hình 4.29 Phần program header table chỉ ra các phân đoạn được sử dụng lúc chạy chương trình (run time) và phần header liệt kê tập các phần nhị phân : .text: mã chương trình, .rodata: dữ liệu chỉ đọc, .data: dữ liệu đọc/ghi được. Hình 4.30 Ảnh xạ thực thi chuyển vào bộ nhớ của hệ thống Hình 4.31 Ví dụ tổng quan về boostrap hệ thống Hình 4.32 Trình tự boot boot image chạy từ ROM Hình 4.33 Trình tự boot thực hiện ở RAM sau khi image đã được copy từ ROM vào RAM Hình 4.34 Chạy image sau khi đã tải xuống hệ đích từ hệ phất triển (PC) Hình 4.35 Tiến trình khởi độngPTIT phần mềm HTN 14
- Xây dựng các Hệ thống nhúng Chương 1. GIỚI THIỆU CHUNG VỀ CÁC HỆ THỐNG NHÚNG 1.1 KHÁI NIỆM VỀ HỆ THỐNG NHÚNG (HTN) Nhìn lại những năm 70 thế kỹ trước, xử lý thông tin thường phải sử dụng các máy tính lớn hay máy tính mini (ví dụ dòng máy mini PDP 11 của hãng DEC một hệ thống thống trị trong truyền thông). Cho tới những năm 80, khi vi xử lý và máy tính cá nhân (PC để bàn và xách tay) ra đời, máy tính trở thành công cụ đắc dụng cho xử lý thông tin bởi khả năng tính toán nhanh, gọn nhẹ và di động linh hoạt. Giai đoạn tiếp theo là khả năng chế tạo vi mạch kích thước vài trăm micro mét và nano mét của những năm chín mươi, đã thúc đẩy xu hướng nhỏ hóa (miniaturization) và đa dạng các dòng vi xử lý, phát triển mạnh mẽ. Các bộ vi xử lý đa năng và sự xuất hiện các vi xử lý chuyên biệt (ASIC- application-specific integrated circuit) được chế tạo với số lượng lớn chưa từng thấy. Việc sử dụng các bộ vi xử lý chuyên biệt để tạo ra các thiết bị chuyên xử lý một hay một vài bài toán kĩ thuật, tạo ra một nghành công nghệ mới, gọi là công nghệ nhúng. Sản phẩm của công nghệ nhúng này là các hệ thống nhúng. Vậy hệ thống nhúng (HTN- Embedded system) là gì ? Có nhiều định nghĩa về HTN, nhưng nếu ta lấy tiêu chí mô tả HTN làm cái gì và sử dụng nó như thế nào, thì có thể nói về HTN như sau: Hệ thống nhúng là một thuật ngữ để chỉ một hệ thống có khả năng hoạt động tự trị được nhúng vào trong một môi trường hay một hệ thống khác qui mô phức tạp hơn. Đó là các hệ thống tích hợp cả phần cứng (là một hệ thống máy tính được xây dựng trên cơ sở sử dụng vi xử lý - microprocessor-based system) và phần phềm nhúng trong phần cứng đó, để thực hiện các bài toán chuyên biệt. Hay theo định nghĩa của tổ chức IEEE thì hệ thống nhúng là một hệ tính toán (máy tính số) nằm trong (hay được nhúng vào) sản phẩm khác lớn hơn và rằng thông thường ẩn đối với người sử dụng. Nói rộng ra, và đơnPTIT giản hơn, khi một hệ tính toán (có thể là PC, IPC, PLC, vi xử lý, vi hệ thống (microcontroller), DSP v.v ) được nhúng vào trong một sản phẩm hay một hệ thống nào đó và thực hiện một số chức năng cụ thể của hệ thống đó, thì ta gọi hệ tính toán đó là một hệ thống nhúng. Tuy nhiên thật không dễ gì định nghĩa cho thật đúng về HTN, định nghĩa trên rất ít nói tới công nghệ và cũng rất đơn giản. Hiện nay chưa có định nghĩa nào thật thỏa đáng về HTN, ví dụ nếu lấy chức năng xử lý thông tin, thì HTN là một phần xử lý thông tin nhúng trong các hệ thống lớn hơn và phức tạp hơn, hay cũng có thể là một hệ thống độc lập vận hành tự động. Ví dụ gần gũi ta có: máy tính cá nhân, hay máy chủ, là một hệ thống phức tạp được xây dựng từ các thành phần hoạt động độc lập nhưng được đồng bộ với nhau. Vĩ điều khiển đồ họa, có vi điều khiển rất mạnh xử lý đồ họa, vĩ điều khiển trên đĩa cứng có vi điều khiển chuyên dụng để xử lý tín hiệu, ghi/đọc dữ liệu từ đĩa từ tính theo yêu cầu của hệ điều hành, vĩ mạng cũng là một vi điều khiển tinh vi xử lý tín hiệu Đó là các hệ thống con được nhúng trong hệ thống máy tính nói chung. Mặc dù vậy ta cũng sẽ nêu ra đây một số điểm chung về HTN. 1.2 ĐẶC ĐIỂM CỦA HTN 15
- Xây dựng các Hệ thống nhúng Để hiểu rõ hơn về HTN, ta nêu ra một số đặc điểm để nhận biết về một hệ thống nhúng: . Là một kiểu máy tính ứng dụng đặc biệt, rất giới hạn về phần cứng và phần mềm khi so sánh với các máy tính đa năng, như máy tính cá nhân, máy chủ, siêu máy tính. Điều đó nói lên rằng hiệu năng xử lý, năng lượng tiêu thụ, bộ nhớ, các phần cứng khác đều hạn chế. Còn phần mềm hạn chế, hay phần mềm là cố định, có nghĩa hệ điều hành được thiết kế phù hợp với các xử lý đã định. Hiện nay hệ điều hành thường sử dụng là hệ điều hành đa nhiệm (như DOS 6.X hỗ trợ đa nhiệm trên các loại HTN dòng PC 104), hay hệ điều hành thời gian thực. Nếu không có hệ điều hành, thì cũng là một kiểu chương trình điều khiển chung (monitor) nào đó. Phần mềm viết ra không có các phần mã có mức độ trừu tượng hay có cũng ở mức thấp. Mã thực thi (gồm hệ điều hành và các ứng dụng) được nạp vào bộ nhớ ROM. Nhìn chung mã thực thi có kích thước nhỏ và tối ưu vì ROM có dung lượng nhỏ. Tuy nhiên với sự phát triển nhanh chóng của công nghệ, cách nêu trên có thể thay đổi, bởi sẽ có các HTN rất tinh xảo và mức độ phức tạp rất cao, bộ nhớ có thể đến vài chục mega bytes. . HTN được thiết kế để thực hiện một hay vài ứng dụng xác định, chuyên biệt (Application specific), ví dụ các thiết bị nhúng công nghiệp như robot thuộc loại này. Tuy nhiên có những thiết bị nhúng khác như các PDA, điện thoại di động, là các HTN có khả năng thực hiện nhiều chức năng hơn. Hay các Tivi kỷ thuật số lại có thể thực hiện các ứng dụng tương tác với màn hình cảm ứng, v.v Tuy nhiên xu hướng hiện nay là tạo ra các HTN khả trình có giao diện kết nối với một hệ phát triển khác để nâng cấp phần mềm. . HTN tương tác với môi trường ứng dụng qua nhiều phương thức: Qua các bộ cảm biến (sensor), ghép nối vào HTN bằng dây dẫn, hay không dây; Phát triển các giao thức truyền tin riêng biệt, hay theo các giao thức chuẩn để trao đổi thông tin với cácPTIT thiết bị khác, có thể có hỗ trợ nối mạng LAN; HTN thuộc loại thiết bị thông minh tự phản ứng (reactive), bị động nhưng tương tác liên tục với môi trường và có đáp ứng kịp thời với những tiến triển (sự kiện) mà môi trường đó xác lập. Tương tác người-máy rất đơn giản nếu có vì HTN chạy độc lập và thông tin với hệ thống lớn hơn là chính. Ngày nay xu hướng WEB hóa giao diện tương tác là phổ biến, ví dụ các thiết bị kết nối mạng Internet như ADSL dòng SOHO (Small Office-Home Office), có WEB để làm cấu hình và quản trị. Tương tự, các HTN công nghiệp cũng phát triển theo xu hương này để dễ quản trị từ trung tâm điều khiển. . HTN hoạt động độc lập, do đó các đặc điểm sau đây: Độ tin cậy, lí tưởng là không có sư cố hỏng hóc. Bảo trì: thời gian bảo trì nhanh chóng. Có tính sẳn sàng cao, là kết quả của sự tin cậy và bảo trì. 16
- Xây dựng các Hệ thống nhúng An toàn: nếu có sự cố xảy ra, HTN không gây ra những tác hại khác của toàn hệ thống. An ninh: dữ liệu của HTN được bảo mật, truy nhập phải có xác nhận (ví dụ, HTN là các thiết bị truyền thông, SOHO). . HTN là một kiểu máy tính có yêu cầu về chất lượng và độ tin cậy rất cao, hoạt động được trong các môi trường khắc nghiệt về nhiệt độ (cao, hay rất thấp), độ ẩm cao, độ rung động lớn, nhiễu sóng điện từ v.v Ví dụ các máy tính trong công nghiệp, các thiết bị truyền thông, trạm BTS chẳng hạn, hay các máy tính điều khiển trên máy bay (fly by wire) . Phần lớn các hệ thống nhúng hoạt động với sự ràng buộc thời gian: yêu cầu có thời gian cho (đáp ứng) đầu ra nhanh, đúng thời điểm, trong mối tương quan với thời điểm xuất hiện của (sự kiện) đầu vào. Kiểu hoạt động như vậy gọi là tạo đáp ứng theo thời gian thực. Thời gian thực có thể chia ra làm hai kiểu: Nhạy cảm với thời gian (time- sensitive): sự kiện chỉ được xử lý trong một khung thời gian nhất định; Thời gian tới hạn (time critical): khi có sự kiện, hệ thống phải phản ứng ngay, chuyển nhanh nhất đến mã chương trình ứng với sự kiện đó để xử lý, nói cách khác trong một của sổ thời gian cho phép, xử lý phải được thực hiện và phải có đáp ứng đầu ra. Ví dụ nếu vòng phản hồi trong các hệ có điều khiển ở đó HTN là bộ điều khiển chạy giải thuật điều khiển không đủ nhanh (xử lý, tính toán quá lâu), hệ thống trở nên không ổn định. . Có hiệu năng cao. Các số đo sau đây se phản ánh đặc tính này: Sử dụng năng lượng PTITthấp và hiệu quả. Có thể thấy điểm này ở các thiết bị di động. Mã phần mềm có kích thước rất tối ưu, vì mã phải cài toàn bộ trên HTN. Thời gian xử lý tác vụ (run-time) phải nhanh, sử dụng ít tài nguyên phần cứng (vì liên quan tới tiêu hao năng lượng). Trọng lượng nhỏ. Đây là một trong những lực chọn khi mua một HNT. Giá thành rất cạnh tranh. Muốn vậy thiết kế và sử dụng phần cứng, phần mềm cần quan tâm tới hiệu quả. Dưới đây là các ví dụ về các HTN nhìn ở góc độ sử dụng: Lĩnh vực ứng dụng Thiết bị nhúng Ô tô Đánh lửa điện tử, Điều khiển động cơ, hệ thống phanh, hộ số Điện tử tiêu dùng Tivi analog, Tivi số, CD, DVD, VCR, PDA, Điện thoại di động, CAMCODER, GPS, tủ điều hòa, tủ 17
- Xây dựng các Hệ thống nhúng lạnh, là vi sóng Công nghiệp Robot, dây chuyền sản xuất tự động, SCADA agents Y tế Máy thẩm tách, máy pha-lọc, máy thở, máy trợ tim, máy quét cắt lát, rất nhiều thiết bị y tế hiện đại Mạng thông tin (WAN, LAN, thoại) Bộ định tuyến, gateway, chuyển mạch mạng, các thiết bị truyền thông-mạng, trạm chuyển tiếp, BTS di động Văn phòng Máy Fax, máy potocopy, máy in (kim, laser, phun), máy quét, màn hình LCD Các lĩnh vực khác: an ninh, quốc Được hợp nhất trong rất nhiều khí tài hiện đại của tất cả các binh phòng, hàng không, hàng hải chủng . 1.3 CÁC YÊU CẦU VỚI HTN HTN thực tế là một loại máy tính dùng để xử lý thông tin đã ở dạng số. HTN có thể là một hệ thống độc lập như một thiết bị tích cực trong mô hình điều khiển, tức HTN là một regulator số, thực hiện các chức năng của PID regulator, khi các chức năng này được thể hiện bởi thuật toán và chuyển hóa ở dạng mã chương trình trong HTN. Trong khi đó HTN lại là một phần của một qui trình công nghệ trong công nghiệp. Như trên đã liệt kê các đặc điểm chung mà các hệ thống nhúng thường có, tự nhiên ta có thể rút ra được những yêu cầu cần có trên một hệ thống nhúng. 1. Khả năng đáp ứng với sự kiện bên ngoài (từ các tác nhân bị kiểm soát) phải nhanh nhạy, kịp thời, tức là khả năng theo thời gian thực: Các tác vụ có đápPTIT ứng ràng buộc bởi thời hạn chót (deadline); Thời gian phát hiện lỗi phải rất ngắn (tối thiểu); Khi chạy các chu trình vòng lặp điều khiển bằng phần mềm phải có đáp ứng đầu ra đúng thời hạn; 2. Có khả năng làm ở môi trường khắc nghiệt. 3. Có giá thành thấp hay hiệu quả hoạt động/giá thành hợp lí. 4. Kích thước nhỏ gọn, nhẹ, dễ mang dễ vận chuyển, lắp đặt. 5. Tiêu thụ năng lượng thấp, khả năng sử dụng nguồn pin, ắc qui (tất nhiên phụ thuộc vào dung lượng của pin, ắc qui). 6. Hoạt động tin cậy, chịu lỗi cao Tin cậy: đáp ứng dịch vụ yêu cầu đúng thời hạn sau thời gian từ t0 đến t; 18
- Xây dựng các Hệ thống nhúng Cho hằng số của tỉ số sự cố trong thời gian 1 giờ đồng hồ là e (e/h), thì biểu diễn tỉ số sự cố là R(t)=exp(-e(t-t0)), sau đó thời gian giữa 2 lần sự cố (Mean Time To Failure- MTTF) sẽ là 1/R(t); Độ tin cậy cao nếu đạt ~10-9 sự cố /giờ. Tính sẳn sàng cao: Nếu thời gian sửa chữa sự cố trung bình là MTTR, thì tính sẳn sàng (availability) A=MTTF/(MTTF+MTTR). 7. An toàn và bảo mật. 8. Khả năng nâng cấp phần mềm và dự phòng nâng cấp phần cứng (mở rộng qua khe cắm dự trữ, ví dụ các thiết bị mạng thường có tính năng này). 1.4 MÔ HÌNH TỔNG THỂ HTN Như đã nêu trong định nghĩa của HTN, thì HTN có kiến trúc của một máy tính số, do vậy sẽ không có gì khác biệt khi mô tả mô hình kiến trúc của HTN nói chung. Có khác chăng là ở chi tiết của từng HTN cụ thể. 1.4.1 Mô hình cấu trúc phần cứng c a máy t nh Dưới đây ta nêu ra mô hình tổng quát của máy tính theo nguyên lí Von Neumman. HTN cũng chia sẻ kiến trúc này trong một số trường hợp. Mô hình cho thấy các khối chức năng cơ bản cần có. Trong thực tế có những CPU nhúng có kiến trúc cụ thể khác nhau, nhưng khi mô tả các khối chức năng, thì hoàn toàn thống nhất. Mô hình lấy đơn vị xử lý trung tâm (Central Processing Unit – CPU) là khối chức năng cơ bản nhất để tạo nên một hệ vi xử lý, HNT hay máy tính cá nhân (Personal Computer – PC). . CPU thực hiện chức năngPTIT xử lý dữ liệu theo nguyên tắc thực hiện chương trình máy tính cài trong bộ nhớ ROM hay nạp vào bộ nhớ RAM. Việc thực hiện như sau: CPU đọc mã lệnh (OPCODE) từ bộ nhớ (ROM hay RAM), sau đó, Giải mã lệnh, tạo các tín hiệu (xung) điều khiển tương ứng với mã lệnh để điều khiển hoạt động của các khối chức năng khác trong CPU và bên ngoài CPU. Tập các tín hiệu tạo ra BUS của CPU. Khi kết hợp với các vi mạch dồn /tách kênh và khuyếch đại, các mạch giải mã, sẽ tạo ra BUS hệ thống. BUS hệ thống cung cấp các tín hiệu cho các vi mạch tích hợp vào CPU (ROM, RAM, I/O module) tạo thành bo mạch chính (CPU board). Thực hiện từng bước các thao tác xử lý dữ liệu đã định nghĩa trong mã lệnh. Ghi lại kết quả thực hiện lệnh. . Bộ nhớ chính (ROM/RAM) được tổ chức từ các từ nhớ đơn, kép. Theo chuẩn của IBM/PC từ nhớ đơn có sở) có độ dài 1 byte (8 bits). Bộ nhớ này gồm các chip nhớ chỉ đọc ROM (Read Only Memory) và các chip nhớ truy xuất ngẫu nhiên RAM (Random Access Memory) có tốc độ truy cập nhanh. Bộ nhớ được sử dụng để chứa 19
- Xây dựng các Hệ thống nhúng các chương trình và các dữ liệu cần xử lý. Các chương trình ứng dụng và dữ liệu có thể được chứa ở ROM hoặc RAM, các kết quả trung gian hay kết quả cuối cùng của các thao tác xử lý có thể được chứa trong các thanh ghi đa dụng hoặc trong RAM. Đồng hồ thạch anh nhịp chuẩn Bộ nhớ Ghi/Đọc Bộ nhớ chỉ Đọc (RAM) (ROM) Hệ thống đường dây địa chỉ (ADDRES BUS ) Bộ vi xử lí trung BUS tâm Hệ thống đường dây điều khiển (CONTROL BUS) (CENTRAL hệ PROCESSING thống UNIT) Hệ thống đường dây dữ liệu (DATA BUS) Ghép nối ra (O) Ghép nối vào (I) Nguồn nuôi một chiều Hình 1.1- Mô hình tổng quát bo mạch chủ . Các mạch ghép nối vào/ra (I/O interface) là các mạch điện tử, thực hiện các giải pháp kỉ thuật thích ứng tín hiệu, trở kháng cho phép CPU trao đổi dữ liệu với các thiết bị ngoại vi như bàn phím, màn hình, máy in, các bộ chuyển đổi số-tương tự DAC (Digital/Analog Converter), chuyển đổi tương tự-số ADC (Analog/Digital Converter), các mạch vào/ra dữ liệu dạng số DO (Digital OutputsPTIT), DI (Digital Inputs) . Hệ vi xử lý còn có một mạch tạo xung nhịp gọi là CPU Clock. Bộ tạo xung này được điều khiển bằng một mạch thạch anh có tần số thích hợp và đảm bảo tần số làm việc ổn định, với tần số chính xác cao. CPU có một chân phát xung cho các vi mạch còn lại, gọi là đồng hồ hệ thống (System Clock), đồng hồ này nối tới tất cả các vi mạch điều khiển chính trên bo mạch, đồng bộ toàn bộ hoạt động với CPU. . Một khối nguồn nuôi (Power Supply) cung cấp năng lượng cho hệ thống từ mạng điện lưới, hay sử dụng pin. Bộ nguồn của các hệ vi xử lý thông thường là bộ nguồn xung với kỹ thuật đóng-ngắt dùng linh kiện bán dẫn công suất (Switching Power Supply), vừa gọn nhẹ, công suất đủ lớn, hiệu suất cao. 20
- Xây dựng các Hệ thống nhúng Hình 1.2-Nguồn nuôi cho hệ máy tính . Phân loại trên cơ sở vi mạch Tuy nhiên khi đề cập tới cấu trúc của HTN được xây dựng trên công nghệ vi mạch, có thể có hai loại khác biệt: Vi điều khiển (Microcontroller ) và vi xử l (microprocessor) khác nhau theo vài cách, trước hết là chức năng. Để sử dụng một vi xử lí, cần hợp nhất nhiều thành phần vào đó: bộ nhớ, I/O, COM và do vậy vi xử lí là trung tâm của cả hệ thống. Trong khi đó vi điều khiển được thiết kế theo tiêu chí: tất cả được tích hợp trong một vi mạch, đặc biệt là các giao tiếp I/O, tức là sẽ không cần thêm thành phần nào vào đó. Lợi ích là ở chổ tiết kiệm thời gian thiết kế và k ch thước sẽ nhỏ gọn rất nhiều. Tuy nhiên do phần cứng hạn chế, nên lĩnh vực ứng dụng cũng phải được xác định. Hệ thống nhúng dựa trên Hệ thống nhúng với bộ vi xử lý trên boPTIT mạch vi điều khiển trên bo mạch (Microprocessor-based (Microcontroller-based Embedded System) Embedded System) . Có CPU độc lập, có thể là CPU đa . CPU dạng lõi chuyên biệt, RAM, năng phổ biến (Intel 8080/8085, ROM, định thời, I/O trong một vi mạch Motorola 6800 ), đơn, . Có RAM, ROM, định thời , I/O . RAM, ROM có dung lượng cố định, độc lập, I/O đủ cho mục đích sử dụng, . Khả năng mở rộng RAM, ROM, . Đơn mục đích, ứng dụng xác định, I/O tùy ý, tiêu hao ít năng lượng, giá cả hợp lí . Đa năng, đắt tiền. cho ứng dụng nhúng. . Kiến trúc gần như một máy tính . Kích thước nhỏ, gọn. 21
- Xây dựng các Hệ thống nhúng nhưng có kích thước nhỏ. Thiết kế chức năng: Thiết kế chức năng: . Được thiết kế để có tất cả trong . Cần phải có các vi mạch RAM, một Chip ! ROM hợp thành từ bên ngoài vi mạch. . Năng lực tính toán được thiết kế tối . Không thể kết nối với ngoại vi ưu cho ứng dụng xác định, các ứng ngoại vi, cần có thêm các vi mạch hỗ dụng chuyên biệt. trợ cho chức năng này. . Rất phù hợp để xây dựng các HTN . Tuy nhiên năng lực tính toán . Tiết kiệm gian thiết kế. mạnh. PTIT Hình 1.3 HTN xây dựng từ xây dựng từ vi xử lý(Microprocessor-based) và vi điều khiển (microcontroller based) 22
- Xây dựng các Hệ thống nhúng Hình 1.4 Chip Microcontroller và các thành phần cơ bản, BUS kết nối bên trong.Tất cả trong một chip. 1.4.2 Kiến trúc c a CPU Phần nhiều các tài liệu khi đề cập tới thiết kế HTN, đều dành một số chủ đề về kiến trúc và cách thiết kế chế tạo CPU. Đây là một vấn đề chuyên và rất sâu, tài liệu này sẽ không dẫn xuất. Tài liệu chỉ giới hạn ở giới thiệu các kiểu CPU có thể sử dụng để thiết kế HTN. Các kiểu CPU này rất phổ biến trên thị trường, rất đa dạngPTIT với năng lực xử lý khác nhau và phù hợp cho mỗi loại ứng dụng nhúng. Dưới đây là một trong các quan điểm nhìn nhận CPU: Tập lệnh: có thể là CISC hay RISC, trong đó RISC là phổ biến. Hoạt động theo kiểu Von Neumman, ví dụ điển hình như hình vẽ trên, trong đó Hệ thống BUS địa chỉ và BUS dữ liệu, BUS điều khiển chung cho toàn bộ hệ thống, bộ nhớ chia sẻ chung cho toàn hệ thống với vùng mã lệnh (code) và dữ liệu (data) trên cùng không gian địa chỉ bộ nhớ và BUS dữ liệu không thể truyền đồng thời mã lệnh và dữ liệu cùng một thời điểm. Quá trình thực hiện một lệnh máy như sau: 1) Đọc mã lệnh từ ROM/RAM qua BUS dữ liệu vào CPU, giả mã để xác định làm gì tiếp theo; 2) Đọc dữ liệu tiếp theo là một phần của lệnh (operands) nếu có; 3) Thực hiện lệnh khi đã đọc hết các operands của lệnh; 4) Lưu kết quả vào thanh ghi hay ra RAM. 23
- Xây dựng các Hệ thống nhúng Trong qua strình thực hiện lệnh, BUS dữ liệu là kênh duy nhất để trao đổi dữ liệu, do vậy ta nói BUS dữ liệu có thể bị “bảo hòa”, hiệu năng tính toán bị hạn chế. Với các CPU hiện đại BUS dữ liệu được cải tiến rất nhiều, đặc biệt là giao thức BUS và đồng hồ BUS được nâng cao để cải thiện hạn chế nói trên. Và hoạt động kiểu Harvard với một số đặc điểm khác biệt : Howard Aiken (1900-1973) khi xây dựng máy tính với các relé đã tách các bộ nhớ dữ liệu (RAM) và bộ nhớ chương trình (NVM Non Volatile Memory: ROM, FLASH) với các bus riêng rẽ để truy cập vào bộ nhớ dữ liệu (RAM) và bộ nhớ chương trình chứa phần mềm nhúng (hệ điều hành, Device drivers, ứng dụng nhúng ). Bus cho lệnh và Bus cho dữ liệu tách biệt, điều hành độc lập nên lệnh và dữ liệu có thể được đưa ra cùng một lúc, cải thiện tốc độ so với thiết kế với chỉ một bus. Phân biệt rõ ràng bộ nhớ dữ liệu và bộ nhớ chương trình, CPU có thể vừa đọc một lệnh, vừa truy cập dữ liệu từ bộ nhớ cùng lúc. Do các BUS độc lập, CPU có khả năng tìm trước các lệnh (instruction prefetch), nên với kiến trúc Harvard chương trình chạy nhanh hơn, bởi vì nó có thể thực hiện ngay lệnh tiếp theo khi vừa kết thúc lệnh trước đó. Tuy nhiên về kiến trúc có phần phức tạp hơn trong phần cứng, với 2 BUS độc lập gây khó khăn nhất định cho các ngôn ngữ lập trình cấp cao (ví dụ như C, ) nhưng cho hiệu quả hơn cho các ứng dụng nhúng. Là loại phổ biến để thiết kế các HTN. PTIT Hình 1.5 Hai kiểu HTN với 2 loại kiến trúc CPU 24
- Xây dựng các Hệ thống nhúng Ví dụ Havard CPU ARM 920T, là loại CPU cải tiến với một nhớ cache cho lệnh và một cache cho dữ liệu. Hình1.6 Havard CPU ARM 920T của Amtel 1.4.3 Mô hình tổng quát c a một HTN Các khối chức năng: - Môi trường hoạt động: nơi sử dụng HTN, - Chấp hành: là các thiếPTITt bị công nghệ, - Cảm biến: thiết bị đặc biệt ghi nhận thông tin công nghệ (vị trí, vòng quay, tốc độ, nhiệt độ, áp suất, kích thước (cao, dài, sâu) ) , - Ghép nối: là các thiết bị phối hợp, chuyển hóa các thông tin từ cảm biến thành tín hiệu điện để số hóa, - Các bộ số hóa (A/D) và tương tự hóa (D/A), - Ghép nối với các hệ thống khác: liên kết các HTN khác, mạng dữ liệu, Trung tâm điều khiển SCADA, - Ghép nối BUS hệ thống - CPU, RAM, ROM (FLASH), 25
- Xây dựng các Hệ thống nhúng Hình 1.7 Mô hình tổng quát HTN-Mô hình với các khối chức năng PTIT Hình 1.8 Một cách nhìn khác về mô hình tổng quát HTN:Với các khối ngoại vi và phần mềm 26
- Xây dựng các Hệ thống nhúng Kiến trúc trừu tượng: lớp xếp chồng Khi nói về kiến trúc một hệ thống, thường ta đề cập tính tổng quát và những chức năng cơ bản. Như vậy ở mức độ tổng quát, các lớp phần cứng và phần mềm được đề cập như các thành phần (element) hợp thành. Các thành phần kiến trúc có thể hợp nhất bên trong thiết bị nhúng hoặc tồn tại bên ngoài và tương tác với các thành phần bên trong theo một cách nào đó. Ở cách nhìn kiến trúc, thì kiến trúc được biểu diễn bới các cấu trúc. Mỗi cấu trúc bao gồm một tập hợp các thành phần đặc trưng, các thuộc tính và những đặc tả về mối quan hệ bên trong các thành phần đó. Kiến trúc lớp xếp chồng có đặc tính là mỗi lớp chỉ sử dụng chức năng hay dịch vụ) của tầng dưới nó, đồng thời chỉ cho phép tầng trên sử dụng các chức năng dịch vụ) của mình. Kiến trúc này có lợi thế về an ninh, bền vững, đơn giản về thiết kế, dễ nâng cấp (các dịch vụ), thực hiện mỗi lớp và khả năng nâng cấp “nóng” ngay cả khi hệ thống đang hoạt động. Ví dụ nguyên lí này ta thấy ở mô hình mạng chuẩn OSI (Open Systems Interconnection), kiến trúc của hệ điều hành Unix/Linux. Mô hình một NTH cũng được đặc tả theo lớp kiến trúc để đảm bảo về độ tin cậy, đơn giản khi hoạt động: PTIT Hình 1.9 Kiến trúc trừu tương HTN - Lớp phần cứng: Như ở Các khối chức năng. - Lớp phần mềm hệ thống: Hệ điều hành hay Monitor - Lớp ứng dụng: Là một số chương trình ứng dụng xác định mà HTN thi hành. 1.4 PHÂN LOẠI HTN Phân loại HTN có thể theo nhiều tiêu chí khác nhau và có thể không hoàn toàn giống nhau (giống như khi nêu định nghĩa về HTN). Tuy nhiên có thể nêu ra đây một số tiêu chí để phân loại HTN. . HTN hoạt động ở đâu: Hoạt động độc lập: nhận đầu vào từ các tác nhân bị điều khiển, xử lý và cho đầu ra. Thời gian có đầu ra (đáp ứng) phải trong một khung thời gian nhất định theo ý đồ khi thiết kế. 27
- Xây dựng các Hệ thống nhúng Hoạt động có liên kết với nhau giữa các HTN và các trung tâm kiểm soát khác. Loại này gọi là HTN mạng. Ví dụ các HTN cục bộ tại các thiết bị chấp hành đầu cuối của một qui trình công nghệ phức tạp liên kết qua mạng cục bộ của nhà máy hay của một cổ máy phức tạp. Hệ thống mạng điện thoại di động là một ví dụ kiểu HTN mạng: máy người dùng các trạm BTS tổng đài tổng đài BTS máy người dùng. Tên chung của HNT lại này là HTN di động. . Lĩnh vực ứng dụng: Công cụ tính toán như các máy tính nhưng chỉ để chạy các bài toán nhất định. Xử lý tín hiệu: các thiết bị video thời gian thực, DVD player, thiết bị y tế Truyền thông, mạng: thiết bị mạng như router, chuyển mạch (switch), firewall . Hệ thống điều khiển và thu thập dữ liệu. . Kiến trúc và qui mô: HTN qui mô nhỏ (Small Scale Embedded Systems) với các xác định như sau: - Phần cứng ít phức tạp, thiết kế với CPU đơn, loại 4, 8 bits; - Phần mềm đơn giản, dùng một monitor để kiểm soát hoạt động; - Công cụ phát triển phần mềm: soạn thảo chương trình, hợp ngữ và hợp ngữ chéo (asembler, cross asembler), môi trường phát triển hợp nhất (integrated developememt enviroment) sử dụng với vi điều khiển hay CPU đã chọn. Ngôn ngữ phát triển là C, mã C được dịch ra nhị phân tối ưu, định vị mã thực thi trong bộ nhớ ROM, dung lượng bộ nhớ giới hạn. - Tiêu thụ năng lượng rất ít. Ví dụ : HTN đơn giản, chỉ PTITcó một vài phím bấm để đưa thông tin vào, một vài đèn LED hiện đầu ra (trạng thái nào đó). Ví dụ: HTN máy điều hòa nhiệt độ, lò nhiệt v.v. HTN qui mô phức tạp: - Phần cứng phức tạp: Thiết kế với CPU 8,16 hay32 bits, hay sử dụng vi điều khiển; - Hệ thống có cấu trúc với BUS mở rộng để ghép nối với các thiết bị ngoại vi; - Phần mềm nhúng tinh vi, có hệ điều hành để thực hiện các nhiệm vụ, thao tác đồng thời. Có thể là loại RTOS. - Công cụ lập trình: C/C++/Visual C++/Java, RTOS, mã nguồn, công cụ ki thuật: Simulator, Debugger. Môi trương phát triển hợp nhât (Integrated Development Envirinment-IDE. Công cụ soft để xây dựng phần cứng phức hợp. Ví dụ: các HTN trên các máy gia công (kim loại, khuôn nhựa v.v). HTN tinh vi (Sophisticated Embedded Systems) - Phần cứng và phần mềm rất đặc biệt; 28
- Xây dựng các Hệ thống nhúng - Nhiều CPU và có thể mở rộng, hay các CPU có thể cấu hình được (configurable CPUs), hay mảng logic lập trình được (programable logic array-PLA); - Phát triển cho các lớp ứng dụng mới nhất khi các ứng dụng loại này cần phải 8ểcó quá trình thiết kế đồng thời giữa phần cứng và phần mềm, hợp nhất các linh kiện ở hệ thống cuối cùng, sử dụng công nghệ ASIC để chế tạo CPU, vi mạch đồng xử lý (còn gọi là ChipSet hay Co-processor). Ví dụ các hệ thống hàng không quân sự mới nhất trên các máy bay (military/civil avionic ), các thiết bị mạng cao cấp . Các HTN kiểu này bị chế ngự bởi tốc độ xử lý của phần cứng (CPUs), Các chức năng phần mềm như các giải thuật mã hóa/giải mã, giải thuật chuyển đổi tín hiệu số (Fourrier/Z transformation), giao thức TCP/IP stack, các hàm chức năng mạng nhúng trong phần cứng để tăng tốc xử lý; Một số chức năng phần mềm được cứng hóa (như DSP). Công cụ phát triển thường không có sẳn vì đắt tiền, do đó phải phát triển riêng khi dự án được chấp nhận. HTN phần cứng hay HTN phần mềm; HTN theo An toàn sự cố (fail-safe), hay tự an toàn (fail-safe operational); HTN đáp ứng được bảo đảm hay đáp ứng với nỗ lực tối đa; HTN với nguồn tài nguyên đầy đủ hay nguồn tài nguyên hạn chế; HTN phản ứng ngay với sự kiện hay phản ứng với sự kiện có thời hạn. . Tại sao các HTN lại có sự khác nhau ? Có thể trả lời đơn giản đó là do các ứng dụng khác nhau và hệ thống phải hoạt động hiệu quả. Ví dụ: 1. HTN là dành để thực hiPTITện các tác vụ riêng biệt. Các tác vụ riêng biệt ở đây phần lớn liên quan tới các xử lý khác nhau chuyên biệt, các sự kiện, các trạng thái của một qui trình công nghệ, ví dụ qui trình điều khiển máy công cụ, robot Khi thay đổi qui trình, thường dẫn tới thay đổi hay thiết kế lại cả hệ thống. Như vậy có thể thấy cần có một loại bộ xử lý thích hợp cho lại tác vụ đã nêu. Bộ xử lý như vậy gọi là bộ xử lý chuyên biệt (dedicated microprocessor), nó không mạnh như bộ xử lý đa năng ta sử dụng trong máy tính, như máy tính PC chẳng hạn. Ví dụ điển hình là bộ xử lý tín hiệu số DSP (Digital Signal Processor) dòng TMS320 (TMS320C6000™ Multicore DSPs, TMS320DM6446 DaVinci™ Video Processor ) của Texas Instruments, hay các bộ xử lý MP3 (xử lý dữ liệu âm thanh đã nén và giải mã đưa vào khuyếch đại âm thanh rồi ra loa). Ví dụ sơ đồ khối chức năng của CPU DSP: 29
- Xây dựng các Hệ thống nhúng Hình 1.10 Sơ đồ khối CPU DSP-MP3. PTIT Hình 1.11 Bộ MP3 với CPU BlackFin của ANALOG DEVICES 2. Như điểm 1. nêu trên, về phần cứng, các HTN được thiết kế từ rất nhiều loại CPU nhúng và các CPU nhúng bản thân chúng lại có kiến trúc khác nhau. Hiện trên thị trường có thể liệt kê các kiểu CPU nhúng như: CPU vạn năng rút gọn phù hợp cho ứng dụng nhúng, các vi điều khiển (microcontroller, PIC), các kiến trúc kiểu hệ thống trên một vi mạch (PSoC-Programmable System on Chip) 3. Về phần mềm cở sở có thể từ đơn giản cho tới tinh xảo, hệ điều hành thời gian thực (RTOS-Real Time Operating System). 30
- Xây dựng các Hệ thống nhúng 4. Ví dụ một số HTN . Phần cứng thương mại là các sản phẩm như bo mạch HTN (Microprocessor-based) đầy đủ, thiết kế hoàn chỉnh và đi cùng đã có phần mềm hệ thống (hệ điều hành, hay monitor) cài đặt trong EEPROM, flash, có RAM hay còn có đĩa cứng bán dẫn (DiskOnChip dung lượng 32MB hay lớn hơn), ví dụ như dòng PC 104 dưới đây: PTIT TMZ104 PC/104 Computer with Transmeta Crusoe TM5500 CPU TMZ104 Photo Features: Low power fanless x86 compatible Embedded BIOS Linux OS Watchdog timers Dual EIDE & floppy support USB, parallel port, PS2 keyboard & Mouse Dual RS-232 serial Hình 1.12 Một số HTN thương mại 31
- Xây dựng các Hệ thống nhúng . Các loại vi điều khiển dạng bo mạch. . Các loại vi xử lý rời để thiết kế THN theo yêu cầu ứng dụng: CPU : Intel 80X51, PIC 12F 675, Amtel 8051, PSoC (Programmable System on Chip) : CY8C29466 Đặc điểm chung của các loại này là có kiến trúc đầy đủ chỉ trong một vi mạch có mức độ tích hợp cỡ lớn và rất lớn (VLSI: Very Large Scale Integration). Bảng dưới đây liệt kê số loại CPU cho HTN từ các hãng khác nhau (chưa đầy đủ): PTIT 1.5 KẾT CHƯƠNG Chương này giới thiệu về HTN từ định nghĩa, mô hình, phân loại, các đặc thù và kiến trúc của HTN. Chương cũng nêu ra những lĩnh vực công nghệ mà HTN được sử dụng. Từ đó cũng bật ra những yêu cầu kỷ thuật trên HTN nói chung và HTN cho ứng dụng riêng biệt. Tham khảo một số định nghĩa HTN từ các nguồn tài liệu: “HTN là một hệ thống có phần cứng được xây dụng trên nền tảng phần cứng máy tính chuyên biệt với phần mềm được nhúng trong phần cứng đó, như một trong các thành phần quan trọng nhất của HTN. HTN do đó có thể là một hệ độc lập hay là một phần của một hệ thống lớn hơn.” Một số định nghĩa về HTN: 32
- Xây dựng các Hệ thống nhúng Wayne Wolf: “ what is an embedded computing system ? Loosly defined, it is any device that includes a programmable computer but is not itself intended to be general-purpose computer” [Computers as Components – Principal of Embedded Computer System Design]. Told D. Morton: “Embedded Systems are electronic systems that contain a microprocessor or microcontroller, but we do not think od them as computers – the computer is hidden or embedded in the system” [Embedded Microcontrollers] Tim Wilmshurst: “ Embedded system is a system whose primcipal function is not computational, but which is controlled by a computer embedded within it. The computer is liklly to be a microprocessor or micro controller. The word embedded implies that it lies inside the overal system, hidden from view, forming an integral part of greater whole” [ An Introduction to the Design of Small Scale Embedded System with PIC, 80c51 and 68HC05/08 Microcontroller] 1.6 CÂU HỎI CUỐI CHƯƠNG 1) Định nghĩa tương đối về HTN. 2) Những thách thức nào phải đối mặt khi thiết kế một HTN ? 3) Những cách để nêu mô hình kiến trúc của một HTN ? 4) Thế nào là HTN kiểu vi xử lý HTN kiểu vi điều khiển ? 5) Nêu các khối chức năng trong hình 1.7 mô tả về mô hình một HTN. 6) Có bao nhiêu loại kiến trúc CPU được sử dụng khi xây dựng HTN ? Mỗi loại khác nhau ở điểm nào chủ yếu ? 7) Nêu các thành phần phần cứng thường có trong một HTN ? 8) Các thành phần như biến đổi tương tự-số (ADC), số-tương tự (DAC), định thời (timer), cổng (port) nhPTITất thiết cần có trên một HTN ? Tại sao ? 9) Có các loại phần mềm nào trên một HTN ? 33
- Xây dựng các Hệ thống nhúng Chương 2. CÁC THÀNH PHẦN PHẦN CỨNG CỦA HỆ THỐNG NHÚNG Chương 2 đề cập tới các thành phần phần cứng, nền tảng cơ sở của HTN. Bao gồm: bộ xử lý trung tâm (CPU) với kiến trúc Von Neumman và kiến trúc Harvard, BUS của CPU và BUS hệ thống, bộ nhớ, cổng. Tiếp theo là kĩ thuật ghép nối các thiết bị ngoại vi vào với CPU, các chương trình điều khiển ghép nối. Đối với CPU, tài liệu nêu nguyên lí kiến trúc, các đặc tính kĩ thuật và biểu đồ thời gian hoạt động của CPU, giúp cho việc thiết kế phần cứng sau này. Riêng về tập lệnh không đề cập tới, do vậy khi sử dụng một CPU nào đó cần nắm được tập lệnh của CPU đó để có thể lập trình, viết các trình điều khển bằng hợp ngữ. Nội dung chương cung cấp các kiến thức phần cứng và kĩ năng thiết kế, đặc biệt là thiết kế ghép nối với thiết bị. Cuối chương là một số bài tập thiết kế đơn giản như thiết kế bộ nhớ ROM, RAM, cổng với CPU, tạo thành một bo mạch như một HTN chưa có các thiết bị ngoài. 2.1 BỘ XỬ LÍ TRUNG TÂM (Central Processing Unit-CPU) Các hệ thống sử dụng kĩ thuật tính toán số để xử lý thông tin đều cần một tổ hợp các mạch số để tạo ra một hệ thống có khả năng: thực hiện các phép tính lí luận lí (logic), các phép toán số học, các quyết định chuyển hướng thực hiện có hay không có điều kiện và quan trọng là hoạt động theo một hệ mã vi lệnh (micro-instruction code) theo một trình tự nhất định. Ý tưởng tạo ra một hệ thống điện tử số như vậy chính là tạo ra một bộ xử lý trung tâm. Bộ xử lý trung tâm ngày nay rất tinh xảo, kích thước rất nhỏ ( chỉ lớn hơn 1 cm² ) nhưng chứa vài trăm triệu transistor, hoạt động với tần số từ vài MHz tới vài GHz, công suất tiêu tán từ vài Watt tới vài chục Watt , ví dụ: Intel Pentium G6950 công nghệ: Clarkdale (32 nm), tần số:2.8 GHz,Powerdissipation:73W.( #Intel_Pentium_Dual-Core). Đổi lạPTITi tốc độ tính toán đạt hơn 1 tỉ lệnh máy trong một giây (MIPS: milions Instruction per second). Ví dụ: Intel Core i7 Extreme Edition i980EE :147.600 MIPS at 3,3 GHz , 44.7 lệnhmáy/chu kì xung đồng hồ (với f=3,3GHz, Tchukì=0,303 ns). ( Đấy là nói tới các bộ xử lý vạn năng, dùng để chế tạo các máy tính (để bàn, máy chủ). Đối với các CPU dùng trong thiết kế các HTN, tần số làm việc của CPU có thấp hơn, từ vài chục, vài trăm MHz trở lên. Tại sao vậy ? Đơn giản không phải lúc nào cũng cần tốc độ tính toán thật nhanh, và còn tùy vào ứng dụng nhúng đó là gì. Tất nhiên càng nhanh càng tốt, nhưng đổi lại giá thành cao, môi trường hoạt động không thể thỏa mãn (ví dụ nhiệt độ môi trường cao, bụi, rung động cơ học ). 2.2.1 Các loại CPU và nguyên lí hoạt động 34
- Xây dựng các Hệ thống nhúng Hiện nay trên thị trường rất nhiều nhà sản xuất CPU với nhiều chủng loại phù hợp cho các ứng dụng. Có thể liệt kê một số nét để phân biệt: a) Cách tổ chức và thực hiện lệnh máy: - Với tập lệnh đầy đủ (CICS). - Với tập lệnh rút gọn (RISC). b) Cách xử lý thông tin và truy nhập bộ nhớ: - Von Neumman: bộ nhớ chung, truy cập tuần tự theo từng lệnh máy. - Harvard: bộ nhớ lệnh và bộ nhớ dữ liệu độc lập, truy cập đồng thời. c) Công nghệ chế tạo hướng ứng dụng: . CPU đa năng: chế tạo máy tính đa năng, HTN tinh vi, hệ điều khiển thông minh. . CPU chuyên dụng: các ứng dụng đặc thù ( như cho ứng dụng nhúng). Trong phạm trù này lại có một vài công nghệ tiêu biểu: - Vi điều khiển (microcontroller và PIC-Programmable Intelligent Computer" (Máy tính khả trình thông minh)). - Hệ thống trong một vi mạch lập trình được (PSoC- Programmable System on Chip: integrating configurable analog and digital peripheral functions, memory and a microcontroller on a single chip). Lớp công nghệ này được sử dụng phổ biến trong các HTN có đòi hỏi mức tinh xảo trung bình hay thấp. 2.2.2 Ví dụ về một CPU và nguyên lí hoạt động Để có thể thực hiện thiết kế một HTN, cần tìm hiểu chi tiết về cấu trúc, cách làm việc và lập trình cho một CPU đã chọn. Phần này giới thiệu dòng Intel CPU 808X, 8 bits hay 16 bits, đa năng của Intel được sử dụng rất phổ biếnPTIT trên thế giới cũng như ở Việt Nam. Ưu điểm nổi bật của CPU này là tính phổ biến, đa năng, dễ triển khai, công cụ phát triển rất đa dạng và sẳn có. a) Sơ đồ hình thức bên ngoài: Hình 2.1 Intel CPU 8085 35
- Xây dựng các Hệ thống nhúng b) Kiến trúc: Mô hình chức năng bên trong CPU, ví dụ Intel 8080/8085 8085 là 8-bit microprocessor, trong đó dữ liệu xử lý là 8 bits, không gian địa chỉ được xác định bởi 16 bits, cho dung lượng địa chỉ là 65.535 (gọi là 64K) ô nhớ. Các thành phần chức năng bao gồm: . Tập các thanh ghi (Register). . Đơn vị thực thi các phép tính số học và luận lí (Arithmetic logic unit- ALU). . Hệ thống các dây nối giữa các vi mạch chức năng ( BUS). . Khối định thời và điều khiển (Timing & Control unit). . Khối điều phối, kiểm soát ngắt (Interrupt Control) . Khối truyền thông nối tiếp (Serial I/O Control) PTIT Hình 2.2 Các khối chức năng của CPU 8080/8085 1) Tập các thanh ghi (Registers): Các thanh ghi sử dụng để chứa dữ liệu và địa chỉ. Co hai loại thanh ghi: 36
- Xây dựng các Hệ thống nhúng Thanh ghi đa năng được dùng như chức năng nhớ dữ liệu tạm thời hay đị chỉ tức thời qui chiếu tới bộ nhớ (ROM/RAM). Các thanh ghi 8 bits đó là B, C, D, E, H và L. Khi ghép lại sẽ thành thanh ghi 16 bits với tên kép: BC, DE or HL. Thanh ghi đặc biệt là các thanh ghi gán cho chức năng đặc biệt (hay chuyên dụng): . Thanh ghi t ch lũy ACC (Accumulator) hay A, là thanh ghi 8-bit, đa dụng cho các thao tác và các phép tính số học, luận lí, I/O, nạp, nhớ dữ liệu, toán hạng, kết quả phép toán khi thực hiện lệnh. . Thanh ghi chỉ số (Index register): được dùng làm chỉ số cho qui chiếu địa chỉ, cách dùng phụ thuộc vào chế độ địa chỉ hóa. . Thanh ghi đa năng (General registers ) 16 bit chia phần thấp và phần cao: 8-bit B và 8-bit C hay kết hợp thành cặp BC 16-bit. 8-bit D và 8-bit E hay kết hợp thành cặp DE 16-bit. 8-bit H và 8-bit L hay kết hợp thành cặp HL 16-bit. Các thanh ghi này dùng độc lập hay kết hợp chứa dữ liệu hay địa chỉ qui chiếu vào bộ nhớ (chế độ dịa chỉ hóa gián tiếp qua thanh ghi). . Thanh ghi trạng thái (Status register) hay Cờ (Flag), là thanh ghi 8-bit, chứa các bit có ý nghĩa sau: Sign, lên 1 nếu bit lớn nhất của kết quả phép tính có giá trị = 1. Zero, lập giá trị = 0, nếu kết quả phép tính = 0. Auxiliary carry, với phép tính 4 bit (D3-D0), lên 1 nếu kết quả phép tính có số mang từ D4 chuyển sang D4. Parity, lên 1 nếu số parity (là tổng của các bit trong kết quả) là số chẳn. Carry, lên 1 nếu có sô mang khi thực hiện phép cộng số học hay borrow khi thực hiện phép trừ số học hayPTIT phép so sánh giá trị. . Thanh ghi ngăn xếp (Stack pointer): 16 bit. Thanh ghi này mỗi lần tăng hay giảm 2 (+/- 2). . Thanh ghi lệnh máy (Instruction register): 8 bit chứa mã lệnh (OPCODE) từ ROM/RAM, đầu vào cho khối Timing&Control để giải mã thành các tín hiệu điều khiển của CPU. . Thanh đếm chương trình (Program counter), 16-bit, trỏ trực tiếp vào bộ nhớ nơi chứa mã lệnh của mỗi lệnh. Địa chỉ qui chiếu từ 0000h đến FFFFh (0 đến 65.535). 2) Đơn vị thực thi các phép tính số học và luận lí (ALU): Thực hiện các phép tính: Cộng, trừ, nhân, chia, logis AND, OR, XOR, NOT, dịch trái/phải, quay vòng trái/phải. 3) Hệ thống các dây nối giữa CPU với các vi mạch chức năng, thiết bị ngoài (BUS) (Hình 1.1.1- Mô hình tổng quát bo mạch chủ) Tập hợp các tín hiệu phát ra từ CPU và nối tới các vi mạch chức năng trên bo mạch chính. Để mô tả ý nghĩa của từng tín hiệu ta nhóm lại theo chức năng như sau: 37
- Xây dựng các Hệ thống nhúng BUS địa chỉ (Address bus): Mang thông tin về dịa chỉ qui chiếu tới ROM/RAM, bộ giải mã chọn vi mạch. Với CPU 8080/8085 có tất cả 16 đường hay 16 bit. BUS này chỉ có một hướng (chiều) đi ra từ CPU. BUS dữ liệu (Data bus) : Dữ liệu trao đổi giữa CPU và các vi mạch bên ngoài, các thiết bị ngoài sử dụng BUS này. Tùy loại CPU có thể là 8 bit, 16 bit, 32 bit, 64 bit. Số bit này thường dùng để nói tới loại CPU. Đặc điểm cơ bản của BUS là hai chiều. BUS điều khiển (Control bus): Các tín hiệu điều khiển phát ra từ CPU tới các vi mạch chức năng khác nhau trên bo mạch chủ, các thiết bị ngoài nối với CPU. Các tín hiệu này được dùng để đồng bộ mọi bước hoạt động của máy tính. 4) Định thời và điều khiển Khối này tạo ra tất cả các tín hiệu đồng hồ, các tín hiệu điều khiển bên trong CPU, CPU với bên ngoài qua Bus điều khiển (Control bus). c) Bộ nhớ (Memory) Chương trình ứng dụng, hệ điều hành, dữ liệu, ngăn xếp đều dùng chung không gian nhớ. Với họ 8080/8085 có 16 dây địa chỉ (A15 A0) cho dung lượng nhớ tối đa là 65.535 địa chỉ ô nhớ. Nếu mỗi ô nhớ là 1 byte sẽ có 65.535 byte hay 64 KB. Kiến trúc sử dụng 64 bytes đầu tiên (000F-0000) để đặt các vector ngắt của các lệnh RST. d) Ngắt (Interrupts) CPU 8085 có 5 đầu vào tín hiệu ngắt (interrupt), trình bày theo thứ tự ưu tiên từ thấp đến cao: INTR, che được. Khi có ngắt xuất hiện, CPU sẽ tìm lệnh trên BUS, lệnh đó có thể là trong các lệnh RESTART (đều có hiệu lực khởi động lại CPU) loại RST (RST 5.5, RST 6.5, RST 7.5 và TRAP). CPU bảo lưu giá trị của PC vào ngăn xếp, chuyển tới ô nhớ có giá trị N*8, trong đó N có giá trị từ 0 đến 7 mà lệnh RST cung cấp. Ô nhớ này chứa địa chỉ của chương trình xử lý cho ngắt đó như sau: Tên của ngắt Địa chỉ chương trình khởi động tại: TRAP 24 HexPTIT RST 5.5 2C Hex RST 6.5 34 Hex RST 7.5 3C Hex (ưu tiên cao nhất, tác dụng sườn lên của xung ngắt) Lệnh gọi CALL (lệnh có 3 byte ). CPU “gọi” một chu trình con có địa chỉ xác định ở byte thứ 2 và thứ 3 của lệnh này. RST5.5, che được. Khi có ngắt này, CPU bảo lưu giá trị của PC vào ngăn xếp, nhảy tới địa chỉ cố định 002Ch (h-hexadecimal). RST6.5, che được. Khi có ngắt này, CPU bảo lưu giá trị của PC vào ngăn xếp, nhảy tới địa chỉ cố định 0034h. RST7.5 che được. Khi có ngắt này, CPU bảo lưu giá trị của PC vào ngăn xếp, nhảy tới địa chỉ cố định 003Ch. Trap, không che. Khi có ngắt này, CPU bảo lưu giá trị của PC vào ngăn xếp, nhảy tới địa chỉ cố định 0024h. 38
- Xây dựng các Hệ thống nhúng Tất cả các ngắt che được có thể lập không che hay che lập trình qua lệnh EI và DI. RST 5.5, RST6.5 và RST7.5 lập trình bằng lệnh SIM. e) Cổng vào/ra (I/O ports) Họ 8080/8085 có tất cả 256 cổng vào và ra, 256 cổng ra chạy theo lệnh IN hay OUT. f) Tập lệnh (Instruction Set) Tập lệnh của CPU Intel 8085 gồm các nhóm sau đây: - Lệnh chuyển dữ liệu. - Lệnh số học – cộng, trừ, tăng, giảm. - Logic - AND, OR, XOR và quay vòng. - Chuyển điều khiển đi có/không điều kiện, gọi chu trình, trở về chổ cũ khi thoát khỏi chu trình, khởi động lại. - Lệnh vào/ra (I/O). - Các lệnh thao tác bit, cờ, cho phép/không cho phép ngắt, ngăn xếp, g) Chế độ địa chỉ (Addressing modes) - Kiểu thanh ghi: qui chiếu dữ liệu trong 1 thanh ghi hay đôi thanh ghi. - Gián tiếp qua thanh ghi: Thanh ghi chứa địa chỉ ô nhớ nơi có dữ liệu. Qui chiếu trực tiếp – Dữ liệu 8 hay 16 bit. i) Các nhóm tín hiệu trong CPU 8080/8085 A8 – A15. Nhóm tín hiệu ra: 8 bit cao của địa chỉ, các chân này là các chân được nối với bên ngoài qua mạch 3 trạng thái. Các phần tử 3 trạng thái sẽ được đặt ở trạng thái trạng thái trở kháng cao (còn gọi là trạng thái không kết nối) trong các trường hợp một trong các tín hiệu HOLD hay HALT là tích cực. AD0 – AD7. Nhóm tín hiệu dồn kênh cho các tín hiệu địa chỉ và tín hiệu dữ liệu theo chia sẻ thời gian, 3 trạng thái. Ở giai đoạnPTIT đầu của chu kỳ máy, T1 của M1, sẽ là byte thấp của 16 bit địa chỉ từ A0 đến A7. ALE (Address Latch Enable). Tín hiệu ra qua mạch 3 trạng thái. Được sử dụng để chốt byte thấp của tín hiệu địa chỉ (A0 – A7) từ nhóm AD0-AD7. Tín hiệu này được tạo ra trong giai đoạn đầu tiên của chu kỳ máy, T1 của M1, và cũng được dùng để chốt các tín hiệu trạng thái S0 và S1 khi cần thiết. S0, S1 (Data BUS Status). Là các tín hiệu chỉ trạng thái của các chân thuộc BUS dữ liệu trong mỗi chu kỳ máy. Tổ hợp của hai tín hiệu này cũng cho biết trạng thái của CPU như sau: S1 S0 Trạng thái hoạt động của BUS dữ liệu 0 0 Trạng thái HALT 0 1 CPU đang thực hiện thao tác WRITE 1 0 CPU đang thực hiện thao tác đọc (READ) 1 1 CPU đang thực hiện thao tác nhận lệnh (Instruction Fetch) 39
- Xây dựng các Hệ thống nhúng RD (Read). Chân ra 3 trạng thái. Nằm trong nhóm tín hiệu điều khiển. Tín hiệu tích cực khi CPU tiến hành đọc dữ liệu từ bộ nhớ hoặc từ thiết bị ngoại vi. Trong chế độ HALT hoặc DMA, chân ra này ở trạng thái trạng thái trở kháng cao. WR (Write). Chân ra 3 trạng thái. Nằm trong nhóm tín hiệu điều khiển. Tín hiệu tích cực khi CPU tiến hành ghi dữ liệu vào bộ nhớ hoặc đưa dữ liệu ra thiết bị ngoại vi. Trong các chế độ HALT hoặc DMA, chân ra này ở trạng thái trạng thái trở kháng cao. IO/M. Trạng thái logic của đầu ra này cho biết CPU đang làm việc với thiết bị ngoại vi hay với bộ nhớ. Nếu là logic 1, CPU đang truy cập thiết bị vào/ra, còn nếu là 0, CPU đang truy cập bộ nhớ. Kết hợp với hai đầu ra RD và WR để tạo ra các tín hiệu I/OR, I/OW, MEMR, và MEMW trong trường hợp sử dụng địa chỉ tách biệt đối với thiết bị vào/ra. Nằm trong nhóm tín hiệu điều khiển, IO/M cũng là đầu ra 3 trạng thái. Interrupts. P8085 có ngắt đa mức. Có 5 chân ngắt tất cả: (INTR, RST5.5, RST6.5, RST7.5 và TRAP). Ngoài chân ngắt không che được là TRAP, các chân khác đều có thể che hoặc không che nhờ lập trình phần mềm. . INTR: Chân nhận yêu cầu ngắt từ bên ngoài, được đáp ứng theo nguyên tắc quay vòng (polling) hoặc vector thông qua lệnh RST . Các yêu cầu ngắt RST: Có 3 đầu vào yêu cầu ngắt với các mức ưu tiên khác nhau là RST7.5, RST6.5 và RST5.5. Khi yêu cầu ngắt xuất hiện tại các chân này, CPU tự động chuyển đến các vector ngắt tương ứng. Cụ thể như sau: - RST5.5 là mức ưu tiên thấp nhất, phản ứng theo mức điện áp trên chân yêu cầu ngắt, địa chỉ vector ngắt này nằm ở ô nhớ có địa chỉ 2CH. - RST6.5: Ngắt ưu tiên thấp thứ 2, phản ứng theo mức điện áp trên chân yêu cầu ngắt, địa chỉ vector ngắt này nằm ở ô nhớ 34H - RST7.5: Mức ưu tiên caoPTIT nhất. Phản ứng theo sườn lên của xung yêu cầu ngắt. Sườn lên của xung này tác động lên một Flip-Flop, mạch này giữ lại yêu cầu ngắt cho đến khi được xoá nhờ tín hiệu đáp ứng nhận biết yêu cầu ngắt (Acknowledge). Địa chỉ của vector ngắt này nằm ở ô nhớ 3CH TRAP: Là chân nhận yêu cầu ngắt không che được (dĩ nhiên là nó có mức ưu tiên cao nhất). Địa chỉ của vector ngắt này ở ô nhớ 24H. INTA. Tín hiệu ra nhận biết yêu cầu ngắt tại chân INTR. Các yêu cầu ngắt RST5.5, RST6.5, RST7.5 và TRAP không tác động đến INTA. HOLD. Trạng thái logic 1 ở chân này là yêu cầu của thao tác DMA. Các đầu ra RD, WR, IO/M và ALE sẽ được đưa về trạng thái trở kháng ra cao. HLDA. Tín hiệu nhận biết yêu cầu HOLD. RESET IN. Logic thấp 0 ở đầu vào của chân này yêu cầu tái khởi động hệ vi xử lý. Do tác động của tín hiệu RESET IN tích cực, giá trị của thanh đếm chương trình PC sẽ được nạp lại là 0000h. Các mặt nạ ngắt và tín hiệu HLDA cũng được tái thiết lập về giá trị mặc định. RESET OUT. Đầu ra nhận biết hệ vi xử lý được tái khởi động. Dùng tín hiệu này để tái khởi động toàn bộ hệ thống. 40
- Xây dựng các Hệ thống nhúng READY. Logic 1 ở đầu vào này thông báo trạng thái sẵn sàng cung cấp dữ liệu cho CPU hoặc nhận dữ liệu từ CPU của các thiết bị ngoại vi. SID (Serial Input Data). Là cổng vào của dữ liệu nối tiếp của hệ Vi xử lý. Bit hiện diện tại cổng này được đọc vào CPU nhờ lệnh RIM, bit sẽ được đưa vào bit cao của Acc (MSB). SOD (Serial Output Data). Bit cao (MSB) của Acc được truyền ra ngoài chân này khi sử dụng lệnh SIM. X1, X2. Lối nối thạch anh hoặc một mạch dao động để tạo xung nhịp cho CPU. Có thể sử dụng thạch anh có tần số dao động trong khoảng từ 0.5 đến 3MHz. CLK. Đầu ra của xung nhịp, có thể làm xung nhịp cho các thành phần chức năng khác trong hệ vi xử lý. Vcc, Vss. Lối nối nguồn +5V và GND cho CPU 8085. Cũng cần nhắc lại rằng, CPU 8085 chỉ cần một nguồn nuôi duy nhất là +5V, khả năng cung cấp dòng của nguồn cần được thiết kế tuỳ theo nhu cầu của toàn hệ vi xử lý. j) Biểu đồ thời gian (system timing) Khi thiết kế phần cứng của một HTN nói riêng hay một thiết bị kĩ thuật số nói chung, khái niệm về biểu đồ thời gian là hết sức quan trọng. Nắm bắt được ý nghĩa của biểu đồ thời gian sẽ có ích khi tiến hành hiệu chỉnh và tìm lỗi phần cứng. Lỗi phần cứng thường xảy ra khi các tín hiệu hoạt động không đứng thời điểm ở đầu vào mạch số, gây ra lỗi, đặt biệt hay xảy ra ở các mạch tổ hợp. Dưới đây là một số định nghĩa ở các bộ xử lý: . Trạng thái máy: T (machine State): được định nghĩa là thời gian của một chu kì xung đồng hồ hệ thống (CPU Clock-out). Ví du nếu Clock-out=10 Mhz, thì T=200ns. Các sườn xung lên/xuống được sử dụng bên trong CPU cho các thao tác khác nhau. . Chu kì máy (hay chu kì BUS): M (machine cycle): Là tập hợp của một số các T để CPU hay một vi mạch (PTIT như DMAC 8237) khi nắm quyền kiểm soát BUS hệ thống, thực hiện xong một thao tác (một phần của quá trình gởi ra hay đọc vào một dữ liệu) trên BUS hệ thống. . Chu kì lệnh: (Instrution cycle): là tập các M cần thiết để hoàn thành một lệnh máy. Hình sau đây mô tả thực thi của lệnh STA cua CPU Intel 8085: Cất nội dung trong thanh ghi ACC của CPU và ô nhớ trỏ trục tiếp bởi 2 byte tiếp theo của lệnh: ([byte 3], [byte 2]) <- ACC. Ví dụ: cú pháp hợp ngữ như sau: STA 0610h, giả định trong ACC có một giá trị nào đó, ta sẽ cất (STore) giá trị đó vào ô nhớ 1006: Trong đó STA=00110010: OPCODE Địa chỉ thấp của ô nhớ RAM: 00000110 Địa chỉ cao của ô nhớ RAM: 00010000 Biểu đồ thời gian thực hiện như sau: 41
- Xây dựng các Hệ thống nhúng Chu kì lệnh M1 M2 M3 M4 T1 T2 T3 T4 T1 T2 T3 T1 T2 T3 T1 T2 T3 CPU Clock-CLK Kiểu chu ki máy Đọc bộ nhớ Đọc bộ nhớ Đọc bộ nhớ Ghi bộ nhớ PC=PC+2, trỏ tới Phát địa chỉ lấy ở BUS địa chỉ PC trỏ tới byte đầu tiên là mã PC=PC+1, trỏ tới lệnh (OPCODE) của lệnh bute thứ 2 của lệnh byte thứ 3 của lệnh M2 va M3 trỏ tới bộ nhớ BUS Dữ liệu OPCODE Byte thấp của địa Byte cao của địa Ghi nội dung của chỉ trực tiếp chỉ trực tiếp ACC vào ô nhớ đó Mi: Chu kì máy , Ti: trạng thái máy Ví dụ thực hiện lệnh có độ dài 3 byte, cất nội dung của ACC vào ô nhớ trỏ bởi địa chỉ trong lệnh: STA [ địa-chỉ-thấp, địa-chỉ-cao] Hình 2.3 Các khái niện qui chiếu theo CPU Clock Ta có thể theo dõi các xung điện này khi sử dụng máy hiện sóng (OSCILOSCOPE) với ít nhất 2 tia cặp vào vị trí thích hợp trên bo mạch, lấy xung đồng hồ CPU CLK làm chuẩn để đồng bộ các tín hiệu. Việc thực hiện một lệnh trong CPU P8085 thực tế là một chuỗi các thao tác READ và WRITE. Mỗi thao tác READ hay WRITE tươngPTIT ứng với một chu kỳ máy M. Mỗi lệnh được thực hiện qua 1 đến 5 chu kỳ máy. Mỗi chu kỳ máy cần từ 3 đến 5 nhịp đồng hồ. Ví dụ lệnh STA nói trên có 5 chu kì máy, 13 trạng thái máy. Sau đây là mô tả hoạt động của CPU 8085 với các chu kì đồng hồ hệ thống và các thao tác khác. Ở chu kỳ máy thứ nhất, CPU thực hiện nạp mã lệnh (Instruction Code Fetch) trong RAM, còn gọi là chu kỳ Opcode Fetch. Hình dưới cho thấy rằng việc thực hiện chu kỳ máy M1 (Opcode Fetch), CPU gửi ra các tín hiệu IO/M, S1 và S0 (tương ứng 0, 1, 1 trên biểu đồ thời gian) xác định thao tác của chu kỳ. 42
- Xây dựng các Hệ thống nhúng Hình 2.4 Lưu đồ thời gianPTIT cơ sở của CPU 8085 (Theo tài liệu của hãng Intel) CPU cũng đồng thời gửi 16 bit địa chỉ ra ở chu kỳ máy đầu tiên, ngay từ nhịp đầu tiên (T1) để xác định ô nhớ hay thiết bị I/O. Phần địa chỉ byte thấp đặt trên AD7-AD0 (Program Counter Low byte-PCL) chỉ tồn tại trong thời gian 1 nhịp nên cần phải được chốt lại nhờ tín hiệu ALE ở mức cao. Còn phần địa chỉ byte cao đặt trên A16-A8. Khi D7 – D0 đã ổn định trên các dây dữ liệu, CPU gửi tín hiệu RD. Khi đã nhận được dữ liệu, RD chuyển lên mức cao để cấm vị trí ô nhớ hay thiết bị I/O. Số lượng chu kỳ máy và trạng thái cần cho thực hiện một lệnh là cố định, song số lượng này khác nhau đối với các lệnh khác nhau, tuỳ theo độ dài của từ lệnh (1 byte, 2 bytes, 3 bytes). Số lượng chu kỳ máy phụ thuộc vào số lần CPU phải liên lạc với các phần tử khác trong hệ thống, chủ yếu là với các chip khác. 43
- Xây dựng các Hệ thống nhúng Hình 2.5 Biểu đồ thời gian của chu kì tìm lệnh. 2.2 CPU 8085 VÀ HỆ THỐNG BUS Việc đầu tiên trong thiết kế một HTN là lựa chọn CPU và hình thành BUS hệ thống trước khi mở rộng với các thành phần khác như ROM, RAM và các cổng ghép nối. Tiếp tục với tư duy sử dụng họ Intel 808X, ta sẽ thiết kế hệ thốngPTIT BUS như sau: Đặc điểm của các chân/tín hiệu phát ra từ CPU: Như trên đã liệt kê, CPU đưa ra 3 tập hợp tín hiệu chính, bao gồm: - Tập tín hiệu địa chỉ trên các chân AD7 – AD0 và A8 – A15, trong đó AD7 – AD0 là các chân 2 chức năng : Lúc ở (M1, T1) là địa chỉ phần thấp, sau đó là dữ liệu. Do đó để tạo ra 16 đường địa chỉ ta cần chốt các giá trị này lại với hỗ trợ của tín hiệu ALE (Address Latch Enable) với vi mạch SN74373. Tập hợp này tạo thành BUS địa chỉ. - Tập các chân dữ liệu AD7 – AD0 ở các chu ki M/T tiếp theo của chu kì lệnh. Tập hợp này tạo thành BUS dữ liệu. BUS dữ liệu có độ rộng khác nhau theo loại CPU, có thể là 4, 8, 16, 32, 64, hay trên một loại BUS đặc biệt chung ghép nối vào vi mạch đồng xử lí (ChipSet), gọi là BUS phía trước (Front Side Bus-FSB) ở các mát PC hiện đại, độ rông co thể lên 128, 256 hat 1024 bit. - Tập các tín hiệu điều khiển phát ra từ CPU, là BUS điều khiển. - Do cần ghép nối với các thiết bị bên ngoài, cần một BUS khác gọi là BUS hệ thống mở rộng, ví du: ISA, EISA, và phổ biến là PCI. Các BUS này cần được định nghĩa tường minh và có giao thức hoạt động rất phức tạp. 44
- Xây dựng các Hệ thống nhúng Đồng hồ thạch anh nhịp chuẩn A15 A15 A8 A8 Address BUS L ALE STB A7 a A7 t CPU 8085 A0 c A0 h AD7 D7 DATA BUS AD0 D0 RD/ WR IO/M Control BUS INTA Nguồn nuôi một chiều Hình 2.6 Cấu hình tối thiểu: CPU 8085 và tạo BUS hệ thống Do chức năng của BUS là để truyền thông tin giữa các thành phần hợp thành của máy tính và do đó có vai trò rất quan trọng ảnh hưởng tới hiệu năng của máy tính, nên đôi khi phải xem xét tới một khái niệm về thông lượng của BUSPTIT (như ở bất kì loại thiết bị truyền thông tin nào). Đó là giá trị về lượng dữ liệu tối đa được chuyển qua BUS trong một khoản thời gian nào đó, thông thường qui theo CPU clock (hay chu kì lệnh): Tốc độ BUS MH ) x số byte một lần truyền Tốc độ truyền tối đa = Số chu k Clock cho một lần truyền 2.2.1 Khái niệm và bản chất vật lý c a các BUS Hoạt động của một hệ kĩ thuật số thực chất là việc trao đổi và xử lý các giá trị nhị phân giữa các thành phần, các khối và các mạch vi điện tử trong toàn bộ hệ thống. Như đã biết, các giá trị nhị phân (hoặc 0 hoặc 1) được thể hiện qua mức điện áp so với một chuẩn nhất định, ví dụ chuẩn TTL (transistor-transistor logic) giá trị 0 tương ứng với mức điện áp thấp (từ 0V đến +0,8V) và giá trị 1 tương ứng với mức điện áp từ khoảng +3V đến +5V. Để biểu diễn một số liệu nhị phân, các phần tử mang thông tin được liên kết kề nhau theo nhóm (ví dụ 1byte là 8 bits). Để đảm nhận công việc di chuyển các dữ liệu này trong toàn bộ hệ thống, có các đường dây truyền dẫn điện 45
- Xây dựng các Hệ thống nhúng được ghép song song thành hệ thống, mỗi dây truyền dẫn dành riêng cho 1 bit. Tập các đường truyền dẫn dành riêng cho các tín hiệu có cùng chức năng (dữ liệu, địa chỉ, điều khiển và trọng số (2n)) được gọi là BUS. BUS giải quyết một vấn đề kĩ thuật cơ sở quan trọng là: nối được hai đầu ra của hai mạch điện tử khác nhau mà không làm cho đầu ra nào bị hỏng. Yếu tố cơ bản ở đây là các đầu ra phải được điều khiển bằng chương trình máy tính để đưa đầu ra của vi mạch vào một trong hai chế độ làm việc đặc biệt (hay gọi là trạng thái) sau: hoạt động bình thường, tải năng lượng lên dây kết nối và ở trạng thái không hoạt động và có trở kháng đầu ra đủ cao (Tri-state) để không đoản mạch đầu ra của vi mạch kia. Làm được như vậy tín hiệu sẽ đi được cả hai chiều trên cùng một dây nối. Và hệ quả là giảm đi một nửa các chân nối ra/vào của vi mạch số. Như vậy, trong một hệ máy tính BUS có một số tiêu chí sau đây: - BUS phải tuân theo 1 chuẩn nào đó. Tập các quy tắc của chuẩn còn được gọi là giao thức bus (bus protocol) - Có thể có nhiều loại bus khác nhau được sử dụng, các bus này nói chung là không tương thích với nhau. - Bus thường phân loại theo 3 cách sau: • Theo tổ chức phần cứng • Theo giao thức truyền thông ( bus đồng bộ và không đồng bộ) • Theo loại tín hiệu truyền trên bus : BUS dữ liệu, là BUS hai chiều, có trạng thái trở kháng cao. BUS địa chỉ: là BUS một chiều vì thông thường địa chỉ phát sinh ra từ CPU. Tuy nhiên phải có khả năng ở trạng thái trở kháng cao khi cần thiết. BUS điều khiển, các tín hiệu điều khiển từ CPU hay vi mạch chức năng khác Các BUS này hợp lại thành BUS của CPU. BUS của CPUPTIT thường có tải đầu ra yếu, nên BUS này được khuyếch đại, còn có CPU Clock_out (hay BUS Clock) tạo thành BUS hệ thống. Sự khác nhau là ở chổ: BUS c a CPU: BUS hệ thống: . Đi ra trực tiếp từ CPU . Không nối trực tiếp vào . BUS dồn kênh CPU, mà qua khuyếch đại BUS . Không còn dồn kênh, các BUS tách biệt . Phụ tải lớn hơn . Có BUS Clock trên BUS 46
- Xây dựng các Hệ thống nhúng Hình 2.7 CPU Bus và BUS hệ thống Từ khái niệm trên, dễ dàng suy ra bản chất vật lý của các BUS trong một hệ máy tính: đó là các đường truyền dẫn điện, có thể dưới các dạng cáp nhiều sợi, đường dẫn trong các bảng mạch in v.v Khả năng và chất lượng dẫn điện của các đường truyền dẫn này đóng vai trò quan trọng và quyết định đối với hoạt động của một hệ máy tính. Đường truyền dẫn kém, điện trở thuần cao có thể gây ra sự suy giảm của tín hiệu điện dẫn đến các hiện tượng mất hoặc sai dữ liệu. BUS là đường dẫn điện nội bộ mà theo đó các tín hiệu được truyền từ bộ phận này đến các bộ phận khác trong hệ máy tính. PTIT 2.2.2 Khuyếch đại BUS (bus driver) Tín hiệu phát sinh từ CPU thường có công suất thấp chỉ đủ cho một số tải danh định (fan-out), không đủ để mở rộng BUS, nhất là khi bus khá dài và có nhiều thiết bị nối với nó. Chính vì thế mà hầu hết các BUS được nối một số vi mạch khuyếch bus (bus driver), về cơ bản đó là các vi mạch khuyếch đại tín hiệu số. Hầu hết vi mạch khác nối với BUS qua vi mạch đầu vào (bus receiver). Đối với các thiết bị khi thì đóng vai trò đưa tín hiệu lên BUS (master), khi thì đóng vai trò nhận tín hiệu từ BUS (slave), người ta sử dụng một vi mạch kết hợp có khả năng phát ra và nhận về, gọi là vi mạch phát và thu tín hiệu (bus transceiver). Các chip này đóng vai trò ghép nối và là thiết bị 3 trạng thái, cho phép nó có thể ở trạng thái thứ 3 trở kháng cao. Các vấn đề quan trọng nhất liên quan đến thiết kế bus là: xung đồng hồ bus (clock bus: sự phân chia theo thời gian, hay còn gọi là bus blocking), cơ chế trọng tài bus (bus arbitration), xử lý ngắt và xử lý lỗi. Các bus có thể được chia theo giao thức truyền thông thành hai loại riêng biệt là bus đồng bộ và bus không đồng bộ phụ thuộc vào việc sử dụng clock bus. 47
- Xây dựng các Hệ thống nhúng 2.2.3 Bus đồng bộ (Synchronous bus): Bus đồng bộ có một tín hiệu trên đường dây BUS clock dạng sóng vuông, với tần số ví dụ, trong khoảng vài MHz ÷ GHz. Mọi hoạt động bus xảy ra đều qui chiếu vào BUS Clock, trong một số nguyên lần chu kỳ này và được gọi là chu kỳ bus. Hình sau giản đồ thời gian của một bus đồng bộ với tần số xung BUS clock là 4MHz, như vậy chu kỳ bus là 250ns. Giả sử đọc 1 byte từ bộ nhớ chiếm 3 chu kỳ bus (750 ns), tương ứng với T1, T2, T3 như hình vẽ. Vì tất cả các bóng bán dẫn khi chuyển mức không phải là tức thời, mà có quá độ và mất một khoản thời gian, nên trên hình vẽ có các sườn xung, ta giả sử các sườn xung kéo dài 10ns. Con số này rất quan trọng khi thiết kế mạch kĩ thuật số ! Hình2.8 Chu k đọc đồng bộ • T1 bắt đầu bằng cạnh dương của xung clockPTIT, trong một phần thời gian của T1, vi xử lý đặt địa chỉ byte cần đọc lên bus địa chỉ. Sau khi tín hiệu địa chỉ được xác lập, vi xử lý đặt các tín hiệu MREQ và RD tích cực mức thấp, tín hiệu MREQ (Memory Request) - xác định truy xuất bộ nhớ chứ không phải thiết bị I/O, còn tín hiệu RD - chọn đọc chứ không phải ghi dữ liệu. • T2: thời gian cần thiết để bộ nhớ giải mã địa chỉ và đưa dữ liệu lên bus dữ liệu. • T3: tại cạnh âm của T3, vi xử lý nhận dữ liệu trên bus dữ liệu, chứa vào thanh ghi bên trong vi xử lý và chốt dữ liệu. Sau đó vi xử lý đảo các tín hiệu MREQ v à RD. Như vậy thao tác đọc đã hoàn thành, tại chu kỳ máy tiếp theo vi xử lý có thể thực hiện thao tác khác. Các giá trị cụ thể về thời gian của hình vẽ trên có thể được giải thích chi tiết như sau: • TAD: TAD <110ns, nghĩa là nhà sản xuất vi xử lý đảm bảo rằng trong mọi chu kỳ đọc toán hạng từ bộ nhớ, vi xử lý sẽ đưa ra tín hiệu địa chỉ không nhiều hơn 110 ns tính từ thời điểm cạnh dương của T1. • TDS: giá trị nhỏ nhất là 50ns, có nghĩa là nhà sản xuất bộ nhớ phải đảm bảo rằng dữ liệu đã ổn định trên bus dữ liệu ít nhất là 50ns trước điểm giữa cạnh âm của T3. Yêu cầu này đảm bảo cho vi xử lý đọc dữ liệu tin cậy. Khoảng thời gian bắt buộc đối với TAD và TDS xác định rằng trong trường hợp xấu nhất, bộ nhớ chỉ có 250 + 250 + 125 – 110 – 50 = 465 ns tính từ thời điểm có tín hiệu địa chỉ cho tới khi tạo ra dữ liệu trên bus dữ liệu. Nếu bộ nhớ không có khả năng đáp ứng đủ nhanh, nó phát tín hiệu WAIT trước cạnh âm 48
- Xây dựng các Hệ thống nhúng của T2. Thao tác này đưa thêm các trạng thái chờ – wait state (tức là đưa thêm vào 1 chu kỳ bus), khi bộ nhớ đã đưa ra tín hiệu ổn định, nó sẽ đảo WAIT thành WAIT • TML: đảm bảo tín hiệu địa chỉ sẽ được xác lập trước tín hiệu MREQ ít nhất 60ns. Khoảng thời gian này sẽ quan trọng nếu tín hiệu MREQ điều khiển quá trình tạo tín hiệu chon chip CS hay CE do một số chip nhớ đòi hỏi phải nhận được tín hiệu địa chỉ trước tín hiệu chọn chip. Như vậy, không thể chọn chip nhớ với thời gian thiết lập 75ns. • TM, TRL cho phép hai tín hiệu MREQ và RD tích cực trong khoảng thời gian 85ns tính từ thời điểm xuống của xung clock T1. Trong trường hợp xấu nhất, chíp nhớ chỉ có 250 + 250 – 85 – 50 = 365ns sau khi 2 tín hiệu trên tích cực để đưa dữ liệu ra bus dữ liệu. Sự bắt buộc về thời gian này bổ sung thêm sự bắt buộc thời gian với tín hiệu clock. • TMH, TRH : thời gian để các tín hiệu MREQ và RD được đảo sau khi dữ liệu đã được vi xử lý nhận vào. • TDH: Thời gian bộ nhớ cần giữ dữ liệu trên bus sau khi tín hiệu RD đã đảo. Giản đồ thời gian một chu kỳ đọc trên bus đồng bộ đã được đơn giản hoá so với thực tế, trong đó các tín hiệu cần sử dụng lớn hơn nhiều. Giá trị tới hạn của các thông số cho trong bảng sau: Ký hiệu Tham số Min (ns) Max (ns) TAD Thời gian trể của địa chỉ 100 TML Thời gian địa chỉ ổn định trước MREQ 60 TM Thời gian trể của MREQ so với cạnh âm 85 của T1 TRL Thời gian trễ của RD bù so sườn xuống 85 của tín hiệu đồng bộ T1PTIT TDS Thời gian thiết lập dữ liệu trước sườn 50 xuống của tín hiệu xung clock( tín hiệu đồng hồ) TMH Thời gian trể của MREQ bù so với sườn 85 xuống của tín hiệu đồng hồ T3 TRH Thời gian trể của RD bù so với sườn 85 xuống của tín hiệu đồng hồ T3 TDH Thời gian lưu trữ dữ liệu từ lúc đảo tín 0 hiệu RD Truyền theo khối: Ngoài các chu kỳ đọc/ghi, một số bus truyền dữ liệu đồng bộ còn hỗ trợ truyền dữ liệu theo khối. Khi bắt đầu thao tác đọc khối, vi mạch làm chủ bus (bus master) báo cho vi mạch khác (slave) biết số byte cần được truyền đi, thí dụ truyền con số này đi trong chu kỳ T1, sau đó đáng lẽ truyền đi 1 byte, slave đưa ra 49
- Xây dựng các Hệ thống nhúng trong mỗi chu kỳ 1 byte cho tới khi đủ số byte được thông báo. Như vậy, khi đọc dữ liệu theo khối, n byte dữ liệu cần n+2 chu kỳ clock chứ không phải 3n chu kỳ. Một cách khác để cho truyền dữ liệu nhanh hơn là giảm chu kỳ. Ở ví dụ trên: 1 byte được truyền đi trong 750ns, vậy bus có tốc độ truyền 1.33MBps. Nếu xung clock có tần số 8MHz, thời gian 1 chu kỳ chỉ còn một nửa, tốc độ sẽ là 2.67MBps. Tuy nhiên, giảm chu kỳ bus dẫn đến khó khăn về mặt kỹ thuật, các tín hiệu truyền trên các đường khác nhau không phải luôn có cùng tốc độ, dẫn đến hiệu ứng méo dạng tín hiệu. Điều quan trọng là thời gian chu kỳ phải dài hơn so với sự tồn tại của méo dạng tín hiệu để tránh việc những khoảng thời gian được số hoá lại trở thành các đại lượng biến thiên liên tục. 2.2.4 Bus không đồng bộ (Asynchronous bus) Bus không đồng bộ không sử dụng xung BUS clock, chu kỳ của nó có thể kéo dài tuỳ ý và có thể khác nhau đối với các cặp thiết bị khác nhau, gọi là đối thoại tuần tự bởi các tín hiệu điều khiển. Làm việc với các bus đồng bộ dễ dàng hơn do nó được định thời một cách gián đoạn , tuy vậy chính đặc điểm này cũng dẫn đến nhược điểm. Mọi công việc được tiến hành trong khoảng thời gian là bội số của xung clock, nếu 1 thao tác nào đó của vi xử lý hay bộ nhớ hoàn thành trong 3,1 chu kỳ thì nó cũng sẽ phải kéo dài trong 4 chu kỳ. Khi đã chọn chu kỳ bus và đã xây dựng bộ nhớ, I/O card cho bus này thì khó có thể tận dụng những tiến bộ của công nghệ. Chẳng hạn sau khi đã xây dựng bus với sự định thời như trên, công nghệ mới đưa ra các vi xử lý và bộ nhớ có thời gian chu kỳ là 100ns chứ không còn là 750ns như cũ, thì chúng vẫn chạy với tốc độ thấp như các vi xử lý, bộ nhớ loại cũ, bởi vì giao thức bus đòi hỏi bộ nhớ phải đưa được dữ liệu ra và ổn định trước thời điểm cạnh âm của T3. Nếu có nhiều thiết bị khác nhau cùng nối với 1 bus, trong đó có thể có một số thiết bị hoạt động nhanh hơn hơn các thiết bị khác thì cần phải đặt bus hoạt động phù hợp với thiết bị có tốc độ thấp nhất. Bus không đồng bộ ra đời nhằm khắc phục những nhược điểm của bus đồng bộ. PTIT Hình 2.9 BUS không đồng bộ, hoạt động đồng bộ bởi “đối thoại” giữa các tín hiệu điều khiển. 50
- Xây dựng các Hệ thống nhúng Trước hết master phát ra địa chỉ nhớ mà nó muốn truy cập, sau đó phát tín hiệu MREQ bù tích cực để xác định cần truy xuất bộ nhớ. Tín hiệu này cần thiết khi bộ nhớ và các cổng I/O sử dụng chung miền địa chỉ. Sau khi phát địa chỉ, bên master cũng phải phát tín hiệu RD tích cực để bên slave biết rằng master sẽ thực hiện thao tác đọc chứ không phải ghi. Các tính hiệu MREQ bù và RD bù được đưa ra sau tín hiệu địa chỉ một khoảng thời gian phụ thuộc tốc độ hoạt động của master. Sau khi 2 tín hiệu này đã ổn định, master sẽ phát ra tính hiệu MSYN (master synchrization) ở mức tích cực để báo cho slave biết rằng các tín hiệu cần thiết đã sẵn sàng trên bus, slave có thể nhận lấy. Khi slave nhận được tín hiệu này, nó sẽ thực hiện công việc với tốc độ nhanh nhất có thể được, đưa dữ liệu của ô nhớ được yêu cầu lên bus dữ liệu. Khi hoàn thành slave sẽ phát tín hiệu SSYN (slave synchronization) tích cực. Master nhận được tín hiệu SSYN tích cực thì xác định được dữ liệu của slave đã sẵn sàng nên thực hiện việc chốt dữ liệu, sau đó đảo các đường địa chỉ cũng như các tín hiệu MREQ, RD, và SSYN. Khi slave nhận được tín hiệu MSYN không tích cực, nó xác định kết thúc chu kỳ và đảo tín hiệu SSYN làm bus trở lại trạng thái ban đầu, mọi tín hiệu đều không tích cực, chờ bus master mới. Trên giản đồ thời gian của bus bất đồng bộ, ta sử dụng mũi tên để thể hiện nguyên nhân và kết quả MSYN tích cực dẫn đến việc truyền dữ liệu ra bus dữ liệu và đồng thời cũng dẫn đến việc slave phát ra tín hiệu SSYN tích cực, đến lượt mình tín hiệu SSYN lại gây ra sự đảo mức của các đường địa chỉ, MREQ bù, RD bù, và SSYN. Cuối cùng sự đảo mức của MSYN lại gây ra sự đảo mức tín hiệu SSYN và kết thúc chu kỳ. Tập các tín hiệu điều khiển phối hợp với nhau như vậy được gọi là kết nối hoàn toàn (full handshake), chủ yếu gồm 4 tín hiệu sau: • MSYN tích cực. • SSYN bù tích cực để đáp lại tín hiệu MSYN. • MSYN được đảo để đáp lại tín hiệu SSYN bù (tích cực). • SSYN bù được đảo để đáp lại tính hiệu MSYN không tích cực. Ta có thể nhận thấy bắt tay toàn phần là độc lập thời gian, mỗi sự kiện được gây ra bởi 1 sự kiện trước đó chứ không phải bởi xung BUS clock. Nếu 1 cặp master-slave nào đó hoạt động chậm thì cặp master-slave kế tiếp không hề bị ảnh hưởng. Tuy ưu điểm của bus bất đồng bộ rất rõ ràng, nhưng trong thực tế phần lớn các bus đang sử dụng là loại đồng bộ. Nguyên nhân là các hệ thống sử dụng bus đồng bộ với các vi mạch đồng bộ về tiêu chuẩn kĩ thuật, tốc đPTITộ nhanh, khối lượng bit lớn, khoản cách BUS ngắn (trên một bo mạch chủ) và dễ thiết kế hơn. CPU chỉ cần chuyển các mức tín hiệu cần thiết sang trạng thái tích cực là bộ nhớ đáp ứng ngay, không cần tín hiệu phản hồi. Chỉ cần các lựa chọn phù hợp thì mọi hoạt động đều trôi chảy, không cần phải bắt tay. 2.2.5 Trọng tài BUS (bus arbitration) Trong hệ thống máy tính không phải chỉ có CPU làm bus master, các chip I/O cũng có lúc làm bus master để có thể đọc hay ghi bộ nhớ và gọi ngắt. Các bộ đồng xử lý cũng có thể làm bus master. Như vậy nảy sinh ra vấn đề: điều gì sẽ xảy ra khi 2 thiết bị trở lên đồng thời cần làm bus master? Từ đó cần có một cơ chế phân xử để tránh sự hỗn loạn của hệ thống. Cơ chế phân xử có thể là tập trung hay không tập trung. Trọng tài BUS tập trung Nhiều vi xử lý có đơn vị phân xử được chế tạo nằm ngay trong chip CPU, trong một số máy tính mini, đơn vị này nằm ngoài chíp CPU. Theo cơ chế này thì bộ trọng tài (arbiter) chỉ có thể biết có yêu cầu chiếm dụng bus hay không mà không biết có bao nhiêu đơn vị muốn chiếm dụng bus. Khi arbiter nhận 51
- Xây dựng các Hệ thống nhúng được yêu cầu, nó sẽ phát ra 1 tín hiệu cho phép trên đường dây (bus grant: cho phép sử dụng bus). Đường dây này nối qua tất cả các thiết bị I/O theo kiểu nối tiếp. Khi thiết bị nằm gần arbiter nhất nhận được tín hiệu cho phép, nó kiểm tra xem có phải chính nó đã phát ra yêu cầu hay không. Nếu có thì nó sẽ chiếm lấy bus và không truyền tiếp tín hiệu cho phép trên đường dây. Nếu không thì nó sẽ truyền tín hiệu cho phép tới thiết bị kế tiếp trên đường dây, với thiết bị này sự việc xảy ra giống thiết bị trước nó, quá trình cứ tiếp diễn cho đến khi có một thiết bị chiếm lấy bus. Sơ đồ xử lý như vậy có tên gọi là chuỗi quay vòng (daisy chaining). Điểm nổi bật của sơ đồ này là các thiết bị được gán thứ tự ưu tiên tuỳ thuộc vào vị trí của nó so với arbiter, thiết bị gần hơn thì mức ưu tiên cao hơn. Hình 2.10 BUS chuỗi quay vòng daisy chaining) Trọng tài BUS Một số loại bus có nhiều mức độ ưu tiên, với mỗi mức độ ưu tiên có đường yêu cầu bus (bus request) và đường dây cho phép bus (bus grant). Ví dụ: giả sử 1 bus có 2 mức ưu tiên 1 và 2 (các bus thực tế có 4, 8 hay 16 mức). Mỗi thiết bị trong hệ thống máy tính nối với 1 trong các mức yêu cầu bus, các đường thường được sử dụng nhiều hơn được gắn với đường dây có mức ưu tiên cao hơn. Ở ví du, các thiết bị 1, 2 sử dụng mức ưu tiên 1, còn các thiết bị 3, 4 sử dụng mức ưu tiên 2. PTIT Hình 2.11 Trọng tài BUS Nếu có một số thiết bị ở các mức ưu tiên khác nhau cùng yêu cầu, arbiter chỉ phát ra tín hiệu grant đối với yêu cầu có mức ưu tiên cao nhất. Trong số các thiết bị có cùng mức ưu tiên, thiết bị nào gần arbiter hơn sẽ ưu tiên hơn. Về mặt kỹ thuật, không cần nối đường grant level 2 giữa các thiết bị vì chúng không bao giờ đòi hỏi bus ở mức 2. Tuy nhiên, trong thực tế để thuận tiện cho việc lắp đặt người ta hay làm như sau: 52
- Xây dựng các Hệ thống nhúng nối tất cả các đường grant thông qua tất cả các thiết bị, như vậy sẽ dể dàng hơn là nối các đường grant một cách riêng biệt, và từ đó căn cứ vào thiết bị nào có quyền ưu tiên cao hơn. Một trọng tài BUS có đường dây thứ 3 nối tới các thiết bị để các thiết bị xác nhận đã nhận được tín hiệu grant và chiếm dụng bus – đường tín hiệu xác nhận ACK (acknowledgement). Ngay sau 1 thiết bị phát tín hiệu tích cực trên đường dây ACK, có thể đảo tín hiệu trên các đường dây request và grant xuống mức không tích cực. Các thiết bị khác có thể yêu cầu bus khi thiết bị đầu tiên đang dùng bus. Khi sự truyền thông kết thúc, bus master kế tiếp sẽ được lựa chọn. Cách làm việc như vậy làm tăng hiệu quả sử dụng bus, nhưng cần thêm 1 đường truyền tín hiệu và cấu trúc thiết bị cũng phức tạp hơn. Các chip trong máy tính PDP-11 và các chip Motorola làm việc với các bus như vậy. Trọng tài BUS không tập trung Trong Multibus, người ta cho phép có thể lựa chọn sử dụng phân xử bus tập trung hay không tập trung, cơ chế phân xử bus không tập trung được thực hiện như sau: Hình 2.12 Trọng tài Bus không tập trung trong multibus Cơ chế sử dụng 3 đường dây, không phụ thuộc vào số lượng thiết bị nối với bus: PTIT • Bus request: yêu cầu chiếm dụng bus. • Bus busy: đường báo bận, được bus master đặt ở mức tích cực khi có thiết bị đang chiếm dụng bus • Bus arbitration: được mắc nối tiếp thành 1 chuỗi xích qua tất cả các thiết bị ngoại vi. Đầu của chuỗi này được gắn với mức điện áp 5V của nguồn nuôi. Khi không có đơn vị nào yêu cầu chiếm dụng bus, đường dây phân xử bus truyền mức tích cực tới tất cả các thiết bị trong chuỗi xích. Khi 1 đơn vị nào đó muốn chiếm dụng bus, đầu tiên nó kiểm tra xem bus có rảnh không và đầu vào In của đường trọng tài bus có mức tích cực hay không. Nếu không (not active) thì nó không trở thành bus master. Ngược lại, nó sẽ đảo đầu Out thành không tích cực, làm cho các thiết bị đứng sau nó trong chuỗi xích có đầu In không tích cực. Khi trạng thái có thể hiểu lầm (khoảng thời gian tín hiệu trên đầu In và Out đang thay đổi) qua đi, chỉ còn lại duy nhất 1 thiết bị có đầu In tích cực và Out không tích cực. Thiết bị này trở thành bus master, nó sẽ đặt bus busy tích cực và bắt đầu truyền thông tin trên bus. 53
- Xây dựng các Hệ thống nhúng 2.2.6 Bus mở rộng (Expansion bus) EISA, MCA, Bus cục bộ, PCI Bus mở rộng cho phép bo mạch chủ liên lạc được với các thiết bị ngoại vi, các thiết bị này được cài đặt qua các khe cắm mở rộng (expansion slot). Các thông số chính của bus mở rộng: tốc độ truyền tối đa giữa các thiết bị với nhau và giữa các thiết bị với bộ nhớ chính, số đường địa chỉ (số lượng ô nhớ có thể được truy xuất bởi 1 thiết bị), số đường ngắt cứng, v.v. . Bus theo kiến trúc chuẩn công nghiệp (ISA - Industry Standard Architecture) Bus ISA dùng cho hệ thống chỉ được điều khiển bởi 1 CPU trên bảng mạch chính, tức là tất cả các chương trình và thiết bị đều chỉ được điều khiển bởi CPU đó. Tần số làm việc cực đại là 8.33 MHz ( tốc độ chuyển tải cực đại là 16.66 MBps với số liệu 2 bytes). Bề rộng dữ liệu là 8 hay 16 bits. ISA có 24 đường địa chỉ nên quản lý được 16 MB bộ nhớ. Bus ISA tương thích 90% với bus AT. . Bus ISA mở rộng (EISA) và kiểu kiến trúc vi kênh ( MCA- Micro Channel Architecture) Sử dụng cho các CPU 32 bits ( số liệu và đường địa chỉ) từ 80386 trở đi. - Bus EISA: Đây là chuẩn mở rộng của ISA để bố trí các dữ liệu 32 bits nhưng vẫn giữ được sự tương thích với mạch nối ghép cũ. Bus EISA có 2 nấc, các tín hiệu ISA được gửi qua nấc trên và các tín hiệu phụ trợ EISA qua nấc dưới. Các đặc trưng của EISA như sau: • Về mặt cơ khí: có nhiều chân cắm hơn nhưng vẫn tương thích với ISA • Độ rộng dữ liệu: có thể truy xuất 2 đường 8 bits (tương thích với ISA), hay 2 đường 16 bits Do. đó, đơn vị quản lý bus 32 bits có thể chuyển tải 4 byte với bộ nhớ hoặc thiết bị ngoại vi. Điều này góp phần tăng tốc độ truyền tải lên khoảng 33 MBps so với 16.66 MBps của ISA. • Độ rộng địa chỉ: ngoài 24 đường như ISA còn thêm 8 đường bổ sung nữa, do đó có thể định địa chỉ trong 4 GB bộ nhớ. • Phần cứng được thiết kế theo hệ thống EISA phức tạp hơn ISA vì nó cũng phải thực hiện các chu kỳ bus tương thích với ISA. EISA có thể thực hiện phân xử bus, nó cho phép vi xử lý nằm ngoài bảng mạch chính có thể điều khiển toàn bộ bus. Điều này rất hiệu quả trong các hệ thống đa xử lý (multiprocessor).PTIT Hãng Intel đã phát triển 4 chip điện tử phục vụ cho bus EISA như sau: o ISP (Intergrated system peripheral) o BMIC (Bus master interface controller) o EBC (EISA bus controller) o EBB (EISA bus buffer) . Bus MCA: Phục vụ cho hệ thống IBM PS/2 không tương thích với bus ISA, có thể hoạt động với 16 hay 32 bits dữ liệu. Nó có nhiều đường dẫn hơn ISA, thiết kế phức tạp cho phép giảm bớt các nhiễu cao tần của PC tới các thiết bị xung quanh. Tốc độ truyền dữ liệu có thể lên tới 160 MBps. . Bus cục bộ (Local Bus): Nhược điểm của các bus chuẩn trên là mặc dù xung clock của CPU rất cao nhưng cũng chỉ làm việc với các ngoại vi với tốc độ truyền tải không quá 33MBps. Điều này không thể đáp ứng được tốc độ của các card đồ hoạ cắm vào khe cắm của bus mở rộng trong chế độ đồ họa. Chuẩn các bus cục bộ tạo thêm các 54
- Xây dựng các Hệ thống nhúng khe cắm mở rộng nối trực tiếp vào bus cục bộ (bus nối giữa CPU và các bộ đệm). Do vậy, bus mở rộng loại này cho phép truy xuất lên trên 32 bit cũng như tận dụng được tốc độ xung clock của chính CPU, tránh được rào cản 8.33MHz của bus hệ thống. Theo hướng giải quyết này, Intel đã phát triển bus PCI và Uỷ ban VESA (Video Electronics Standards Association) đã phát triển bus VL. . Bus PCI (Peripheral Component Interconnect) Là loại BUS với nhiều cải tiến và dùng phổ biến trên PC hiện đại. Bus PCI là bus trong đó dữ liệu và địa chỉ được gởi đi theo cách thức dồn kênh (multiplexing), các đường địa chỉ và dữ liệu được dồn chung trên các đường của PCI. Cách này tiết kiệm được số chân PCI nhưng lại hạn chế tốc độ vì phải cần 2 xung clock cho một quá trình truyền dữ liệu (1 cho địa chỉ và 1 cho dữ liệu). Việc nối giữa CPU, bộ nhớ chính, và bus PCI được thực hiện bằng cầu PCI (PCI bridge), qua đó bus PC sẽ phục vụ cho tất cả các đơn vị của bus PCI. Tối đa là 10 thiết bị có thể được nối tới bus PCI, trong đó cầu PCI được coi là một. PCI có thể hoạt động với độ rộng 32 bits dữ liệu và tốc độ 33MHz : PCI = 33Mhz x 4 bytes (32 bits) = 133MB/s. Hiện tại PCI đã phát triển PCI-X 2.0, chạy 64 bit với BUS clock=266/533 MHz cho thông băng tới 2,15 GB/s và 4,3 GB/s. Một điểm mạnh của PCI là dữ liệu được truyền tải theo kiểu cụm (burst), trong đó địa chỉ chỉ truyền đi 1 lần, sau đó nó sẽ được hiểu ngầm bằng cách cho các đơn vị phát hoặc thu đếm lên trong mỗi xung clock. Do đó, bus PCI hầu như được lấp đầy bởi dữ liệu. Khi thiết kế cần xem lại chi tiết các tiêu chuẩn/định nghĩa chân của từng loại BUS sẽ sử dụng cho bo mạch. 2.2.7 Bus SPI (Serial Peripheral Interface ) Là loại bus liên kết dữ liệu nối tiếp, đồng bộ, hoạt động theo kiểu chủ/tớ (Master/Slave). Về kết nối bao gồm một thiết bị làm chủ (master) để điều phối và đồng bộ hoạt động, cung cấp xung đồng hồ (clock) chung cho toàn bus và một hay vài thiết bị khác hoạt động thụ động (tớ), nhận xung đồng hồ. Ngoài ra còn có các dây dữ liệu. Bus có 4 dây nối. Bus được sử dụng phổ biến trong các hệ có vi điều khiển nối với các vi mạch khác, tốc độ cao, sử dụng ít dây nối liên kết. Giao thức vận hành do phần mềm hay đã cứng hóa trong các chip sử dụng SPI. Một số kết nối điễn hình như sau: PTIT Chân vi mạch Ý nghĩa Ứng dụng MOSI Master out/Slave in µP → ASIC MISO Master in /Slave out ASIC → µP SCK Serial clock µP → ASIC SSn/CS Chip select (low active) µP → ASIC Xem thêm b469d17c67e60d4e3dbb25b0d099ad68/TN15_SPI_Interface_Specification.pdf 55
- Xây dựng các Hệ thống nhúng Hình 2.13 Liên kết qua bus SPI 2.2.8 Bus I2C (Inter-Integrated Circuit) Là BUS nối tiếp chỉ có 2 dây nối, hoạt động kết hợp cả phần cứng và phần mềm (Master/Slave và protocol), có thể nối vào nhiều thiết bị ngoài vào nhau, cũng như hổ trợ nhiều BUS có cơ chế điều khiển (master mode). Bus cấu thành từ 2 thànhPTIT phần là SDA và SCL. Hình 2.14 Liên kết qua bus I2C Trong đó: SCL (Serial Clock line) Là xung đồng hồ phát ra tư chip làm chủ (Master). SDA (Serial Data Line) là đường dữ liệu với 7 bit địa chỉ các vi mạch tham gia (vi mạch chủ và tớ). Rp là điện trở nối lên nguồn nuôi VDD. 56
- Xây dựng các Hệ thống nhúng Các thiết bị loại chủ hay tớ (Master/Slave), các thiết bị nhỏ có khoản cách gần , như bộ nhớ USB, điện thoại di động, có thể nối trực vào BUS. Khi nối xa hơn cần bộ khuyếch đại (P82B715) tăng dòng điện cho các thiết bị. Về cơ bản số thiết bị nối sẽ phụ thuộc vào: chiều dài của BUS, xung đồng hồ BUS, dung kháng phụ tải không quá 400 pF. Với tần số thấp BUS có thể dài tới vài mét. Có 4 chế độ làm việc, tuy nhiên 2 chế độ sau là phổ biến: master phát dữ liệu cho slave master nhận dữ liệu từ slave slave phát dữ liệu tới master slave nhận dữ liệu từ master Thủ tục qua thông điệp: Thông điệp đơn ở đó master ghi dữ liệu vào slase Thông điệp đơn ở đó master đọc dữ liệu từ slave Thông điệp phối hợp nơi master sẽ thực hiện ít nhất 2 lần đọc/ghi tới 1 hay vài slave. Khi đó mỗi lần đọc/ghi đều bắt đầu bằng START cùng địa chỉ của slave. Sau tín hiệu START đầu tiên trong thông điệp phối hợp là các bit gọi là START nhắc lại (repeated START bits), các bit này không đặt trước các bit STOP sao cho slave nhận biết rằng tiếp theo là một phần của thông điệp. Các slave sẽ phản ứng (trả lời) cho từng thông điệp riêng biệt. PTIT Hình 2.15 nguyên lí nối BUS I2C Bus I2C với các thiết bị nối vào: Các mạch đầu ra/vào hoạt động kiểu cả hai chiều (bidirectional), nên cần các điện trở treo, cho nên khi rút thiết bị khỏi BUS, đảm bảo đầu ra sẽ có mức điện áp cao. Nếu không có điện trở, các đường nối sẽ rơi vào trạng thái không xác định, gây lỗi dữ liệu. Hoạt động của BUS I²C: 57
- Xây dựng các Hệ thống nhúng Hình 2.16 ghi/đọc trên BUS I2C Trình tự và logic thay đổi được định nghĩa bởi 3 thông điệp: Message 1st event 2nd event START SDA H to L SCL H to L STOP SCL L to H SDA L to H ACK SDA H to L SCL H to L (ACKNOWLEDGE) Tín hiệu ACKNOWLEDGE và START tuy tương tự nhau, song có khác là: START do Master thực hiện, trong khi ACK từ Slave, cả hai tạo ra qui tắc đối thoại kiểu bawdng phần cứng (hardware- handshak). Việc truyền dữ liệu được bắt đầu với START (S) khi SDA chuyển xuống mức thấp (H to L) trong khi SCL giữ ở mức cao (H). Sau đó SDA đặt bit được truyền đi trong khi SCL ở mức thấp. Bit dữ liệu sẽ được tiếp nhận (lấy mẫu)PTIT khi SCL chuyển lên mức cao (L to H). Khi dữ liệu truyền đã hết, bit STOP được gởi lên trên SDA trong khi SCL vẫn ở mức cao liên tục. Để tránh lỗi khi việc phát hiện các bit đánh dấu xẩy ra, mức của SDA thay đổi ở sườn xuống (H to L) và sẽ được lấy mẫu khi SCL chuyển từ thấp lên cao (L to H). Dưới đây là code cho quá trình kiểm soát được mô tả quá trình nói trên của giao thức I²C ở phía thiết bị master (clock, arbitration, start/stop bit, ack/nack): // Hardware-specific support functions that MUST be customized: #define I2CSPEED 100 void I2C_delay() { volatile int v; int i; for (i=0; i < I2CSPEED/2; i++) v; } bool read_SCL(void); // Set SCL as input and return current level of line, 0 or 1 bool read_SDA(void); // Set SDA as input and return current level of line, 0 or 1 void clear_SCL(void); // Actively drive SCL signal low void clear_SDA(void); // Actively drive SDA signal low 58
- Xây dựng các Hệ thống nhúng void arbitration_lost(void); bool started = false; // global data void i2c_start_cond(void) { if (started) { // if started, do a restart cond // set SDA to 1 read_SDA(); I2C_delay(); while (read_SCL() == 0) { // Clock stretching // You should add timeout to this loop } // Repeated start setup time, minimum 4.7us I2C_delay(); } if (read_SDA() == 0) { arbitration_lost(); } // SCL is high, set SDA from 1 to 0. clear_SDA(); I2C_delay(); clear_SCL(); started = true; } void i2c_stop_cond(void){ PTIT // set SDA to 0 clear_SDA(); I2C_delay(); // Clock stretching while (read_SCL() == 0) { // add timeout to this loop. } // Stop bit setup time, minimum 4us I2C_delay(); // SCL is high, set SDA from 0 to 1 if (read_SDA() == 0) { arbitration_lost(); } I2C_delay(); 59
- Xây dựng các Hệ thống nhúng started = false; } // Write a bit to I2C bus void i2c_write_bit(bool bit) { if (bit) { read_SDA(); } else { clear_SDA(); } I2C_delay(); while (read_SCL() == 0) { // Clock stretching // You should add timeout to this loop } // SCL is high, now data is valid // If SDA is high, check that nobody else is driving SDA if (bit && read_SDA() == 0) { arbitration_lost(); } I2C_delay(); clear_SCL(); } // Read a bit from I2C bus bool i2c_read_bit(void) { PTIT bool bit; // Let the slave drive data read_SDA(); I2C_delay(); while (read_SCL() == 0) { // Clock stretching // You should add timeout to this loop } // SCL is high, now data is valid bit = read_SDA(); I2C_delay(); clear_SCL(); return bit; } 60