Luận văn Xử lý file âm thanh và hình ảnh từ đĩa cứng

Tài liệu Luận văn Xử lý file âm thanh và hình ảnh từ đĩa cứng: ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA ĐIỆN-ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ --------- š@&?œ ---------- LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC XỬ LÝ FILE ÂM THANH VÀ HÌNH ẢNH TỪ ĐĨA CỨNG GVHD : ThS. NGÔ ĐỨC HOÀNG SVTH : NGUYỄN BÁ ĐẠT MSSV : 40500576 SVTH : PHẠM NAM HƯNG MSSV : 40501183 TPHCM, Tháng 01/2010 LỜI CẢM ƠN Chúng em xin gửi đến ThS. Ngô Đức Hoàng lời cảm ơn chân thành với sự trân trọng và lòng biết ơn sâu sắc về sự hướng dẫn đầy chu đáo và nhiệt tình. Thầy đã dẫn dắt, tạo cho chúng em cách tư duy và làm việc một cách khoa học trong suốt thời gian thực hiện đề tài luận văn này. Chúng em xin chân thành cảm ơn các thầy cô trong khoa Điện – Điện tử, đặc biệt là các thầy cô trong bộ môn Điện tử đã hết lòng dạy dỗ và truyền đạt cho chúng em những kiến thức quý báu trong suốt các năm học tại trường, nhờ đó chúng em đã trang bị một nền tảng kiến thức vững chắc. Chúng em xin gửi lời cảm ơn đến các anh trong nhóm ứng dụng của trung tâm nghiên cứu và đào ...

doc153 trang | Chia sẻ: hunglv | Lượt xem: 1536 | Lượt tải: 1download
Bạn đang xem trước 20 trang mẫu tài liệu Luận văn Xử lý file âm thanh và hình ảnh từ đĩa cứng, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA ĐIỆN-ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ --------- š@&?œ ---------- LUẬN VĂN TỐT NGHIỆP ĐẠI HỌC XỬ LÝ FILE ÂM THANH VÀ HÌNH ẢNH TỪ ĐĨA CỨNG GVHD : ThS. NGÔ ĐỨC HOÀNG SVTH : NGUYỄN BÁ ĐẠT MSSV : 40500576 SVTH : PHẠM NAM HƯNG MSSV : 40501183 TPHCM, Tháng 01/2010 LỜI CẢM ƠN Chúng em xin gửi đến ThS. Ngô Đức Hoàng lời cảm ơn chân thành với sự trân trọng và lòng biết ơn sâu sắc về sự hướng dẫn đầy chu đáo và nhiệt tình. Thầy đã dẫn dắt, tạo cho chúng em cách tư duy và làm việc một cách khoa học trong suốt thời gian thực hiện đề tài luận văn này. Chúng em xin chân thành cảm ơn các thầy cô trong khoa Điện – Điện tử, đặc biệt là các thầy cô trong bộ môn Điện tử đã hết lòng dạy dỗ và truyền đạt cho chúng em những kiến thức quý báu trong suốt các năm học tại trường, nhờ đó chúng em đã trang bị một nền tảng kiến thức vững chắc. Chúng em xin gửi lời cảm ơn đến các anh trong nhóm ứng dụng của trung tâm nghiên cứu và đào tạo thiết kế vi mạch (ICDREC), Đại Học Quốc Gia Tp.HCM, đặc biệt gửi lời cảm ơn đến các anh trong nhóm nghiên cứu ARM đã tạo điều kiện thuận lợi và giúp đỡ chúng em tận tình. Cảm ơn anh Phan Phụng Cử, anh Phạm Thanh Tuyên đã giúp đỡ chúng em rất nhiều. Chúng con xin gửi đến cha mẹ lòng kính trọng và biết ơn sâu sắc nhất. Cha mẹ đã nuôi dưỡng, dạy dỗ chúng con nên người và là chỗ dựa tinh thần vững chắc cho chúng con trong cuộc đời. Chúng tôi xin cảm ơn các bạn đã cùng học tập, giúp đỡ, động viên và cùng chúng tôi bước qua quãng đời sinh viên này. Tp.Hồ Chí Minh, Tháng 01 năm 2010. Sinh viên Nguyễn Bá Đạt Phạm Nam Hưng TÓM TẮT LUẬN VĂN Ứng dụng cho các hệ thống nhúng hiện nay ngày càng trở nên phức tạp, không phải đơn giản chỉ là điều khiển một chốt đèn giao thông định thời, đếm số người ra vào cửa, điều khiển động cơ, hiển thị một câu thông báo trên LCD... Xu thế tất yếu, các nhân điều khiển cần có cấu hình mạnh hơn, đáp ứng thời gian thực tốt hơn các nhân điều khiển 8 bit đang dùng. Ngày nay với sự phát triển của khoa học và kỹ thuật, các ứng dụng mang tính hệ thống lớn được thế kế sử dụng các vi xử lý 16/32 bit. Trong đó phổ biến nhất là ARM, chiếm hơn 75% chip 32 bit trên thị trường. ARM là một họ vi xử lý RISC 16/32 bit của ARM Ltd. Đặc tính nổi trội của ARM là tiết kiệm năng lượng, do đó được sử dụng trong nhiều thiết bị cầm tay, là CPU được tìm thấy khắp nơi trong các sản phẩm thương mại điện tử (PDA, Mobile…) đến các thiết bị ngoại vi máy tính (ổ đĩa cứng, bộ định tuyến để bàn…). Do đó việc tìm hiểu và nghiên cứu về vi điều khiển ARM là điều hết sức cần thiết. Sau quá trình tìm hiểu và thực hiện đề tài đã giúp em hiểu được kiến trúc, tập lệnh cũng như thiết kế ứng dụng trên lõi vi xử lý ARM. Dựa trên kiến thức tìm hiểu được, thực hiện viết code trên Kit với mục đích xử lý file âm thanh và hình ảnh từ đĩa cứng. Nội dung đề tài: Chương 1: ARM7LH79525. Chương 2: Cấu trúc dữ liệu ổ đĩa cứng và giao tiếp IDE. Chương 3: Chuẩn FAT32. Chương 4: LCD TFT&TSC. Chương 5: MP3 Audio Decoder VS1011e. Chương 6: Kết luận và hướng phát triển. Trong quá trình thực hiện luận văn, dù đã cố gắng, nỗ lực song khó tránh khỏi các thiếu sót, mong các thầy cô và các bạn thông cảm và góp ý. Tp. Hồ Chí Minh, Tháng 01 năm 2010 Sinh Viên Nguyễn Bá Đạt Phạm Nam Hưng MỤC LỤC Đề mục Trang Bìa i Phiếu Chấm Bảo Vệ LVTN (giáo viên hướng dẫn) Phiếu Chấm Bảo Vệ LVTN (giáo viên phản biện) Nhiệm Vụ Luận Văn Tốt Nghiệp Lời Cảm Ơn ii Tóm Tắt Luận Văn iii Mục Lục iv Danh Mục Hình Vẽ ix Danh Mục Bảng Biểu xi Danh Sách Các Từ Viết Tắt xiii Tài Liệu Tham Khảo 139 DANH MỤC HÌNH VẼ Hình 1.1 Sơ đồ ứng dụng của LH79525 Hình 1.2 Sơ đồ khối LH79525 Hình 1.3 Sơ đồ khối của Boot Controller Hình 1.4 Sơ đồ khối EMC Hình 1.5 Chuyển địa chỉ tự động Hình 1.6 SSP Timing Waveform Parameters Hình 1.7 Khung định dạng Motorola SPI (truyền liên tục) Hình 1.8 Khung định dạng Motorola SPI với SPH = 0 Hình 1.9 Khung định dạng đồng bộ nối tiếp Texas Instruments (truyền liên tục) Hình 1.10 Khung định dạng Microwire (truyền đơn) Hình 1.11 Khung định dạng Microwire (truyền liên tục) Hình 2.1 Cấu tạo bên trong một ổ đĩa cứng Hình 2.2 Cấu trúc track, cluster, sector Hình 2.3 Cấu trúc Cylinder Hình 2.4 Cáp dữ liệu IDE (PATA) Hình 2.5 Cáp nguồn IDE (PATA) Hình 2.6 Vị trí các chân data của cáp IDE Hình 4.1 Sơ đồ khối của LCD Hình4.2 Sơ đồ chân LCD (chế độ 16 bit) Hình 4.3 Kết nối giao diện hệ thống với giao diện RGB Hình 4.4 Định dạng dữ liệu giao diện hệ thống 16 bit Hình 4.5 Định dạng dữ liệu của giao tiếp SPI Hình 4.6 Truyền dữ liệu qua giao tiếp VSYNC Hình 4.7 Truyền dữ liệu ảnh động qua giao tiếp VSYNC Hình 4.8 Sự hoạt động qua giao tiếp VSYNC Hình 4.9 Định dạng dữ liệu của giao tiếp RGB 16 bit Hình 4.10 Vùng truy cập GRAM bằng giao tiếp RGB Hình 4.11 Định dạng dữ liệu giao tiếp RGB 16 bit Hình 4.12 Thiết lập thanh ghi với giao tiếp SPI Hình 4.13 Thiết lập thanh ghi với giao tiếp hệ thống i80 16 bit dữ liệu Hình 4.14 Điều chỉnh hướng truy cập GRAM Hình 4.15 Cấu hình dãy truy cập GRAM Hình 4.16 Kiến trúc N-bit SAR đơn giản Hình 4.17 Ví dụ về hoạt động SAR ADC 4 bit Hình 4.18 Màn hình cảm ứng 4 dây Hình 4.19 Mạch tương đương màn hình cảm ứng 4 dây Hình 4.20 Tính toán áp cho mà hình cảm ứng 4 dây Hình 4.21 4-wire Touch Screen Hookup Hình 5.1 VS1011e Hình 5.2 Sơ đồ khối VS1011e Hình 5.3 Pin Configuration, LQFP-48 Hình 5.4 Pin Configuration, BGA-49 Hình 5.5 Pin Configuration, SOIC-28 Hình 5.6 Sơ đồ kết nối tiêu biểu sử dụng LQFP-48 Hình 5.7 BSYNC Signal - one byte transfer Hình 5.8 BSYNC Signal - two byte transfer Hình 5.9 SCI Word Read Hình 5.10 SCI word write Hình 5.11 SPI Timing Diagram Hình 5.12 Data Flow of VS1011e Hình 5.13 Cấu trúc file mp3 Hình 6.1 Kit ARM thực hiện DANH MỤC BẢNG BIỂU Bảng 1.1 Cấu hình Boot cho Silicon phiên bản A.0 Bảng 1.2 Cấu hình Boot cho Silicon phiên bản A.1 Bảng 1.3 Thông số Boot từ I2C Bảng 1.4 Thiết bị được hỗ trợ Boot từ I2C Bảng 1.5 Thông số Boot UART0 Bảng 1.6 Tóm lượt thanh ghi điều khiển Boot Bảng 1.7 Thanh ghi PBC Bảng 1.8 Thanh ghi CS1OV Bảng 1.9 Thanh ghi EPM Bảng 1.10 Cấu hình bộ nhớ tĩnh Bảng 1.11 Ví dụ về hệ thống bộ nhớ Bảng 1.12 GPIO Ports Bảng 1.13 LH79525 GPIO Multiplexing Bảng 1.14 LH79525 GPIO Multiplexing (tiếp theo) Bảng 1.15 Bản đồ bộ nhớ của port GPIO Bảng 1.16 Thanh ghi P1DRx Bảng 1.17 Trường P1DRx Bảng 1.18 Thanh ghi P2DRx Bảng 1.19 Trường P2DRx Bảng 1.20 Thanh ghi P1DDRx Bảng 1.21 Trường P1DDRx Bảng 1.22 Thanh ghi P2DDRx Bảng 1.23 P2DDRx Register Definitions Bảng 1.24 Tóm tắt thanh ghi SSP Bảng 1.25 Thanh ghi CTRL0 Bảng 1.26 Thanh ghi CTRL1 Bảng 1.27 Thanh ghi DR Bảng 1.28 Thanh ghi SR Bảng 2.1 Tên các chân data của cáp IDE Bảng 2.2 Chức năng các chân data của cáp IDE Bảng 2.3 Nội dung 512 bytes Identify Bảng 2.4 Nội dung 512 bytes Identify (tiếp theo) Bảng 2.5 Nội dung 512 bytes Identify (tiếp theo) Bảng 2.6 Nội dung 512 bytes Identify (tiếp theo) Bảng 3.1 Cấu trúc của Master Boot Record Bảng 3.2 Cấu trúc Entry Primary Partition Bảng 3.3 Cấu trúc ổ đĩa chỉ chứa Primary Partition Bảng 3.4 Cấu trúc ổ đĩa khi có Secondary Partition Bảng 3.5 Các thông số mà Partition Boot Record cung cấp Bảng 3.6 Cấu trúc của Partition Boot Record Bảng 3.7 Vị trí bảng FAT trên Partion Bảng 3.8 Kích thước chi tiết entry của short file name Bảng 3.9 Chức năng của bit Attrib Bảng 3.10 Kích thước chi tiết entry của long file name Bảng 3.11 Cấu trúc bảng FAT Bảng 4.1 Bảng Init LCD Bảng 4.2 Thanh ghi HW Bảng 4.3 Thanh ghi LW Bảng 4.4 Header của file BMP Bảng 4.5 Thông tin BMP Bảng 5.1 Chức năng các chân của VS1011e Bảng 5.2 Chức năng các chân ở chế độ VS1002 Bảng 5.3 Chức năng các chân ở chế độ VS1002 Bảng 5.4 Các thanh ghi SCI Bảng 5.5 MPEG Audio Frame Header Bảng 5.6 Các phiên bản MPEG và tỷ lệ lấy mẫu Bảng 5.7 Bitrates (kilobits/s) Bảng 5.8 Bitrate được phép và chế độ kết hợp Bảng 5.9 Mẫu/Frame DANH SÁCH CÁC TỪ VIẾT TẮT ARM Acorn RISC Machine/Advanced RISC Machines ADC Analog to Digital Converter TSC Touch Screen Controller PBC Power-up Boot Configuration CS1OV nCS1 Override EPM External Peripheral Mapping EMC External Memory Controller CS Chip Select GPIO General purpose input/output FIFO First In First Out CTRL0 Control Register 0 CTRL1 Control Register 1 DR Data Register SR Status Register CPSR Clock Prescale Register IMSC Interrupt Mask Set and Clear Register RIS Raw Interrupt Status Register MIS Masked Interrupt Status Register ICR Interrupt Clear Register DCR DMA Control Register FAT File Allocation Table NTFS New Technology File System CPU Central Processing Unit MBR Master Boot Record PBR Partition Boot Record LBA Logical block addressing LFN Long file name SHF Short file name UTF Unicode Transformation Format SPI Serial Peripheral Interface SSP Synchronous Serial Port CHƯƠNG 1 ARM7 LH79525 1.1 Tổng quan - ARM 7 là chip tích hợp cao. - Công suất cao: tốc độ của CPU lên đến 76.205 MHz, AHB clock (HCLK) 50.803 MHz. - LH79525 có bus dữ liệu ngoài 16 bit. - 8 KB bộ nhớ Buffer. - 16 KB SRAM trên chip. - Linh hoạt, giao tiếp bộ nhớ có thể lập trình. • Giao tiếp SDRAM 512MB vùng địa chỉ bên ngoài. 32 bit bus dữ liệu bên ngoài (LH79524). 16 bit bus dữ liệu bên ngoài (LH79525). • Giao tiếp SRAM/Flash/ROM. 15 bit bus địa chỉ bên ngoài. 32 bit bus dữ liệu bên ngoài (LH79524). 16 bit bus dữ liệu bên ngoài (LH79525). - Bộ điều khiển đa luồng DMA có 4 luồng dữ liệu burst 32 bit. - Xung clock và quản lý nguồn • Dao động 32.768 KHz dùng để tạo Real Time Clock. • Hỗ trợ dao động 10 MHz đến 20 MHz, on chip PLL. • Chế độ active, standby, sleep, stop1, stop2. • Hỗ trợ nguồn xung clock ngoài. - On Chip Boot ROM: cho phép boot từ các thiết bị 8, 16, 32 bit. - NAND Flash Boot. - Công suất nguồn thấp • Active Mode: 85 mA (MAX.). • Standby Mode: 50 mA (MAX.). • Sleep Mode: 3.8 mA (TYP.). • Stop Mode 1: 420 µA (TYP.). • Stop Mode 2: 25 µA (TYP.). - Hỗ trợ USB 2.0 (full speed) 12Mbit/s. - Ethernet MAC với giao diện MMI và MDIO • Phù hợp với IEEE 802.3. • Hoạt động ở 10 Mbit/s và 100 Mbit/s. - Bộ chuyển đổi tương tự sang số DAC/Brownout Detector • 10 bit ADC. • Ngắt khi có chạm bút. • Tích hợp Touch Screen Controller (TSC). - Module I2C. - Tích hợp tính năng hỗ trợ giao tiếp với Codec (I2S). - Watchdog Timer. - Điều khiển ngắt Vector • 16 Standard và 16 Vector ngắt IRQ. • Ngắt Individually Configurable cho IRQ hoặc FIQ. - 3 UART • 16 entry FIFOs cho Rx và Tx. • Hỗ trợ IrDA SIR trên 3 UART. - Hai bộ Timer 16 bit. - Real Time Clock • Bộ đếm lên 32 bit Programmable Load. • Match Compare Register 32 bit lập trình được. - Các ngõ vào I/O lập trình được • LH79524: 108 pin/14 port. • LH79525: 86 pin/12 port. - Bộ điều khiển màu LCD lập trình được • 16 bit/điểm ảnh (LH79524) và 12 bit/điểm ảnh (LH79525). • Độ phân giải lên đến 800×600. • STN, Color STN, HR-TFT, AD-TFT, TFT. • TFT: hỗ trợ 64K (LH79524) hoặc 4K (LH79525). - Port nối tiếp đồng bộ hỗ trợ tốc độ dữ liệu lên đến 1.8452 Mbit/s. - Giao diện Debug JTAG và Boundary Scan. - 5V Tolerant Digital Inputs (trừ chân oscillator): chân XTALIN và XTAL32IN là 1.8V ± 10%. - Bộ điều chỉnh On Chip cho phép cấp nguồn đơn 3.3V. ` Hình 1.1 Sơ đồ ứng dụng của LH79525 Hình 1.2 Sơ đồ khối LH79525 1.2 Boot Controller Hình 1.3 Sơ đồ khối của Boot Controller 1.2.1 Nguyên tắc hoạt động 1.2.1.1 Xác định Boot Device Bảng 1.1 Cấu hình Boot cho Silicon phiên bản A.0 Bảng 1.2 Cấu hình Boot cho Silicon phiên bản A.1 1.2.1.2 Boot dùng giao tiếp I2C Bảng 1.3 Thông số Boot từ I2C Bảng 1.4 Thiết bị được hỗ trợ Boot từ I2C 1.2.1.3 Boot từ UART Bảng 1.5 Thông số Boot UART0 1.2.2 Các thanh ghi 1.2.2.1 Bản đồ bộ nhớ Bảng 1.6 Tóm lược thanh ghi điều khiển Boot 1.2.2.2 Power-up Boot Configuration Register (PBC) Bảng 1.7 Thanh ghi PBC 1.2.2.3 nCS1 Override Register (CS1OV) Bảng 1.8 Thanh ghi CS1OV 1.2.2.4 External Peripheral Mapping Register (EPM) Bảng 1.9 Thanh ghi EPM 1.3 Điều khiển bộ nhớ ngoài EMC 1.3.1 Giới thiệu chung về EMC EMC cung cấp mọi giao tiếp và các hàm điều khiển cả 2 bộ nhớ tĩnh và động của thiết bị. EMC bao gồm các đặc điểm: - Giao tiếp bộ nhớ động bao gồm: SDRAM, JEDEC low-power SDRAM. - Giao tiếp bộ nhớ tĩnh không đồng bộ gồm: RAM, ROM, FLASH. - Đọc và ghi buffer để giảm thời gian trễ và cải thiện chất lượng. - Được cung cấp 16 đến 32 bit bộ nhớ tĩnh. - 16 bit bộ nhớ đồng bộ SDRAM. - Bộ nhớ tĩnh có đặc điểm: Chế độ đọc bất đồng bộ. Trạng thái chờ lập trình được. Delay bus theo chu kì. Ngõ ra cho phép tạo trễ ở chế độ ghi. Chế độ chờ mở rộng. Có thể kéo dài chế độ chờ bằng cách sử dụng chân nWAIT. - 2 chip select cho việc đồng bộ và 4 chip select cho bộ nhớ tĩnh của thiết bị. - 4 bộ nhớ Byte Lane Selects cho bộ nhớ tĩnh của thiết bị. - Chế độ boot 8, 16, 32 bit. 1.3.2 Nguyên tắc hoạt động Hình 1.4 Sơ đồ khối EMC EMC hỗ trợ 6 bank bộ nhớ bên ngoài. Các bank này cùng chiếm 384MB của không gian địa chỉ. Đối với một chu kỳ bộ nhớ SRAM, bit 31 đến bit 26 được giải mã để lựa chọn đúng bộ nhớ đồng hồ pha và chip thích hợp. Bit 25 đến bit 2 được truyền như địa chỉ bên ngoài đến các bank bộ nhớ có độ rộng 32 bit bộ nhớ ngoài, bit 24 đến bit 1 được truyền cho độ rộng 16 bit bộ nhớ bên ngoài và từ bit 23 đến bit 0 được truyền cho độ rộng 8 bit, bộ nhớ bên ngoài. Bất kể chiều rộng bộ nhớ, bit địa chỉ có trọng số thấp nhất (LSB) sẽ xuất ra ở chân A0. Trong một chu kỳ bộ nhớ SDRAM, bank được truy cập dựa trên tín hiệu Chip Select. Điều này có được bằng cách giải mã bit địa chỉ 28. Một giá trị của 0 gây ra chip chọn 0 để được khẳng định. Địa chỉ 27 bit 0 được truyền đi như địa chỉ ngoài của các bank bộ nhớ. EMC cung cấp phần cứng hỗ trợ việc boot từ bộ nhớ ngoài cố định. Trong suốt quá trình boot, bộ nhớ ngoài cố định phải được xác định ở địa chỉ 0x00000000 trong bộ nhớ. Khi hệ thống được boot thì nCS0, nCS1, hay nDCS0 phải được remap đến địa chỉ 0x00000000 bằng phần mềm. Boot device được chọn bằng trạng thái của PC[7:4]. 1.3.3 Bộ nhớ tĩnh Giao thức bộ nhớ tĩnh bất đồng bộ bên ngoài. Tuy nhiên, LH79524/LH79525 tạo ra những tín hiệu bất đồng bộ bên ngoài bằng cách sử dụng hệ thống xung clock nội để đồng bộ kiểm soát việc chuyển đổi. Như vậy, thời gian của các tín hiệu bộ nhớ tĩnh thì dễ dàng tham chiếu với tần số dao động nội của hệ thống. EMC tăng các địa chỉ bằng cách tự động dịch địa chỉ ngõ ra trên bus bộ nhớ ngoài. Đối với các hệ thống bộ nhớ 8 bit, tín hiệu địa chỉ A0 được kết nối đến địa chỉ chân A0. Đối với các hệ thống bộ nhớ 16 bit, việc định địa chỉ không cần tín hiệu A0, địa chỉ truy cập bắt đầu từ halfword boundaries. Đối với hệ thống 32 bit, cả tín hiệu địa chỉ A0 và A1 không cần thiết vì truy cập bộ nhớ bắt đầu từ word boundaries. Byte Lane Enables nên được sử dụng cho những địa chỉ byte riêng lẻ. Hình 1.5 cho thấy cách các tín hiệu địa chỉ nội bộ được chuyển sang các chân địa chỉ. Ví dụ, trong cấu hình thể hiện trong hình 1.5, chiều rộng bộ nhớ thiết bị đã được thiết lập đến 32 bit bằng cách lập trình các SCONFIGx: trường MW là 0b10. Lưu ý rằng đây là chiều rộng của bộ nhớ hệ thống kết nối, không phải là thiết bị. Vì vậy, nếu hai thiết bị bộ nhớ 16 bit được kết nối như một hệ thống mở rộng 32 bit thì trường MW phải được lập trình là 0b10 cho 32 bit. Nếu các thiết bị 16 bit được kết nối thành một hệ thống mở rộng 16 bit thì lập trình MW là 0b01, và chuyển mạch trong hình 1.5 sau đó sẽ di chuyển đến vị trí '01', mà kết nối tín hiệu địa chỉ A1 để pin A0 và... Tự động chuyển sang địa chỉ đơn giản hóa rất nhiều phần cứng thiết kế và layout. Ngoài ra, bởi vì tất cả 23 dòng địa chỉ bên ngoài có thể được sử dụng cho hệ thống 16 bit và 32 bit, số lượng các địa điểm địa chỉ tăng gấp đôi hoặc gấp bốn so với bộ điều khiển bộ nhớ mà không thay đổi địa chỉ. Hình 1.5 Chuyển địa chỉ tự động 1.3.4 Chọn thiết bị bộ nhớ tĩnh Bảng 1.10 Cấu hình bộ nhớ tĩnh Ghi chú: 1. SRAM và các thiết bị bộ nhớ Flash có thể được bảo vệ nếu cần. 2. Bộ đệm phải được vô hiệu hoá khi thực hiện các lệnh trong bộ nhớ Flash. 3. Bật bộ đệm có nghĩa là truy cập vào bất kỳ nguyên nhân các bộ đệm sẽ được sử dụng. Tùy thuộc vào ứng dụng, điều này có thể cung cấp cải thiện hiệu suất. 1.3.5 Bộ nhớ động 1.3.5.1 Write-protection Đối với bộ nhớ động, Chip Select có thể được cấu hình ở chế độ write-protection bằng cách cài đặt các bit liên quan trong write-protect field trong thanh ghi DYNCFGx (DYNCFGx:P). Nếu có một lệnh ghi được thực hiện trong write-protected memory bank thì ERROR response sẽ được tạo ra ở tín hiệu HRESP[1:0]. 1.3.5.2 Access Sequencing and Memory Width Cấu hình chiều rộng dữ liệu của từng không gian Chip Select bên ngoài bằng lập trình thích hợp thanh ghi DYNCFGx. Nếu chiều rộng bus dữ liệu Chip Select hẹp hơn so với yêu cầu từ các bus master AMBA hiện hành, việc chuyển bus nội bộ mất một số bus bên ngoài chuyển để hoàn thành. Ví dụ, nếu Chip Select 1 (nDCS1) được cấu hình như bộ nhớ 16 bit mở rộng và 32 bit đọc là bắt đầu 32 bit read is initiated, AHB ngừng khi EMC đọc hai word liên tiếp từ bộ nhớ. Trong suốt quá trình truy cập EMC, dữ liệu được chuyển thành word 32 bit và chuyển vào AHB. 1.3.5.3 Data Mask Signals Tùy thuộc vào độ rộng hệ thống bộ nhớ ngoài và kích thước toán hạng, một hoặc hai chu kì bộ nhớ có thể được yêu cầu cho việc truyền toán hạng. Tín hiệu mặt nạ dữ liệu (Data Mask) DQM[3:0] lựa chọn giai đoạn data phase cho mỗi chu kì. Bảng 1.11 Ví dụ về hệ thống bộ nhớ • Đối với hệ thống bộ nhớ 32 bit, chỉ cần 1 chu kì bộ nhớ cho bất kì dữ liệu nào được truyền đi, cấu hình DQM trong chu kì ghi bị vô hiệu hóa. • Đối với hệ thống bộ nhớ 16 bit, DQM[1] được sử dụng như memory system upper data mask (UDQM) và DQM[0] được sử dụng như lower data mask (LDQM). • Đối với 32 bit truyền trong hệ thống bộ nhớ 16 bit thì cần 2 bộ nhớ data phase để hoàn thành chu kì bộ nhớ. Half word (16 bit) và byte-width được truyền trong 1 data phase. 1.4 General purpose input/output (GPIO) LH79525 có 11 port với 86 chân. Các chân trong mỗi port có thể được cấu hình là ngõ vào hay ngõ ra riêng biệt, ngoại trừ port J và port M. Bảng 1.12 GPIO Ports 1.4.1 Cấu hình Port Ngay khi Reset thì tất cả các port được cấu hình là input ngoại trừ port J, M. Hai port này không được cấu hình là GPIO khi Reset. Mỗi chân GPIO có thể được kết hợp một hay nhiều chức năng khác nhau. Để tác động đến các chân GPIO thì ta dùng 2 thanh ghi P1DDRx và P2DDRx. Dữ liệu sẽ được ghi hay đọc trên thanh ghi P1DRx và P2DRx. Để mô tả các hàm của các chân GPIO ta có các bảng cụ thể sau. Bảng 1.13 LH79525 GPIO Multiplexing Bảng 1.14 LH79525 GPIO Multiplexing (tiếp theo) 1.4.2 Thanh ghi GPIO 1.4.2.1 Sơ đồ bộ nhớ Địa chỉ cho các thanh ghi GPIO: Bảng 1.15 Bản đồ bộ nhớ của port GPIO 1.4.2.2 Mô tả các thanh ghi Port A/C/E/G/I/K/M Data Registers (P1DRx) Nếu P1DDRx Data Direction được set cho ngõ ra thì giá trị ghi vào P1DRx là giá trị ngõ ra trên các chân PA/PC/PE/PG/PI/PK/PM. Nếu bit Data Direction Register được set cho ngõ vào thì giá trị đọc được là trạng thái chân GPIO. Bảng 1.16 Thanh ghi P1DRx Bảng 1.17 Trường P1DRx Việc đọc thanh ghi này cho ta thấy: Bit cuối cùng sẽ được ghi nếu bit được cấu hình như ngõ ra. Giá trị tức thời trên port tương ứng nếu được cấu hình như ngõ vào. Port B/D/F/H/J/L/N Data Register (P2DRx) Nếu P2DDRx Data Direction được set cho ngõ ra thì giá trị ghi vào P2DRx là giá trị ngõ ra trên các chân PB/PD/PF/PH/PJ/PL/PN. Nếu bit Data Direction Register được set cho ngõ vào thì giá trị đọc được là trạng thái chân GPIO. Bảng 1.18 Thanh ghi P2DRx Bảng 1.19 Trường P2DRx Việc đọc thanh ghi này cho ta thấy: Bit cuối cùng sẽ được ghi nếu bit được cấu hình như ngõ ra. Giá trị tức thời trên port tương ứng nếu được cấu hình như ngõ vào. Port A/C/E/G/I/K Data Direction Register (P1DDRx) Bảng 1.20 Thanh ghi P1DDRx Bảng 1.21 Trường P1DDRx Việc đọc thanh ghi này cho ta thấy: Bit cuối cùng sẽ được ghi nếu bit được cấu hình như ngõ ra. Giá trị tức thời trên port tương ứng nếu được cấu hình như ngõ vào. Port B/D/F/H/L/N Data Direction Register Bảng 1.22 Thanh ghi P2DDRx Bảng 1.23 P2DDRx Register Definitions 1.5 Cổng nối tiếp đồng bộ SSP Các cổng nối tiếp đồng bộ SSP (Synchronous Serial Port) là một giao diện master hoặc slave cho phép cổng nối tiếp đồng bộ giao tiếp với thiết bị ngoại vi của master hoặc slave. Trong truyền dẫn, dữ liệu ghi vào FIFO truyền tải thông qua giao diện APB. Các truyền tải dữ liệu được xếp hàng đợi cho chuyển đổi song song đến nối tiếp lên giao diện truyền tải. Các định dạng logic truyền dữ liệu vào một trong ba loại khung cơ bản: Motorola SPI. Texas instruments DSP - tương thích giao diện đồng bộ nối tiếp. National Semiconductor Microwire. 1.5.1 Nguyên tắc hoạt động 1.5.1.1 Timing Waveforms Hình 1.6 SSP Timing Waveform Parameters 1.5.1.2 Định dạng khung Motorola SPI Hình 1.7 Khung định dạng Motorola SPI (truyền liên tục) Hình 1.8 Khung định dạng Motorola SPI với SPH = 0 1.5.1.3 Định dạng khung Texas Instruments Hình 1.9 Khung định dạng đồng bộ nối tiếp Texas Instruments (truyền liên tục) 1.5.1.4 Định dạng khung National Semiconductor Hình 1.10 Khung định dạng Microwire (truyền đơn) Hình 1.11 Khung định dạng Microwire (truyền liên tục) 1.5.1.5 Ngắt Được chia ra gồm: Ngắt nhận. Ngắt phát. Ngắt Receive Overrun. Ngắt Receive Timeout. Tất cả bốn ngắt được kết hợp thành một ngắt đơn: SSPINTR. Trạng thái của 4 nguồn ngắt có thể được đọc từ thanh ghi RIS hoặc MIS. 1.5.2 Các thanh ghi 1.5.2.1 Bản đồ bộ nhớ Địa chỉ nền của SSP là 0xFFFC6000. Bảng 1.24 Tóm tắt thanh ghi SSP 1.5.2.2 Các thanh ghi Control Register 0 (CTRL0) Bảng 1.25 Thanh ghi CTRL0 Control Register 1 (CTRL1) Bảng 1.26 Thanh ghi CTRL1 Data Register (DR) DR là thanh ghi truyền/nhận FIFO có chiều dài 16 bit. Bảng 1.27 Thanh ghi DR Status Register (SR) Bảng 1.28 Thanh ghi SR Ngoài ra còn có các thanh ghi: Clock Prescale Register (CPSR). Interrupt Mask Set and Clear Register (IMSC). Raw Interrupt Status Register (RIS). Masked Interrupt Status Register (MIS). Interrupt Clear Register (ICR). DMA Control Register (DCR). CHƯƠNG 2 CẤU TRÚC DỮ LIỆU Ổ ĐĨA CỨNG VÀ GIAO TIẾP IDE 2.1 Cấu trúc dữ liệu của ổ đĩa cứng Hình 2.1 Cấu tạo bên trong một ổ đĩa cứng 2.1.1 Track Trên một mặt làm việc của đĩa từ chia ra nhiều vòng tròn đồng tâm tạo thành các track để xác định các vùng lưu trữ dữ liệu riêng biệt trên mặt đĩa. Track trên ổ đĩa cứng không cố định từ khi sản xuất, chúng có thể thay đổi vị trí khi ta định dạng cấp thấp cho ổ đĩa (low format). Khi một ổ đĩa cứng đã hoạt động nhiều năm liên tục, phần cơ của nó sẽ bị bào mòn và làm việc không chính xác như khi mới sản xuất. Nếu kiểm tra bằng các phần mềm cho thấy nhiều vùng trên đĩa bị hư hỏng (bad block) thì nên tiến hành định dạng cấp thấp cho nó để tái cấu trúc lại các track cho phù hợp hơn với sự xuống cấp của phần cơ. 2.1.2 Sector Mỗi track được chia thành những phần nhỏ bằng các đoạn hướng tâm tạo thành các sector. Sector là đơn vị chứa dữ liệu nhỏ nhất. Theo chuẩn thông thường thì một sector chứa 512 byte. Số sector trên các track từ phần rìa đĩa vào đến vùng tâm đĩa là khác nhau, các ổ đĩa cứng đều chia ra hơn 10 vùng mà trong mỗi vùng có số sector/track bằng nhau. 2.1.3 Cluster Trong lĩnh vực lưu trữ dữ liệu (đĩa mềm hoặc đĩa cứng) ở mức độ hệ điều hành, cluster là một đơn vị lưu trữ gồm một hoặc nhiều sector. Khi hệ điều hành lưu trữ một tập tin vào đĩa, nó ghi tập tin đó vào hàng chục, có khi hàng trăm cluster liền nhau. Nếu không có sẵn cluster liền nhau, hệ điều hành sẽ tìm kiếm cluster còn trống ở kế đó và ghi tiếp tập tin lên đĩa. Quá trình cứ tiếp tục như vậy cho đến khi toàn bộ tập tin được cất giữ hết. Hình 2.2 Cấu trúc track, cluster, sector 2.1.4 Cylinder Tập hợp các track cùng bán kính ở các mặt đĩa khác nhau tạo thành các cylinder. Trên đĩa hai mặt, một cylinder sẽ bao gồm rãnh 1 của mặt trên và rãnh 1 của mặt dưới. Trên các đĩa cứng sắp xếp cái này chồng lên cái kia, một cylinder gồm các rãnh trên cả hai mặt của tất cả các đĩa. Trên một ổ đĩa cứng có nhiều cylinder bởi có nhiều track trên mỗi mặt đĩa từ. Hình 2.3 Cấu trúc Cylinder 2.1.5 Phân vùng Phân vùng (partition) là tập hợp các vùng ghi nhớ dữ liệu trên các cylinder gần nhau với dung lượng theo thiết lập của người sử dụng để đáp ứng cho các mục đích sử dụng khác nhau. Phân chia nhiều phân vùng không phải là điều bắt buộc đối với các ổ đĩa cứng để nó làm việc (người dùng có thể thiết đặt một phân vùng duy nhất cho cả ổ cứng), chúng chỉ giúp cho người dùng có thể cài đặt đồng thời nhiều hệ điều hành trên cùng một máy tính hoặc giúp việc quản lý các nội dung, lưu trữ, phân loại dữ liệu được thuận tiện và tối ưu hơn, tránh sự phân mảnh của các tập tin. Phân vùng ổ đĩa từ khi đĩa còn trống có ý nghĩa rất lớn, tương tự như xây dựng cơ sở hạ tầng cho ổ cứng của mình. Chuyện phân vùng đĩa cứng thì có thể ai cũng làm được, nhưng phân vùng như thế nào cho có hiệu quả thì lại là chuyện khác. Những lời khuyên dưới đây giúp sử dụng ổ đĩa cứng một cách tối ưu hơn: - Càng ít ổ đĩa càng tốt (chủ yếu là dễ quản lý), nhưng phải đủ để sau này cần thì có sẳn khỏi phải tạo thêm. - Thiết lập phân vùng chứa hệ điều hành chính tại các vùng phía ngoài rìa của đĩa từ (outer zone) bởi vùng này có tốc độ đọc/ghi cao hơn, dẫn đến sự khởi động hệ điều hành và các phần mềm khởi động làm việc được nhanh hơn. Phân vùng này thường được gán tên là C. Phân vùng chứa hệ điều hành không nên chứa các dữ liệu quan trọng bởi chúng dễ bị virus tấn công hơn các phân vùng khác. Vệc sửa chữa khắc phục sự cố của hệ điều hành rất dễ làm mất toàn bộ dữ liệu tại phân vùng này và phải cài lại hệ điều hành. - Phân vùng thứ hai ngay sau phân vùng chứa hệ điều hành nên được dùng làm phân vùng chứa dữ liệu thường xuyên truy cập hoặc thay đổi. Trong quá trình sử dụng, nên thường xuyên thực hiện tác vụ chống phân mảnh tập tin trên phân vùng này. - Đặt riêng một phân vùng chứa các dữ liệu ít truy cập hoặc các file sao lưu. Phân vùng này nên đặt sau cùng, tương ứng với vị trí của nó ở gần khu vực tâm của đĩa (inner zone). Nên dùng tiện ích Ghost để sao lưu trọn phân vùng chứa hệ điều hành chủ lực của bạn, có đầy đủ các phần mềm ứng dụng cần dùng nhất, lưu ở phân vùng đó. Sau này, nếu hệ điều hành chủ lực của bạn chạy không ổn định, hoặc nhiễm virus, hỏng Master Boot Record thì không phải lo lắng. Bạn chỉ việc phục hồi hệ điều hành từ phân vùng đó về phân vùng khởi động là xong. Không cần phải cài đặt lại chương trình từ đầu. 2.2 Giới thiệu chuẩn giao tiếp IDE Cổng IDE (Integrated Device Electronics) thông thường (hiện có tên gọi là parallel ATA hoặc PATA) thực hiện phương thức truyền tải dữ liệu song song. Ưu điểm của việc truyền tải song song so với truyền tải nối tiếp trong chế độ trước đây là tốc độ cao, cùng một lúc bạn có thể gửi đi nhiều bit dữ liệu. Tuy nhiên điểm yếu chính của nó lại là vấn đề tạp âm nhiễu. Do có nhiều dây dẫn cùng được sử dụng (ít nhất là một cho mỗi bit được gửi), nên dây này sẽ gây xuyên nhiễu sang dây khác. Đây chính là lý do tại sao ATA-66 và các ổ đĩa cứng cao hơn cần đến một loại cáp đặc biệt lên đến 80 dây. Sự khác biệt giữa cáp 80 dây và cáp 40 dây thông thường là ở chỗ cáp 80 dây có các dây đất nằm giữa các dây truyền tín hiệu, mục đích của dây đất nằm giữa các dây truyền tín hiệu là để giảm sự xuyên nhiễu giữa chúng. Các cổng Parallel IDE sử dụng các đầu cắm 40-chân và cáp 80-dây. Băng thông: 100/133 MB/Secs. Volts: 5V. Số chân: 40. Chiều dài cáp tối đa: 18 inch (45.72cm). Hình 2.4 Cáp dữ liệu IDE (PATA) Hình 2.5 Cáp nguồn IDE (PATA) 2.3 Các chân data của IDE và chức năng của chúng 2.3.1 Các chân data của cáp IDE Hình 2.6 Vị trí các chân data của cáp IDE Bảng 2.1 Tên các chân data của cáp IDE Pin 1 Reset Pin 11 Data 3 Pin 21 DDRQ Pin 31 IRQ Pin 2 Ground Pin 12 Data 12 Pin 22 Ground Pin 32 No connect Pin 3 Data 7 Pin 13 Data 2 Pin 23 I/O write Pin 33 Addr 1 Pin 4 Data 8 Pin 14 Data 13 Pin 24 Ground Pin 34 GPIO_DMA66_Detect Pin 5 Data 6 Pin 15 Data 1 Pin 25 I/O read Pin 35 Addr 0 Pin 6 Data 9 Pin 16 Data 14 Pin 26 Ground Pin 36 Addr 2 Pin 7 Data 5 Pin 17 Data 0 Pin 27 IOCHRDY Pin 37 Chip select 1P Pin 8 Data 10 Pin 18 Data 15 Pin 28 Cable select Pin 38 Chip select 3P Pin 9 Data 4 Pin 19 Ground Pin 29 DDACK Pin 39 Activity Pin 10 Data 11 Pin 20 Key or VCC_in Pin 30 Ground Pin 40 Ground 2.3.2 Chức năng các chân tín hiệu Bảng 2.2 Chức năng các chân data của cáp IDE CS0 (1:0) - (chip select) Chân chọn tín hiệu từ host dùng chọn command block registers. Khi DMACK được xác định, CS0 và CS1 được phủ định và cho phép truyền 16 bit. DA (2:0) - (device address) Đây là bit địa chỉ được xác định bởi host để truy nhập thanh ghi hoặc data port trong device. DASP - (device active, device 1 present) Đây là chân tín hiệu thời gian multiplexed để chỉ ra device được tích cực (hoạt động) hoặc device 1 là device hiện tại. DD (15:0) - (device data) Đây là 8 bit hoặc 16 bit dữ liệu giao tiếp giữa host và device, 8 bit thấp sẽ được dùng trong thanh ghi 8 bit truyền, dữ liệu được truyền với 16 bit. DIOR-:HDMARDY-:HSTROBE (Device I/O read:Ultra DMA ready:Ultra DMA data strobe) DIOR: là tín hiệu nhấp nháy xác định từ host để đọc thanh ghi device hoặc data port. HDMARDY: là tín hiệu điều khiển cho dữ liệu Utral DMA. Tín hiệu được xác định bởi host để chỉ ra device mà host đã sẵn sàng nhận Ultra data, host sẽ phủ định HDMARDY để dừng nhận Ultra data. HSTROBE: là tín hiệu data out từ host cho 1 Ultra DMA data out. DIOW-:STOP (Device I/O write:Stop Ultra DMA burst) DIOW:tín hiệu xác định từ host để ghi vào thanh ghi device hoặc port dữ liệu. DIOW sẽ được phủ định bởi host để chỉ sự bắt đầu cùa Ultra DMA bursts. STOP sẽ được phủ định trước khi dữ liệu được truyền trong Ultra DMA burst.Sự xác định của STOP bởi host dựa vào tín hiệu Ultra DMA burst kết thúc của Ultra DMA burst. DMACK (DMA acknowledge) Tín hiệu này dùng bởi host để đáp trả cho DMARQ để kết thúc truyền DMA. DMARQ (DMA request) Tín hiệu này dùng đối với dữ liệu DMA truyền giữa host và device, sẽ được xác định bởi device khi nó sẵn sàng truyền hoặc nhận dữ liệu từ host. Đối với quá trình truyền DMA được điều khiển bởi DIOR-DIOW. Tín hiệu này được dùng như bắt tay với DMACK, device sẽ đợi cho đến khi DMACK được xác nhận trước khi DMARQ phủ định và xác định lại DMARQ khi lại có dữ liệu để truyền. Khi DMA được cho phép, CSO-CS1 không được xác nhận và truyền 16 bit. INTRQ (device interrupt) Tín hiệu được dùng để chọn device ngắt hệ thống host. IORDY:DDMARDY-:DSTROBE (I/O channel ready:Ultra DMA ready:Ultra DMA data strobe) Tín hiệu này là phủ định kéo dài suốt chu kỳ truyền của thanh ghi truy cập của host (đọc hoặc ghi) khi device không sẵn sàng đáp trả lại yêu cầu truyền dữ liệu. Nếu device yêu cầu để kéo dài thời gian chu kỳ truyền qua host tại PIO mode 3 và trở lên, các device sẽ sử dụng IORDY. Các host sử dụng PIO mode 3 và trở lên sẽ hỗ trợ IORDY. DDMARDY: là cờ điều khiển của Ultra DMA data out burst. Tín hiệu này được xác định bởi host để cho host biết rằng device đã sẵn sàng nhận Ultra DMA data out burst. Device có thể phủ định DDRARDR để dừng việc nhận Ultra DMA data out burst. DSTROBE: là dữ liệu trong tín hiệu từ device cho Ultra DMA data in burst. Device sẽ ngừng việc phát DSTROBE để dừng 1 Ultra DMA data in burst. PDIAG-:CBLID- (Passed diagnostics:Cable assembly type identifier) PDIAG sẽ được xác định bởi device 1 để cho device 0 biết rằng nó đã hoàn thành việc chuẩn đoán. Host có thể lấy mẫu CBLID sau khi bật nguồn hay sau 1 reset để phát hiện sự có mặt của cable 80 chân. Host sẽ đợi đến khi bật nguồn hay reset hoàn tất thì các device sẵn sàng trên cable. Nếu device 1 đang được chọn thì host sẽ phát IDENTIFY DEVICE hoặc IDENTIFY PACKET DEVICE. 2.4 Các thanh ghi giao tiếp 2.4.1 Định địa chỉ device Chỉ có device nào được chọn mới nhận được command từ host. Trong môi trường này thì thanh ghi chứa 2 device. Host sẽ phân biệt được 2 device bằng bit DEV trong thanh ghi Device/head. Khi DEV=0 thì device 0 được chọn, DEV=1 thì device 1 được chọn. Dữ liệu sẽ được truyền đồng thời cho cả 2 từ bộ nhớ của host đến buffer của device thông qua các lệnh trực tiếp của host. Dữ liệu được đọc từ môi trường sẽ được lưu trữ ở buffer của device và chờ để gửi đến bộ nhớ của host và ngược lại thì host gửi dữ liệu đến buffer của device để ghi vào môi trường. 2.4.2 Thanh ghi I/O Để có thể liên lạc được với device thông qua thanh ghi I/O để định input hoặc output của data đến hoặc từ địa chỉ thanh ghi bằng tín hiệu từ host. 2.4.3 Thanh ghi Alternate status Địa chỉ: Thanh ghi này chỉ đọc, nếu địa chỉ được ghi bởi host thì device điều khiển thanh ghi được ghi. Khi bit BSY được set lên 1 thì các bit khác sẽ không được dùng, toàn bộ nội dung thanh ghi sẽ không có giá trị trong khi device ở chế độ Sleep mode. Thanh ghi này chứa đựng thông tin như thanh ghi trạng thái trong command block. 2.4.4 Thanh ghi Command Địa chỉ: Thanh ghi này chỉ ghi, nếu địa chỉ này được đọc bởi host thì thanh ghi trạng thái được đọc. Đối với tất cả command ngoại trừ Device Reset, thanh ghi này sẽ được ghi khi cả 2 bit BSY và DRQ đều được set lên. Nội dung thanh ghi này sẽ không có giá trị nếu như device ở chế độ Sleep mode. 2.4.5 Thanh ghi Cylinder high Địa chỉ: Nội dung thanh ghi sẽ chì có giá trị khi bit BSY được xóa về 0, thanh ghi được ghi khi cả 2 bit BSY và DRQ được set lên 1. Nội dung thanh ghi này sẽ không có giá trị nếu như device ở chế độ Sleep mode. Nội dung thanh ghi trở thành thông số của command khi thanh ghi command được ghi. 2.4.6 Thanh ghi Cylinder low Địa chỉ: Nội dung thanh ghi chỉ có giá trị khi bit BSY được xóa về 0. Thanh ghi được ghi khi cả 2 bit BSY và DRQ được set lên 1. Nội dung thanh ghi này sẽ không có giá trị nếu như device ở chế độ Sleep mode. Nội dung thanh ghi trở thành thông số của command khi command register được ghi. 2.4.7 Thanh ghi dữ liệu Địa chỉ: Nội dung thanh ghi này sẽ không có giá trị nếu như device ở chế độ Sleep mode. Thanh ghi này có độ dài 16 bit. PIO data out sẽ được truyền như một chuỗi đọc từ thanh ghi này. PIO data in sẽ được truyền như một chuỗi ghi từ thanh ghi này. Kết quả quá trình đọc dựa vào PIO in và quá trình ghi dựa vào PIO out là vô định. 2.4.8 Data port Địa chỉ: Khi DMACK- is asserted, CS0- and CS1- shall be negated and transfers shall be 16-bits wide. Port này có thể đọc và ghi. 2.4.9 Thanh ghi Device control Địa chỉ: Thanh ghi chỉ ghi khi DMACK=not asserted. Nội dung thanh ghi sẽ chịu tác động khi ghi. Bit 7-3: dự trữ. Bit SRST: host sofware reset bit. Bit nIEN: là 2 bit cho phép host ngắt kết nối với device, khi bit này là 0 thì device được chọn và ngược lại. Bit 0 sẽ được xóa về 0. 2.4.10 Thanh ghi Device/head Địa chỉ: Thanh ghi được ghi khi cả 2 bit BSY và DRQ đều là 1. Tất cả các bit trong thanh ghi trở thành thông số của command khi command register được ghi. Bit DEV dùng chọn lựa device. #: nội dung những bit này là những command độc lập. 2.4.11 Thanh ghi lỗi Địa chỉ: Thanh ghi này cho biết trạng thái của command dang thực thi. Bit ABRT sẽ được set lên 1 khi một command bị lỗi hay không tồn tại command code. 2.4.12 Thanh ghi Features Địa chỉ: Chỉ cho phép ghi khi địa chỉ đúng và thanh ghi Error đã được kiểm tra. Nội dung của nó sẽ là một chuỗi command khi thanh ghi lệnh được ghi. 2.4.13 Thanh ghi đếm sector Địa chỉ: Cho phép đọc và ghi. Thanh ghi được đọc khi cả 2 bit BSY và DRQ được xóa về 0, lúc này nội dung thanh ghi mới có giá trị. Ngược lại đọc thanh ghi này khi 2 bit trên đều được set lên 1 thì nội dung sẽ là bất định (không chính xác). 2.4.14 Thanh ghi số sector Địa chỉ: Cho phép đọc và ghi. Thanh ghi được đọc khi cả 2 bit BSY và DRQ được xóa về 0, lúc này nội dung thanh ghi mới có giá trị. Ngược lại đọc thanh ghi này khi 2 bit trên đều được set lên 1 thì nội dung sẽ là bất định (không chính xác). 2.4.15 Thanh ghi trạng thái Địa chỉ: Chỉ cho phép đọc. Nội dung thanh ghi không có giá trị khi device ở chế độ Sleep mode. Nội dung thanh ghi chứa đựng trạng thái của device. BSY: được set lên 1 báo device đang bận, sau khi host ghi lên thanh ghi lệnh thì device set BSY hay DRQ lên 1 cho đến khi lệnh thực thi xong. BSY được set lên 1 khi: khi reset, sau khi gửi 1 command mà DRQ không set lên 1, lúc giữa quá trình truyền data dựa vào PIO data in trước khi DRQ xóa về 0, sau khi truyền xong data dựa vào PIO data out trước khi DRQ xóa về 0. Khi BSY được set lên 1 thì device sẽ điều khiển thanh ghi lệnh từ chối ghi lệnh từ host ngoại trừ Device reset command. BSY được xóa về 0 khi sau khi DRQ set lên 1 để báo nó sẵn sàng truyền dữ liệu, command thực thi xong, khi device sẵn sàng nhận lệnh mà không cần đợi DRDQ dựa vào lúc bật nguồn hay reset phần cứng cũng như phần mềm. Khi BSY xóa về 0 thì không set DRQ lên 1, không thay đổi bit ERR, không thay đổi nội dung command. DRDY (device ready): Set lên 1 khi device nhận command của device không hoàn thành PACKET command feature set. Khi set lên 1 thì device sẵn sàng nhận mọi command thiết lập, device ở chế độ idle mode hoặc standby mode. Xóa về 0 khi bật nguồn hay reset bằng phần cứng cũng như phần mềm. DRQ (data request): Set lên 1 khi BSY được set lên 1 và data sẵn sàng truyền, khi đó host sẽ bắt đầu truyền data. Xóa về 0 khi phần cuối cùng của data hay command truyền xong. ERR (error): Set lên 1 khi BSY, DRQ được set lên 1 và có lỗi trong quá trình ghi command, khi đó device sẽ không thay đổi giá trị của thanh ghi trạng thái đến khi nào command được cho phép. Xóa về 0 khi có 1 lệnh mới được ghi vào thanh ghi lệnh, SRST được set lên 1, khi reset. 2.5 Tập lệnh 2.5.1 Identify device Command code: ECh. Feature set: Bắt buộc cho tất cả các thiết bị. Thiết bị thực hiện gói lệnh tính năng thiết lập. Protocol: PIO data in. Input: Trong thanh ghi Device/head, bit DEV sẽ cho biết device được chọn. Normal output: Thanh ghi trạng thái bao gồm BSY=0; DRDY=1; DF, DRQ, ERR=0. Output for PACKET command feature set device: Để trả lời lệnh này thì device mà hoàn thành PACKET command feature set sẽ bị gạt bỏ và chuyển PACKET command feature set vào command block register. Error output: Device không hoàn thành PACKET command feature set sẽ không phản hồi lại error. Prerequisites: DRDY=1. Description: Giúp host nhận tham số thông tin về thiết bị. Một số thiết bị có thể sẽ phải đọc được dữ liệu truyền thông để hoàn tất thực thi lệnh này. Một khi lệnh được đưa ra, thiết bị sẽ set bit BSY lên 1 và gửi 256 từ xác định thông tin của thiết bị đến host, DRQ=1, BSY=0 và gán INTRQ nếu NIEN=0. Host có thể chuyển dữ liệu bằng việc đọc thanh ghi dữ liệu. Các bảng bên dưới mô tả sự sắp xếp và ý nghĩa của các từ trong bộ đệm. Bảng 2.3 Nội dung 512 bytes Identify Bảng 2.4 Nội dung 512 bytes Identify (tiếp theo) Bảng 2.5 Nội dung 512 bytes Identify (tiếp theo) Bảng 2.6 Nội dung 512 bytes Identify (tiếp theo) 2.5.2 Read sector Mã lệnh: 20H hoặc 21H. The host sẽ không dùng giá trị 21H. Feature set (chức năng): Bắt buộc cho tất cả device. Protocol: PIO data in. Input: Sector count là số sector được chuyển, thanh ghi có 8 bit nên sẽ có tối đa 256 sectors. Normal Output: Trong thanh ghi Device/head, bit DEV sẽ cho biết device được chọn. Thanh ghi trạng thái: BSY sẽ được xóa về 0 khi lệnh thực hiện xong. DRDY sẽ được set lên 1. DF, DRQ, ERR sẽ được xóa về 0. Output for Packet command feature set device: Đáp ứng cho lệnh này thì device thực hiện Packet command feature set sẽ ra lệnh cấm vào nơi mà Packet command feature set đánh dấu trong thanh ghi cylinder low và cylinder high. Error output: Thanh ghi Error: UNC sẽ được set lên 1 nếu như dữ liệu chưa sửa chữa. MC sẽ được set lên 1 nếu như có sự thay đổi môi trường. IDNF, MCR, ABRT, NF sẽ được set lên 1. Các thanh ghi sector number, cylinder low, cylinder high. Device/head sẽ chỉ ra địa chỉ đầu của error. Thanh ghi trạng thái: BSY sẽ được xóa về 0 khi lệnh thực hiện xong. DRDY set lên 1. DF set lên 1 nếu phát hiện lỗi ổ cứng. DRQ xóa về 0. ERR sẽ được set lên 1 nếu như có 1 bit trong thanh ghi Error được set lên 1. Prerequisites: DRDY được set lên 1. Description: Lệnh này sẽ đọc từ 1 đến 256 sector, được xác định trong thanh ghi sector count. Quá trình sẽ bắt đầu ở sector xác định trong thanh ghi sector number. Bit DRQ luôn được set lên 1 ưu tiên truyền dữ liệu bất chấp sự có mặt hay không có mặt của lỗi. 2.5.3 Ghi sector Mã lệnh: 30h hoặc 31h. Feature set: Bắt buộc cho device không thực hiện packet command feature set. Cấm sử dụng đối với device thực hiện packet command feature set. Protocol: Input: Normal output: Error Output: Prerequisites: DRDY set len 1. Description: Command này cho phép ghi từ 1 đến 256 sector vào thanh ghi sector count. 2.5.4 Check Power Mode Mã lệnh: E5h. Feature set: Thiết lập tính năng quản lý nguồn là bắt buộc. Lệnh này bắt buộc khi thiết lập tính năng quản lý nguồn được thực hiện. Protocol: non data command. Input: Normal output: Error Output: Prerequisites: DRDY=1. Description: Lệnh kiểm tra mode nguồn cho phép xác định chế độ nguồn hiện tại của thiết bị. Lệnh kiểm tra mode nguồn sẽ không gây thay đổi công suất thiết bị hay tác động lên bộ đếm chờ thời gian của nó. CHƯƠNG 3 CHUẨN FAT 32 3.1 Giới thiệu FAT 32 3.1.1 Định nghĩa FAT FAT (File Allocation Table) là bảng định vị File trên đĩa, bảng này liệt kê tuần tự số thứ tự của các cluster dành cho file lưu trữ trên đĩa. Từ phiên bản DOS 4.0 trở đi, Microsoft sử dụng giải pháp cluster. Cluster là một nhóm các sector liền kề nhau dùng chung một thẻ dữ liệu để quản lý như một sector duy nhất. Khi cấp phát đĩa cho 1 file mới ta sẽ phải cấp phát toàn bộ 1 cluster chứ không thể cấp riêng 1 sector được. Số lượng sector trong một cluster là do hệ điều hành áp đặt cho từng loại đĩa có dung lượng thích hợp. Đĩa mềm thường được nhóm 2 sector thành một cluster. Với đĩa cứng, số sector trong một cluster có thể là 4, 8, 16, 32…Khi FAT đã chỉ định cluster nào cho file thì toàn bộ các sector trong cluster đó bị file chiếm giữ kể cả khi trong thực tế file chỉ nằm trên một vài sector đầu của cluster, còn các sector sau bỏ trống. Như vậy, số sector trong một cluster càng nhiều thì tình trạng lãng phí các sector bỏ trống mà file chiếm giữ càng lớn. Mỗi đĩa có 2 bảng FAT giống hệt nhau. FAT thứ nhất bắt đầu ngay sau Boot Sector và chiếm dụng nhiều sector tiếp theo, FAT thứ 2 để lưu đề phòng sự cố, nằm tiếp theo sau FAT thứ nhất. 3.1.2 Các loại FAT Các phiên bản của hệ điều hành DOS hoặc hệ điều hành Windows chỉ qui định có 3 loại FAT là: FAT 12 dành cho đĩa mềm hoặc đĩa cứng có dung lượng rất bé. FAT 16 dành cho đĩa cứng có dung lượng 1GB trở xuống. FAT 32 dành cho các đĩa cứng có dung lượng vài GB trở lên. Độ dài của mỗi phần tử của FAT được tính bằng số bit. Độ dài này biểu thị khả năng chỉ thị số đếm của phần tử FAT. Với các đĩa mềm số lượng các cluster là nhỏ nên chỉ cần 12 bit là đủ để chỉ thị số đếm này. Vì vậy các đĩa mềm dùng FAT 12 bit. Với đĩa cứng có dung lượng từ 1GB trở lại để chỉ thị số cluster lớn nhất thì phải dùng tới con số có độ dài 16 bit vì thế hình thành FAT 16 bit. Với các đĩa cứng có dung lượng vài GB trở lên, số lượng các sector trên đĩa rất lớn, đồng thời để hạn chế sự lãng phí các sector bỏ trống trong các cluster người ta quy định lại số sector trong mỗi cluster nhỏ đi. Vì vậy, số cluster trong các đĩa cứng dung lượng lớn thường rất lớn nên người ta phải dùng con số 32 bit để biểu thị. Đó chính là lý do hình thành FAT 32 bit. (FAT 32 có 232 thẻ dữ liệu, mỗi thẻ dữ liệu quản lý 1 cluster thường có kích thước là 4KB (tương ứng với 8 sector), như vậy có thể quản lý được 232 x 4KB = 216GB là một dung lượng rất lớn. Trong khi đó, nếu dùng FAT12 thì chỉ quản lý được ô đĩa dung lượng 64MB, còn dùng FAT 16 thì chỉ quản lý được ổ đĩa dung lượng tối đa 1024 MB). 3.1.3 Ưu nhược điểm của các loại FAT Windows 95 và mọi phiên bản của DOS đều quản lý đĩa cứng theo FAT 16. Sự xuất hiện của các đĩa cứng ngày càng lớn về sau này dẫn tới kích thước cluster lớn hơn nhiều và điều này tương đương với lãng phí đĩa. Bởi vì nếu kích thước cluster trên đĩa cứng là 32KB, khi cấp phát cho 1 file trên đĩa chỉ gồm 1 byte ta vẫn phải cấp cho nó toàn bộ 1 cluster. Do đó ta sẽ lãng phí 32KB - 1byte còn lại. Chỗ còn lại này (gọi là slack) không thể sử dụng được cho các file khác. Sự ra đời của FAT 32 đã cải thiện được tình hình trên: nó hỗ trợ các Partition lớn tới 2 Terabytes, và kích thước cluster nhỏ hơn 4 KB với mọi Partition nhỏ hơn 8GB. Tuy nhiên, nếu đĩa cứng có kích thước cluster càng nhỏ thì máy càng chậm. Điều này đúng với mọi hệ điều hành, mọi dạng FAT. Lí do là với kích thước cluster nhỏ, các file sẽ bao gồm nhiều cluster hơn và do đó việc đọc ghi sẽ lâu hơn. Chẳng hạn, trong hệ thống có kích thước cluster là 16KB, một file ảnh 320KB sẽ bao gồm 20 cluster, việc mở file này sẽ phải thực hiện 20 lần thao tác đọc cluster. Nhưng nếu kích thước cluster là 2KB thì file đó sẽ bao gồm 160 cluster và việc mở file sẽ phải thực hiện tới 160 lần thao tác đọc cluster. Do đó các ứng dụng có nhiều tác vụ đọc ghi đĩa sẽ chậm đi rõ rệt. Thế nhưng nếu sử dụng cluster lớn hơn thì slack cũng lớn lại dẫn đến lãng phí đĩa cứng. Trong trường hợp sử dụng cùng kích thước Partition và cluster, các thử nghiệm cho thấy FAT 32 và FAT 16 cho tốc độ xấp xỉ nhau (chênh lệch trong vòng 2%). Vậy là ta cần phải lựa chọn hiệu năng giữa máy và đĩa cứng: cluster nhỏ sẽ làm bớt slack nhưng lại làm giảm tốc độ đĩa cứng, cluster lớn hơn làm tăng lượng lãng phí nhưng cũng làm tăng hiệu năng đĩa. Microsoft đã quyết định hộ chúng ta rằng cluster khoảng 4KB là cân bằng giữa slack và hiệu năng bằng cách qui định kích thước cluster 4KB là mặc định với FAT 32. Như vậy, FAT 32 có ưu điểm là quản lý được ổ đĩa có dung lượng rất lớn, với số sector được nhóm trong một cluster là nhỏ nên hiện tượng số sector bị bỏ trống cũng ít, tận dụng được dung lượng lưu trữ của đĩa. Nhược điểm cơ bản của FAT 32 là mỗi phần tử chiếm 32 bit (4bytes) nên cấu trúc của bảng FAT 32 rất dài, số lượng sector dành cho FAT 32 cũng rất lớn. Hơn nữa, việc xử lý với số đếm 32 bit phức tạp hơn nhiều so với việc xử lý số đếm 16 bit. Tuy nhiên ta không cần quan tâm tới sự phức tạp này vì hệ điều hành đã làm rồi. Bảng FAT thứ nhất thường nằm ngay sau Boot Sector (head 1, cylinder 0, sector1) của mỗi Partition, và có một bảng FAT dự trữ nằm ngay sau bảng FAT thứ nhất. Để biết được hệ thống đang sử dụng thuộc loại FAT nào ta cần dựa vào nội dung của Master Boot Record (MBR). MBR nằm ở sector đầu tiên của đĩa cứng. 3.2 Quản lý bộ nhớ trong thiết bị lưu trữ và quá trình Boot của PC 3.2.1 Quá trình khởi động của PC Khi PC được khởi động, CPU sẽ load chương trình từ Flash trên Mainboard được gọi là BIOS. BIOS giúp cấu hình CPU đồng thời kiểm tra các ngoại vi xung quanh CPU như: Monitor, Keyboard, Mouse, CD-ROM disk, Hard disk…Sau khi thực hiện xong các quá trình này CPU sẽ tiến hành load hệ điều hành để hoạt động. Tuy nhiên hệ điều hành thường được lưu trữ trên Hard disk, vì vậy muốn load hệ điều hành thì CPU cần thực hiện tuần tự các quá trình gì?, làm cách nào hệ điều hành có thể kiểm soát tất cả các File trên ổ cứng cũng như các thiết bị lưu trữ khác? 3.2.2 Đơn vị lưu trữ dữ liệu trên các thiết bị có dung lượng lớn Trong các thiết bị lưu trữ có dung lượng bé thì đơn vị quản lý thông thường là Byte, Word, Doubleword. Ngày nay các thiết bị lưu trữ thông thường có dung lượng từ vài MB đến vài trăm GB, do đó để kiểm soát từng Byte/Word trên toàn bộ vùng nhớ là không thể. Vì vậy các thiết bị lưu trữ sẽ không quản lý từng Byte/Word mà sẽ quản lý từng Sector/Cluster/Block -1 Sector = 512 Byte (thông thường). -1 Cluster = nhiều Sector (trong các ổ cứng). -1 Block = nhiều Sector (thẻ nhớ). Kết luận: quá trình cấp phát bộ nhớ trong các hệ thống luôn là bội số của Sector, Cluster, Block 3.3 Quá trình đầu tiên khi Boot ổ cứng để đọc các thông số 3.3.1 Master Boot Record Sau khi nhận được ổ cứng, hệ thống có thể biết các thông tin về ổ cứng như: Có bao nhiêu phân vùng (Partition) trên ổ đĩa, mỗi partition có dung lượng bao nhiêu, có bao nhiêu Primary Partition, có bao nhiêu Secondary Partition, Partition nào chứa hệ điều hành… từ Sector đầu tiên trên ổ cứng (Sector 0). Sector này được gọi là Master Boot Record. Master Boot Record (MBR) có chiều dài 1 Sector (512 Byte) được tạo ra bởi hệ thống khi lần đầu tiên Format device bao gồm: 446 Byte Boot Code + 4 Entry Partition + 2 Byte kết thúc. -Boot Code: Code này được nạp vào cho CPU chạy giống như code trên BIOS lúc khởi động. -Entry Partition: Mỗi Entry có chiều dài 16 Byte. -2 Byte kết thúc: luôn luôn có giá trị không đổi là 55AA Kết luận: đối với quá trình phân tích chúng ta không quan tâm đến 446 Byte Boot Code mà chỉ quan tâm đến các Entry và phân tích chúng. Bảng 3.1 Cấu trúc của Master Boot Record 3.3.2 Entry Partition Trong MBR không phải lúc nào cũng có đầy đủ 4 Entry, số entry phụ thuộc vào số lượng Primary Partition và Secondary Partition. Tuy nhiên trong Windows qui định tối đa 4 entry, trong trường hợp số entry nhỏ hơn 4 thì vùng trống sẽ có giá trị là 00. Entry được chia làm 2 loại: Entry primary partition và Entry Extentded. Entry primary partition: Dùng để kiểm soát Primary Partition. Bảng 3.2 Cấu trúc Entry Primary Partition Trong đó: -Boot Flag: Cờ báo trạng thái của Partition, cờ này báo cho hệ thống biết có hay không OS trên partition. -Type Code: Định dạng Partition (FAT32/NTFS…). -LBA Begin: Sector bắt đầu của Partition (= Số Sector cách MBR)àNhảy đến Volum ID (PBR). -Number of Sector: Dung lượng của Partition đang quản lý là bao nhiêu. Entry Extentded: Quản lý các Secondary Partition. Tương tự như Entry Primary Partition. Nhưng thay vào đó trường LBA Begin cho biết địa chỉ của Extent Master Boot Record trên ổ cứng. Trường Number of Sector cung cấp cho hệ thống biết dung lượng tổng cộng của các Secondary Partition trong Extent Master Record. 3.4 Quá trình nhảy từ các Entry của Master Boot Record 3.4.1 Quá trình nhảy đến Volume ID Từ Entry của Primary Partition trong MBR, thông tin LBA Begin sẽ giúp hệ thống nhảy đến Partition đó. Sector đầu tiên của Partition đó được gọi là Volume ID (còn được gọi là Partition Boot Record). Partition Boot Record (PBR) chứa các thông tin như Byte Per Sector, Sector Per Cluster, Number of Reserved Sector, Sector Per FAT, Root Directory First Cluster. Nếu ổ đĩa của chúng ta chỉ có Primary Partition thì không có khái niệm Extent MBR. Extent MBR chỉ xuất hiện khi có Secondary Partition trên ổ đĩa. Hình bên dưới mô tả ổ đĩa chỉ chứa Primary Partition. Bảng 3.3 Cấu trúc ổ đĩa chỉ chứa Primary Partition 3.4.2 Quá trình nhảy đến Extent MBR Extent MBR có chiều dài 1 Sector giống như MBR nhưng nó không chứa code như MBR mà chỉ chứa các entry để quản lý Secondary Partition. Một điều cần lưu ý là mỗi Extent chỉ quản lý 1 Entry của 1 Partition và Extent cấp dưới của nó (nếu có). Như vậy, nếu ổ cứng của chúng ta có bao nhiêu Primary Partition thì nó sẽ có bấy nhiêu Extent để kiểm soát. Khi hệ thống nhảy tới Partition (Secondary hay Primary) thì Sector đầu tiên của Partition luôn luôn là Partition Boot Record (PBR) để kiểm soát toàn bộ Partition đó. 3.4.3 Quá trình nhảy tới Volume ID của Secondary Partition Cũng giống như cũng giống như PBR của Primary Partition, nhưng nó sẽ lấy thông tin LBA Begin từ Entry của Extent chứ không phải của MBR. PBR của tất cả các Partition đều có ý nghĩa như nhau và nó cũng chứa các thông tin như: Byte Per Sector, Sector Per Cluster, Sector Per FAT… Bảng 3.4 Cấu trúc ổ đĩa khi có Secondary Partition 3.5 Phân tích Volume ID (PBR) Chúng ta cần quan tâm đến các thông số sau: Bảng 3.5 Các thông số mà Partition Boot Record cung cấp Field Offset Size Value Byte Per Sector 0x0B 16Bits Always 512B Sector Per Cluster 0x0D 8Bits 1,2,4,8,16,32,64,128 No. of Reserved Sector 0x0E 16Bits Usually 0x20 No. of FATs Table 0x10 8Bits Always 2 Sector Per FAT 0x24 32Bits Depends on disk size Root Directory Fist Clus. 0x2C 32Bits Always 0x00000002 Singnature 0x1FE 16Bits Always 0xAA55 LBA Begin of FAT= LBA Begin of Partition + Number of Reserved Sectors (Xác định vị trí bảng FAT). LBA Begin of Cluster2 = LBA Begin of Partition + Number of Reserved Sectors + (Number of FATs * Sectors Per FAT) (Xác định vị trí Root Directory). Bảng 3.6 Cấu trúc của Partition Boot Record 3.6 Xác định bảng FAT trên Partition Sector đầu tiên của Partition là Partition Boot Record (Volume ID), kế tiếp là các Reserved Sector, kế đến là bảng FAT1, bảng FAT2, vùng còn lại là File đường dẫn (bao gồm cả Root Directory) được kiểm soát bởi số Cluster. Hai thông số cần quan tâm đó là địa chỉ bắt đầu của bảng FAT và địa chỉ bắt đầu của Cluster đã được tính ở slide trước. Công thức tính vị trí của 1 Cluster bất kỳ: LBA of Address = LBA Begin of Cluster + (No. of Cluster - 2) * Sectors Per Cluster. Lưu ý: Từ Root Directory trở đi, quá trình quản lý vùng nhớ được tính bằng số Cluster chứ không quản lý bằng Sector. Bảng 3.7 Vị trí bảng FAT trên Partion 3.7 Phân tích Root Directory và xác định File/Folder 3.7.1 Root Directory Mỗi Partition chứa PBR (Volume ID), bảng FAT, Root Directory, Folder và File. Tất cả các File và Folder (bao gồm cả Root Directory) đều được hệ thống quản lý bằng số Cluster. Hai thông tin quan trọng khi truy xuất File/Folder đó là vị trí bắt đầu của File/Folder và vị trí các Cluster chứa File/Folder. Tên của Root Directory chính là tên của Partition, Root Directory quản lý tên, chiều dài và vị trí bắt đầu của File/Folder. Tuy nhiên Root Directory còn cung cấp một số thông tin như thuộc tính, thời gian ghi, thời gian hiệu chỉnh File/Folder. Dựa vào địa chỉ bắt đầu của File/Folder trên Root Directory chúng ta sẽ truy xuất chúng từ bảng FAT. Vậy, để truy xuất File/Foler chúng ta phải sử dụng Root Directory và FAT Table. Root Directory quản lý các File/Folder thông qua các Entry (mỗi entry có chiều dài 32 byte). Có các loại Entry sau: -Normal Record with Short filename – Attrib is normal. -Long filename text – Attrib has all four type bits set. -Unused – First byte is 0xE5. -End of directory – First byte is zero. Trong Root Directory, thông tin mỗi Short filename được chứa trong 1 Entry. Đối với Long name text thì số lượng Entry này sẽ thay đổi tùy theo chiều dài tên. Unused Entries có Byte đầu tiên là 0xE5 để báo hệ thống biết File/Folder đã bị xóa, vì vậy vùng nhớ đó có quyền sử dụng cho các File/Folder khác. Kết luận: không truy xuất các Entry bắt đầu bằng 0x00 hoặc 0xE5. 3.7.2 Cách nhận dạng Long File Name và Short File Name Trong Root Directory chúng ta chỉ quan tâm đến các Entry có chứa thông tin (Long File Name và Short File Name). - Nếu Byte đầu tiên của Entry là 0xE5 (Unused) thì Entry này đã bị xóa (không chứa thông tin). - Nếu Byte đầu tiên của Entry là 0x00 (End of Directory) thì từ Entry đó xuống dưới hết thông tin (kết thúc Root Directory). Việc phân biệt Entry của LFN và SFN được dựa vào byte thuộc tính Attrib có địa chỉ offset 0x0B. Nếu Attrib là 0x0F thì đây là entry của LFN, các entry kế tiếp chứa tên của LFN. Nếu Attrib khác 0x0F thì đây là entry của SFN. Nếu Entry là Short File Name thì nội dung của Entry sẽ được mô tả ở slide kế tiếp. Kết luận: để xác định số lượng File và Folder trong Partition chúng ta phải đọc và phân tích toàn bộ Root Directory. Normal Record with Short filename: Mỗi File/Folder có tên ngắn (nhỏ hơn 11Byte bao gồm tên mở rộng) được quản lý trong 1 Entry, Entry này được mô tả như sau: Bảng 3.8 Kích thước chi tiết entry của short file name Field Offset Size Short Filename 0x00 11 Bytes Attrib Byte 0x0B 1 Byte First Cluster High 0x14 2 Byes First Cluster Low 0x1A 2 Bytes File Size 0x1C 4 Bytes Bảng 3.9 Chức năng của bit Attrib Attrib Bit Function LFN Comment 0(LSB) Read Only 1 Not allow writing 1 Hidden 1 Not show in dir listing 2 System 1 File is operating system 3 Volume ID 1 File is Volume ID 4 Directory X Is a subdirectory 5 Archive x Change sine last backup Short Filename: Có chiều dài 11 Byte, mỗi byte chứa 1 ký tự của tên (ASCII) theo định dạng 8.3 (8 ký tự ASCII của tên + 3 ký tự mở rộng), nếu tên File/Folder ngắn hơn 8 ký tự thì vùng còn trống sẽ được chèn ký tự space. Byte đầu tiên phải có giá trị khác 0x00 và 0xE5. Attrib Byte: Cung cấp các thông tin về File/Folder như: Read only, Hidden, System File, Directorty… First Cluster: Cung cấp địa chỉ bắt đầu của File/Folder (4 Byte). File Size: Chiều dài 1 File tối đa 232 = 4GB. Long filename text: Tương tự như Short Filename, nhưng sẽ thêm vào một vài entries trước entries thông thường (Entry thông thường là entry có chứa địa chỉ đầu tiên và dung lượng của File/Folder đó) để quản lý tên File/Folder (tên lớn hơn 13 ký tự bao gồm tên mở rộng). Vì vậy vấn đề truy xuất File/Folder có tên dài chỉ nằm ở vấn đề truy xuất tên File/Folder, sau khi truy xuất tên File/Folder thì công việc còn lại giống như truy xuất File/Folder có tên ngắn. Tên File/Folder có chiều dài tối đa 255 ký tự ASCII, mỗi entry chứa 13 ký tự và số entry sử dụng luôn là số nguyên vì vậy nếu entry chứa các ký tự cuối cùng (entry đầu tiên) có số ký tự nhỏ hơn 13 thì sẽ được thêm vào các byte 0x00 0x00 (UTF) hoặc 0xFF 0xFF. - Quá trình đọc Entry của File/Folder có tên dài (LFN) hoàn toàn tương tự quá trình đọc File/Folder có tên ngắn, nhưng có sự thay đổi trong một vài trường và được mô tả như hình bên. - Entry đầu tiên của LNF chứa tên mở rộng (đối với File) và một vài ký tự cuối cùng của tên File/Folder nên được gọi là entry cuối cùng của LFN. Vùng còn trống trong entry này sẽ được thêm vào 0xFF 0xFF. - Byte đầu tiên của các Entry (Sequence Number) có chiều dài 7 bit và bit thứ 7 để báo cho chương trình biết đây là entry cuối cùng của LFN (nằm đầu tiên). Bảng 3.10 Kích thước chi tiết entry của long file name Offset Length Description 0x00 1 Byte Sequence Number 0x01 10 Byte Name Characters (5 UTF) 0x0B 1 Byte Attrib (Always 0x0F) 0x0C 1 Byte Reserved (Always 0x00) 0x0D 1 Byte Checksum 0x0E 12 Byte Name Characters (6 UTF) 0x1A 2 Byte First Cluster (Always 0x00) 0x1C 4 Byte Name Character (2 UTF) Sequence Number: Đối với Short File Name thì đây là Byte chứa ký tự đầu tiên của tên File. Nhưng đối với LFN thì Byte này sẽ cho biết có bao nhiêu Entry chứa tên LFN tiếp theo. Giá trị offset của byte này là 0x40, vì vậy để xác định số lượng Entry chứa tên LFN ta lấy (Sequence Number - 0x40). Entry tiếp theo, Sequence Number sẽ có giá trị (Sequence Number - 0x40 - 1) và giá trị của byte này ở các Entry tiếp theo sẽ giảm đi 1 cho đến khi bằng 0x01 thì đây là Entry cuối cùng của LFN. Entry tiếp theo sẽ chứa tên Short File Name (8.3 ; 8 ký tự đầu tiên được viết hoa và đuôi mở rộng) của File/Folder đó và cho biết dung lượng và Cluster đầu tiên của File/Folder. Ví dụ: File có tên dài “File with very long filename.txt” thì sẽ được lưu trong các Entry như sau: Sequence No. Entry Data 0x43 “me.txt” 0x02 “y long filena” 0x01 “File with ver” ??? Normal 8.3 entry Attrib: Luôn luôn là 0x0F trong LFN. Name Character: Gồm 13 ký tự UTF (26 byte) được phân bố ở 3 vị trí offset trong entry LFN. First Cluster: Luôn luôn là 0x00, byte này chỉ có giá trị trong entry Short File Name. 3.8 Phân tích bảng FAT và cách truy xuất File/Folder 3.8.1 Định nghĩa bảng FAT Bảng FAT là bản đồ địa chỉ của Partition. Nhưng thay vì quản lý đơn vị Byte/Sector của Partition thì ở đây chúng quản lý số Cluster của Partition. Nhiệm vụ của bảng FAT cho hệ thống biết File/Folder nằm trên những Cluster nào của Partition. Mỗi một vị trí trên bảng FAT (12/16/32 bit) được gọi là đơn vị bảng FAT, mỗi đơn vị ở vị trí tương ứng (từ 0 trở đi) biểu diễn cho 1 Cluster trên Partition. Sự khác nhau cơ bản giữa FAT12/16/32 là đơn vị bảng FAT. Trong FAT12, để biểu diễn cho 1 Cluster người ta sử dụng 12 bit. Vì vậy việc đọc bảng FAT trở nên gặp khó khăn vì 12 bit không phải là số nguyên của 1 byte (8 bit) do phải hiệu chỉnh liên tục và FAT16 đã khắc phục vấn đề này, để biểu diễn cho 1 Cluster người ta sử dụng 2 byte. Tuy nhiên dung lượng của các thiết bị lưu trữ ngày càng lớn nên FAT16 không thể đáp ứng được yêu cầu. Như vậy, FAT32 đáp ứng các thiết bị có dung lượng lớn. Bảng 3.11 Cấu trúc bảng FAT 3.8.2 Cấu trúc bảng FAT Chúng ta hãy hình dung về Partition, đầu mỗi Partition là PBR (Volume ID) có chiều dài 1 sector kế đến là vùng Reserved tiếp theo là 2 bảng FAT và tiếp tục là vùng Cluster sử dụng mà trên cùng là Root Directory. Toàn bộ vùng PBR, FAT Table được hệ thống cấp 2 Cluster. Từ Cluster thứ 2 trở đi được sử dụng cho việc lưu File/Folder (Root Directory từ Cluster thứ 2 trở đi). Lưu ý: Chiều dài của bảng FAT được hệ thống xác định ngay lần đầu khi Format, chiều dài của bảng FAT đọc được từ PBR và có giá trị cố định tùy vào dung lượng mỗi device. FAT chỉ quản lý File. Mỗi đơn vị FAT32 có chiều dài 32 bit chứa địa chỉ của Cluster tiếp theo. Ví dụ: Root Directory được chứa tại Cluster 2, tại đơn vị FAT32 thứ 2 chứa giá trị 0x0009. Như vậy, Cluster tiếp theo chứa Root Directory là cluster 0x0009. Tương tự cho các đơn vị FAT 0x000A, 0x000B, 0x0011. Đơn vị chứa 0xFFFF sẽ báo cho hệ thống biết kết thúc File. CHƯƠNG 4 LCD TFT&TSC 4.1 Giới thiệu ILI9320 ILI9320 là bộ điều khiển chip SoC 262,144 màu cho LCD TFT với độ phân giải 240x320 RGB điểm ảnh, bao gồm một trình điều khiển nguồn 720 kênh, một trình điều khiển cổng 320 kênh, 172,800 bytes RAM cho dữ liệu đồ họa của 240x320 RGB điểm ảnh, và mạch cung cấp nguồn. ILI9320 có bốn loại giao diện hệ thống: giao diện hệ thống MPU, giao diện VSYNC, giao diện truyền dữ liệu nối tiếp (SPI), giao diện RGB. Trong chế độ giao diện RGB và VSYNC, việc sử dụng kết hợp chức năng ghi của RAM tốc độ cao và chức năng cửa sổ địa chỉ cho phép hiển thị một hình ảnh động ở một vị trí được chỉ định bởi người dùng và hình ảnh tĩnh tại các khu vực khác trên màn hình cùng lúc. ILI9320 có thể hoạt động ở điện áp 1.65V và một mạch điện áp kết hợp đi theo để tạo ra các mức điện áp lái với màn hình LCD. ILI9320 cũng hỗ trợ một chức năng để hiển thị 8 màu sắc và chế độ ngủ, cho phép kiểm soát nguồn chính xác bởi phần mềm và các tính năng này làm cho ILI9320 thành một bộ lái LCD lý tưởng cho sản phẩm kích thước vừa hay nhỏ như điện thoại di động, điện thoại thông minh, PDA… 4.2 Những đặc trưng của ILI9320 - Chip đơn giải pháp cho một màn hình tinh thể lỏng QVGA TFT LCD. - 240x320 điểm ảnh với độ phân giải 262.144 màu hiển thị thực. - Hỗ trợ MVA xem màn hình rộng. - Kết hợp 720 kênh lái nguồn và 320 kênh lái cổng. - 172.800 byte nội RAM đồ họa. - Chức năng ghi RAM tốc độ cao. - Hệ thống giao diện: Giao diện MPU hệ thống i80 (8/9/16/18 bit chiều rộng). Giao diện VSYNC (giao diện hệ thống + VSYNC, clock nội, DB [17:0]). Giao diện truyền dữ liệu nối tiếp (SPI). Giao diện RGB 6/16/18 bit (DOTCLK, VSYNC, HSYNC, ENABLE, DB [17:0]). - Điều khiển n-dòng tinh thể lỏng AC. - Dao động nội và reset bằng phần cứng. - Chức năng thay đổi kích thước (×1/2, ×1/4). - Điều khiển chuyển hướng ngược lại nguồn/cổng. - Chức năng cửa sổ địa chỉ để xác định một khu vực hình chữ nhật để truy cập GRAM nội. - Chức năng bit hoạt động để tạo điều kiện cho xử lý đồ họa dữ liệu. - Hàm BIT-đơn vị ghi dữ liệu mặt nạ. - Hàm ghi pixel-đơn vị logic/điều kiện. - Những chức năng mở rộng cho phép kiểm soát màu sắc hiển thị. - Hàm định hướng γ cho phép hiển thị trong 262.144 màu. - Chức năng line-đơn vị di chuyển thẳng đứng. - Chức năng điều khiển một phần, cho phép điều khiển một phần màn hình LCD tại các vị trí được chỉ định bởi người sử dụng. - Kết hợp mạch đếm lên cho đếm lên một cấp điện áp điều khiển tinh thể lỏng lên đến 6 lần (x6). - Chức năng tiết kiệm năng lượng. - Chế độ 8 màu sắc. - Chế độ chờ. Chế độ Sleep. 4.3 Sơ đồ khối Hình 4.1 Sơ đồ khối của LCD 4.4 Mô tả chân Hình 4.2 Sơ đồ chân LCD (chế độ 16 bit) - D0-D15: 16 đường truyền data. - 4 chân (X+, X-, Y+, Y- ): 4 đường điều khiển touch. - Vcc: nguồn. - Một số chân cài đặt chức năng: CS, RS, WR, RD, REST. 4.5 Mô tả khối 4.5.1 Giao tiếp hệ thống MPU ILI9320 hỗ trợ giao tiếp hệ thống tốc độ cao i80 với cổng song song 8/9/16/18 bit và giao tiếp ngoại vi nối tiếp (SPI). Chế độ giao tiếp được chọn bằng cách thiết lập các chân IM[3:0]. ILI9320 có một thanh ghi chỉ số 16 bit (IR), một thanh ghi ghi dữ liệu 18 bit (WDR), và một thanh ghi đọc dữ liệu 18 bit (RDR). IR là thanh ghi để lưu trữ thông tin chỉ số từ thanh ghi kiểm soát và GRAM nội. WDR là thanh ghi lưu trữ dữ liệu tạm thời để được ghi vào thanh ghi kiểm soát và GRAM nội. RDR là thanh ghi lưu trữ dữ liệu tạm thời được đọc từ GRAM. Dữ liệu từ MPU được ghi vào GRAM nội thì trước tiên được ghi vào thanh ghi WDR và sau đó tự động được ghi vào GRAM nội. Dữ liệu được đọc từ GRAM nội thông qua thanh ghi RDR. Do đó, dữ liệu được đọc ra bus dữ liệu là không hợp lệ khi ILI9320 đọc dữ liệu lần đầu tiên từ GRAM nội. Dữ liệu được đọc là hợp lệ sau khi ILI9320 thực hiện đọc lần thứ hai. 4.5.2 Giao tiếp RGB và VSYNC ILI9320 hỗ trợ giao tiếp RGB và giao tiếp VSYNC như là giao tiếp bên ngoài để hiển thị và di chuyển hình ảnh. Khi giao tiếp RGB được chọn, hoạt động hiển thị được đồng bộ với tín hiệu cung cấp bên ngoài VSYNC, HSYNC, và DOTCLK. Trong chế độ giao tiếp RGB, dữ liệu (DB17-0) được ghi đồng bộ với những tín hiệu theo sự phân cực của tín hiệu cho phép (ENABLE) để ngăn cản sự nhấp nháy trên màn hình hiển thị trong khi cập nhật dữ liệu hiển thị. Trong chế độ giao tiếp VSYNC, hoạt động hiển thị được đồng bộ với xung clock bên trong. Ngoại trừ đồng bộ khung thì hoạt động được đồng bộ với tín hiệu VSYNC. Dữ liệu hiển thị được ghi lên GRAM nội thông qua giao tiếp hệ thống. Trong trường hợp này, có những sự ràng buộc trong tốc độ và phương pháp trong việc ghi dữ liệu lên RAM nội. ILI9320 cho phép chuyển giữa giao tiếp hiển thị bên ngoài và giao tiếp hệ thống lệnh để giao tiếp tối ưu được chọn để hiển thị hình ảnh lên màn hình (ảnh tĩnh hoặc ảnh động). Giao tiếp RGB với việc ghi tất cả dữ liệu hiển thị lên RAM nội, chỉ cho phép chuyển dữ liệu khi cập nhật khung ảnh động, góp phần cho yêu cầu nguồn thấp trong hiển thị ảnh động. 4.5.3 Bộ đếm địa chỉ (AC) Bộ đếm địa chỉ (AC) gửi 1 địa chỉ đến GRAM nội. Khi chỉ số của thanh ghi thiết lập địa chỉ RAM trong AC được gửi đến IR thì thông tin địa chỉ sẽ được gửi từ IR đến AC. Khi ghi dữ liệu vào GRAM nội thì địa chỉ trong AC tự động cập nhật tăng 1 hoặc giảm 1. Chức năng cửa sổ địa chỉ cho phép ghi dữ liệu tùy ý chỉ trong khu vực hình chữ nhật trên GRAM được thiết lập bởi người dùng. 4.5.4 RAM đồ họa (GRAM) GRAM là RAM đồ họa lưu trữ các bit dữ liệu mô hình của 172.820 (240x320x18/8) byte với 18 bits/pixel. 4.5.5 Grayscale Voltage Generating Circuit Mạch phát điện áp màu xám tạo ra một mức áp lái tinh thể lỏng theo dữ liệu màu xám được thiết lập trong thanh ghi γ- correction để hiển thị trong 262.144 màu. 4.5.6 Timing Controller Timing generator tạo ra một tín hiệu thời gian cho hoạt động của các mạch bên trong như GRAM nội. Thời gian cho các hoạt động hiển thị như hoạt động đọc RAM và thời gian cho các hoạt động bên trong như truy cập từ MPU được tạo ra theo cách không gây nhiễu lẫn nhau. 4.5.7 Bộ tạo dao động (OSC) ILI9320 cài đặt điện trở bên trong/bên ngoài để tạo ra tần số dao động và điện trở bên trong sẽ được sử dụng trong thiết lập mặc định. Người dùng có thể điều chỉnh tỷ lệ khung hình do thanh ghi R2bh và R90h khi điện trở bên trong được sử dụng hoặc điều chỉnh tỷ lệ khung hình bằng điện trở bên ngoài được đặt giữa các chân OSC1 và OSC2. 4.5.8 Mạch điều khiển LCD Các mạch điều khiển LCD của ILI9320 bao gồm một điều khiển nguồn 720 ngõ ra (S1 đến S720) và điều khiển cổng 320 ngõ ra (G1 đến G320). Dữ liệu mẫu hiển thị bị khóa khi bit dữ liệu đầu vào là bit thứ 720. Dữ liệu then chốt kiểm soát việc điều khiển nguồn và tạo ra một dạng sóng điều khiển. Bộ điều khiển cổng cho phép quét các dòng đầu ra cổng hoặc mức VGH hoặc mức VGL. Hướng chuyển đổi 720 ngõ ra nguồn từ bộ điều khiển nguồn được thiết lập với bit SS và hướng chuyển đổi của đầu ra cổng từ bộ điều khiển cổng được thiết lập với bit GS. Chế độ quét bằng bộ điều khiển cổng được thiết lập bởi bit SM. Các bit này cho phép thiết lập một phương pháp quét thích hợp cho một module LCD. 4.5.9 Mạch cấp nguồn điều khiển LCD Mạch cấp nguồn điều khiển LCD tạo ra những mức điện áp VREG1 OUT, VGH, VGL và VCOM để điều khiển LCD. 4.6 Giao tiếp hệ thống 4.6.1 Đặc tính của giao tiếp ILI9320 có giao diện hệ thống để đọc/ghi vào các thanh ghi kiểm soát, bộ nhớ hiển thị đồ họa (GRAM) và giao diện ngõ vào RGB để hiển thị ảnh động. Người dùng có thể chọn một giao diện tối ưu để hiển thị hình ảnh động hay tĩnh sao cho truyền dữ liệu hiệu quả. Mọi dữ liệu hiển thị được lưu trữ trong GRAM để giảm bớt việc cố gắng chuyển dữ liệu và chỉ cập nhật dữ liệu khi cần thiết chuyển. Người dùng chỉ có thể cập nhật một khoảng dưới của GRAM bằng cách sử dụng chức năng cửa sổ địa chỉ. ILI9320 cũng có giao diện RGB và giao diện VSYNC để chuyển dữ liệu mà không nhấp nháy ảnh động hiển thị trên màn hình. Trong chế độ giao diện RGB, dữ liệu hiển thị được ghi vào GRAM thông qua các tín hiệu điều khiển của ENABLE, VSYNC, HSYNC, DOTCLK và bus dữ liệu DB[17:0]. Trong chế độ giao diện VSYNC, thời gian hiển thị bên trong được đồng bộ với tín hiệu đồng bộ khung (VSYNC). Chế độ giao diện VSYNC cho phép hiển thị hình ảnh chuyển động thông qua giao diện hệ thống. Trong trường hợp này, có một số hạn chế của tốc độ và phương pháp để ghi dữ liệu vào RAM nội. ILI9320 hoạt động ở một trong bốn chế độ như bảng sau đây. Các chế độ hiển thị có thể được chuyển đổi do thanh ghi điều khiển. Khi chuyển đổi từ một chế độ khác thì các trình tự được đề cập trong các phần của giao diện RGB và VSYNC. Hình 4.3 Kết nối giao diện hệ thống với giao diện RGB 4.6.2 Input Interfaces Sau đây là giao diện hệ thống của ILI9320. Giao diện này được lựa chọn bằng cách thiết lập các chân IM[3:0]. Giao diện hệ thống được sử dụng để cài đặt thanh ghi và truy cập GRAM. Có bốn loại giao diện hệ thống: Giao diện hệ thống i80/18bit được chọn bằng cách thiết lập các chân IM[3:0] là "1010". Giao diện hệ thống i80/16bit được chọn bằng cách thiết lập các chân IM[3:0] là "0010". Giao diện hệ thống i80/9bit được chọn bằng cách thiết lập các chân IM[3:0] là “1011” và các chân từ DB17 đến DB9 được sử dụng để chuyển dữ liệu. Giao diện hệ thống i80/8bit được chọn bằng cách thiết lập các chân IM[3:0] là "0011" và các chân từ DB17 đến DB10 được sử dụng để chuyển dữ liệu. Giao tiếp hệ thống i80/16bit Giao diện hệ thống i80/16bit được chọn bằng cách thiết lập IM[3:0] là mức "0010". Màu sắc 262K hay 65K có thể được hiển thị qua giao diện MPU 16 bit. Khi màu 262K được hiển thị, hai cách chuyển (chuyển thứ 1: 2 bit, chuyển thứ 2: 16 bit hoặc chuyển thứ 1: 16 bit, chuyển thứ 2: 2 bit) là cần thiết cho giao diện MPU 16 bit. Hình 4.3 Định dạng dữ liệu giao diện hệ thống 16 bit 4.6.3 Giao tiếp ngoại vi nối tiếp SPI Giao tiếp ngoại vi nối tiếp (SPI) được chọn bằng cách thiết lập những chân IM[3:0] là "010x". Chân chọn chip (nCS), chân xung đồng bộ truyền nối tiếp (SCL), chân dữ liệu nối tiếp ngõ vào (SDI) và chân dữ liệu nối tiếp ngõ ra (SDO) được sử dụng trong chế độ SPI. Chân ID thiết lập bit có trọng số thấp nhất của mã nhận dạng (ID code). Các chân DB [17:0], mà không được sử dụng, phải được gắn với một trong hai I/O là Vcc hoặc DGND. Các hoạt động giao tiếp SPI cho phép từ cạnh xuống của tín hiệu chân nCS và kết thúc của truyền dữ liệu trên cạnh lên của tín hiệu chân nCS. Byte bắt đầu được truyền để bắt đầu giao diện SPI và hoạt động đọc/ghi và thông tin RS cũng được bao gồm trong byte bắt đầu. Khi byte bắt đầu là phù hợp, dữ liệu sau đó mới được nhận bởi ILI9320. Bit thứ bảy của byte bắt đầu là RS bit. Khi RS = "0", hoặc là hoạt động ghi chỉ số hoặc hoạt động đọc trạng thái được thực hiện. Khi RS = "1", hoặc là hoạt động ghi thanh ghi hoặc hoạt động đọc/ghi RAM được thực hiện. Bit thứ tám của byte bắt đầu được sử dụng để chọn hoạt động đọc hay ghi (R/W bit). Dữ liệu được ghi khi R/W bit là "0" và đọc khi R/W bit là "1". Sau khi nhận được byte bắt đầu, ILI9320 bắt đầu truyền hoặc nhận dữ liệu trong đơn vị của byte và truyền dữ liệu bắt đầu từ bit MSB. Tất cả các thanh ghi của ILI9320 được định dạng 16 bit và nhận được đầu tiên và byte dữ liệu thứ hai như tám bit trên và tám bit của thanh ghi 16 bit tương ứng. Trong chế độ SPI, 5 byte đuợc giả sử đọc là cần thiết và dữ liệu hợp lệ bắt đầu từ byte thứ 6 của dữ liệu đọc về. Hình 4.4 Định dạng dữ liệu của giao tiếp SPI 4.6.4 Giao tiếp VSYNC ILI9320 hỗ trợ giao tiếp VSYNC trong việc đồng bộ với tín hiệu đồng bộ khung VSYNC để hiển thị hình ảnh động với giao diện hệ thống i80. Khi giao diện VSYNC được chọn để hiển thị một hình ảnh động, tốc độ cập nhật GRAM tối thiểu là hạn chế và giao tiếp VSYNC được kích hoạt bằng cách thiết lập DM[1:0] = "10" và RM = "0". Hình 4.5 Truyền dữ liệu qua giao tiếp VSYNC Trong chế độ VSYNC, hoạt động hiển thị được đồng bộ với xung clock bên trong và ngõ vào VSYNC và tỷ lệ khung được xác định bởi tốc độ xung của tín hiệu VSYNC. Mọi dữ liệu hiển thị được lưu trữ trong GRAM để giảm thiểu tổng số dữ liệu chuyển được yêu cầu cho hiển thị hình ảnh động. Hình 4.6 Truyền dữ liệu ảnh động qua giao tiếp VSYNC Hình 4.7 Sự hoạt động qua giao tiếp VSYNC 4.6.5 Giao tiếp RGB Chế độ giao tiếp RGB thì có sẵn cho ILI9320 và giao tiếp được chọn bằng cách thiết lập các bit RIM [1:0] như bảng sau: Hình 4.8 Định dạng dữ liệu của giao tiếp RGB 16 bit 4.6.5.1 Hoạt động của giao tiếp RGB Hoạt động hiển thị thông qua giao tiếp RGB được đồng bộ với các tín hiệu VSYNC, HSYNC, và DOTCLK. Giao diện RGB chuyển dữ liệu cập nhật đến GRAM với chức năng ghi tốc độ cao và vùng cập nhật được xác định bởi chức năng cửa sổ địa chỉ. Cổng sau và cổng trước được sử dụng để thiết lập thời gian giao diện RGB. Hình 4.9 Vùng truy cập GRAM bằng giao tiếp RGB 4.6.5.2 Chế độ ảnh động trong giao tiếp RGB ILI9320 có giao tiếp RGB để hiển thị hình ảnh động và kết hợp GRAM để lưu trữ dữ liệu hiển thị, để có chất lượng trong việc hiển thị một hình ảnh động. • Chức năng cửa sổ địa chỉ xác định vùng cập nhật của GRAM. • Chỉ vùng hình ảnh động của GRAM mới được cập nhật. • Khi hiển thị hình ảnh động trong chế độ giao tiếp RGB, DB[17:0] có thể được chuyển sang giao tiếp hệ thống để cập nhật khu vực hình ảnh tĩnh và các thanh ghi, như là các biểu tượng. 4.6.5.3 Truy cập RAM thông qua một giao tiếp hệ thống trong chế độ RGB-I/F ILI9320 cho phép truy cập GRAM thông qua giao tiếp hệ thống trong chế độ giao tiếp RGB. Trong chế độ giao tiếp RGB, dữ liệu được ghi vào GRAM nội trong sự đồng bộ với các tín hiệu DOTCLK và ENABLE. Khi ghi dữ liệu vào GRAM nội bằng giao diện hệ thống, thiết lập ENABLE để kết thúc giao tiếp RGB và chuyển sang giao tiếp hệ thống để cập nhật các thanh ghi (RM = "0") và hình ảnh tĩnh của GRAM. Khi khởi động lại truy cập RAM trong chế độ giao tiếp RGB, chờ một chu kỳ đọc/ghi và sau đó set RM="1" và thanh ghi chỉ số là R22h để bắt đầu truy cập RAM thông qua giao tiếp RGB. Nếu truy cập RAM thông qua hai giao diện xung đột, thì không bảo đảm rằng dữ liệu được ghi vào GRAM nội. 4.6.5.4 Giao tiếp RGB 16 bit Giao diện RGB 16 bit được chọn bằng cách thiết lập bit RIM [1:0] là "01". Hoạt động hiển thị được đồng bộ với các tín hiệu VSYNC, HSYNC, và DOTCLK. Dữ liệu hiển thị được chuyển cho RAM nội trong sự đồng bộ với hoạt động hiển thị thông qua bus dữ liệu RGB 16 bit (DB17-13, DB11-1) theo tín hiệu cho phép dữ liệu (ENABLE). Các thanh ghi chỉ được thiết lập thông qua giao diện hệ thống. Hình 4.10 Định dạng dữ liệu giao tiếp RGB 16 bit 4.7 Mô tả thanh ghi 4.7.1 Truy cập các thanh ghi ILI9320 thông qua cấu trúc giao diện bus 18 bit cho vi xử lý hiệu năng cao. Tất cả các khối chức năng của ILI9320 bắt đầu làm việc sau khi nhận được chỉ dẫn chính xác từ các bộ vi xử lý bên ngoài bởi giao diện 18, 16, 9, 8 bit. Thanh ghi chỉ số (IR) chứa địa chỉ thanh ghi đến nơi mà hướng dẫn và dữ liệu hiển thị sẽ được ghi. Thanh ghi lựa chọn tín hiệu (RS), các tín hiệu đọc/ghi (nRD/nWR) và bus dữ liệu D17-0 được sử dụng để đọc/ghi các hướng dẫn và dữ liệu của ILI9320. Thanh ghi của ILI9320 được phân loại thành các nhóm sau đây: 1. Chỉ định các chỉ số của thanh ghi (IR). 2. Đọc một trạng thái. 3. Điều khiển hiển thị. 4. Điều khiển quản lý nguồn. 5. Đồ họa xử lý dữ liệu. 6. Thiết lập nội bộ địa chỉ GRAM (AC). 7. Truyền dữ liệu đến/từ GRAM nội (R22). 8. Internal grayscale γ-correction (R30-R39). Thông thường, dữ liệu hiển thị (GRAM) thường được cập nhật, và theo thứ tự từ ILI9320 có thể cập nhật địa chỉ GRAM nội tự động như nó ghi dữ liệu vào GRAM nội và hạn chế tối đa truyền dữ liệu bằng cách sử dụng chức năng cửa sổ địa chỉ, có ít tải trên chương trình trong bộ vi xử lý này. Theo các hình sau đây cho thấy, cách gán các bit dữ liệu để 16 bit thanh ghi (D [15:0]) khác nhau cho mỗi giao diện. Gửi thanh ghi theo các định dạng dữ liệu truyền dẫn sau. Hình 4.11 Thiết lập thanh ghi với giao tiếp SPI Hình 4.12 Thiết lập thanh ghi với giao tiếp hệ thống i80 16 bit dữ liệu 4.7.2 Mô tả hướng dẫn Bảng 4.1 Bảng Init LCD Register Address Value Start Oscillation 00h 0001h Driver Output Control 01h 0100h LCD Driving Wave Control 02h 0700h Entry Mode 03h 1038h Resizing Control Register 04h 0000h Display Control 1 07h 0173h Display Control 2 08h 0202h Display Control 3 09h 0000h Display Control 4 0Ah 0000h RGB Display Interface Control 1 0Ch 0000h Frame Marker Position 0Dh 0000h RGB Display Interface Control 2 0Fh 0000h Power Control 1 10h 17B0h Power Control 2 11h 0137h Power Control 3 12h 013Bh Power Control 4 13h 1900h GRAM Horizontal Address Set 20h 0000h GRAM Vertical Address Set 21h 0000h Power Control 7 29h 0007h Frame Rate and Color Control 2Bh 0020h Gamma Control 30h 0007h 31h 0504h 32h 0703h 35h 0002h 36h 0707h 37h 0406h 38h 0006h 39h 0404h 3Ch 0700h 3Dh 0A08h Horizontal and Vertical RAM Address Position 50h 0000h 51h 00EFh 52h 0000h 53h 013Fh Gate Scan Control 60h 2700h 61h 0001h 6Ah 0000h Panel Interface Control 1 90h 0010h Panel Interface Control 2 92h 0000h Panel Interface Control 3 93h 0003h Panel Interface Control 4 95h 0110h Panel Interface Control 5 97h 0000h Panel Interface Control 6 98h 0000h 4.7.2.1 Index (IR) IR định rõ địa chỉ của các thanh ghi (R00h-RFFh) hoặc RAM mà sẽ được truy cập. 4.7.2.2 Status Read (RS) Các bit SR đại diện cho trạng thái bên trong của ILI9320. L[7:0] cho biết vị trí của các đường điều khiển mà điều khiển bảng TFT hiện tại. 4.7.2.3 Start Oscillation (R00h) Đặt bit OSC là '1' để bắt đầu bộ dao động nội và là '0' để dừng bộ dao động. Phải chờ ít nhất là 10ms để cho tần số của bộ dao động ổn định và sau đó làm việc cài đặt chức năng khác. Mã thiết bị "9320"h được đọc khi đọc thanh ghi này. 4.7.2.4 Driver Output Control (R01h) SS: Chọn hướng chuyển đổi kết quả đầu ra từ các trình điều khiển nguồn. Khi SS = 0, theo hướng chuyển đổi kết quả đầu ra từ S1 đến S720. Khi SS = 1, theo hướng chuyển đổi kết quả đầu ra từ S720 đến S1. 4.7.2.5 LCD Driving Wave Control (R02h) B/C = 0: Khung/vùng đảo ngược B/C = 1: Đường dây đảo ngược. EOR: EOR = 1 và B/C = 1 để đặt đường đảo ngược. 4.7.2.6 Entry Mode (R03h) AM: Kiểm soát hướng GRAM cập nhật. Khi AM="0", địa chỉ được cập nhật trong writing hướng ngang. Khi AM="1", địa chỉ được cập nhật trong writing hướng thẳng đứng. Khi một khu vực cửa sổ được thiết lập bởi thanh ghi R50h, R51h, R52h và R53h, chỉ có khu vực địa chỉ GRAM được cập nhật dựa trên các I/D [1:0] và AM bit cài đặt. I/D [1:0] Kiểm soát bộ đếm địa chỉ (AC) để tự động tăng hoặc giảm 1 khi cập nhật dữ liệu hiển thị một pixel. Hình 4.13 Điều chỉnh hướng truy cập GRAM ORG: Di chuyển địa chỉ nguồn gốc theo các điều chỉnh I/D [1:0] khi một khu vực cửa sổ địa chỉ được thực hiện. ORG = "0": Các địa chỉ nguồn gốc không phải di chuyển. Trong trường hợp này, chỉ rõ địa chỉ để bắt đầu hoạt động ghi theo bản đồ địa chỉ GRAM trong khu vực cửa sổ địa chỉ. ORG = "1": Các địa chỉ gốc "00000h" di chuyển theo các thiết lập I/D [1:0]. Chỉ có các địa chỉ nguồn gốc địa chỉ "00000h" có thể được đặt trong RAM địa chỉ đặt tại thanh ghi R20h và R21h. HWM: GRAM chức năng ghi tốc độ cao. HWM = "0": chức năng ghi tốc độ cao bị vô hiệu hoá .. HWM = "1": chức năng ghi tốc độ cao được kích hoạt .. BGR: Hoán đổi trật tự R và B của dữ liệu ghi. BGR = "0": Làm theo thứ tự RGB để ghi các dữ liệu điểm ảnh. BGR = "1": Hoán đổi dữ liệu RGB cho BGR bằng cách ghi vào GRAM. TRI: Khi TRI = "1", các dữ liệu được chuyển giao cho RAM nội trong 8 bit x 3 chế độ chuyển thông qua giao diện 8 bit. Cũng có thể để gửi dữ liệu thông qua giao diện 16-bit hoặc SPI ở chế độ chuyển mà nhận ra hiển thị trong 262K màu sắc kết hợp với bit DFM. Khi không sử dụng các phương thức giao diện, hãy chắc chắn đặt TRI = "0". DFM: Đặt chế độ truyền các dữ liệu vào bộ nhớ RAM khi TRI = "1". 4.7.2.7 Thanh ghi điều khiển thay đổi kích thước (R04h) RSZ[1:0]: Thiết lập yếu tố thay đổi kích thước. Khi các bit RSZ được đặt cho thay đổi kích thước, ILI9320 ghi dữ liệu theo yếu tố thay đổi kích thước để mà hình ảnh ban đầu được hiển thị ở kích thước ngang và dọc, được rút ngắn theo các yếu tố tương ứng. RCH[1:0]: Thiết lập một lượng điểm ảnh trên phần còn lại theo hướng ngang khi thay đổi kích thước một hình ảnh. Bằng cách xác định số lượng điểm ảnh trên phần còn lại do bit RCH, dữ liệu có thể được chuyển mà không cần lấy các điểm ảnh nhắc nhở vào xem xét. RCV[1:0]: Thiết lập một lượng điểm ảnh trong phần còn lại hướng thẳng đứng khi thay đổi kích thước một hình ảnh. Bằng cách xác định số lượng điểm ảnh trên phần còn lại do bit RCV, dữ liệu có thể được chuyển mà không cần lấy các điểm ảnh nhắc nhở vào xem xét. 4.7.2.8 Các thanh ghi điều khiển hiển thị Điều khiển hiển thị 1 (R07h) D [1:0] = "11" để bật bảng hiển thị. D [1:0] = "00" để tắt bảng hiển thị. D1 = "1" Một màn hình đồ họa được bật lên bảng. D1 = "0" Một màn hình đồ họa được tắt. CL : Khi CL = "1", với 8 chế độ hiển thị màu sắc được chọn. GON và DTE : Đặt mức đầu vào của trình điều khiển cổng G1-G320 như sau BASEE: Base image display enable bit. Khi BASEE = "0", không có căn cứ hình ảnh được hiển thị. ILI9320 điều khiển tinh thể lỏng ở cấp độ ánh sáng không hiển thị hoặc chỉ hiển thị hình ảnh một phần. Khi BASEE = "1", hình ảnh cơ bản được hiển thị. Cài đặt D [01:00] có ưu tiên cao hơn so với cài đặt BASEE. PTDE[1:0]: Partial image 2 and Partial image 1 enable bits. PTDE1/0 = 0: tắt một phần hình ảnh. Chỉ căn cứ hình ảnh được hiển thị. PTDE1/0 = 1: bật một phần hình ảnh. Đặt BASEE = 0. Điều khiển hiển thị 2 (R08h) FP[3:0]/BP[3:0]. Các bit FP[3:0] và BP[3:0] chỉ định số dòng mặt trước và sau thời kỳ porch tương ứng. Khi các giá trị thiết lập FP[3:0] và BP[3:0], các điều kiện sau đây được đáp ứng: BP + FP ≤ 16 dòng FP ≥ 2 dây chuyền BP ≥ 2 dây chuyền. Đặt BP[3:0] và FP[3:0] bit như dưới đây cho từng phương thức hoạt động. FP[3:0] Number of lines for Front Porch BP[3:0] Number of lines for Back Porch 0000 Setting Prohibited 0001 Setting Prohibited 0010 2 lines 0011 3 lines 0100 4 lines 0101 5 lines 0110 6 lines 0111 7 lines 1000 8 lines 1001 9 lines 1010 10 lines 1011 11 lines 1100 12 lines 1101 13 lines 1110 14 lines 1111 Setting Prohibited Điều khiển hiển thị 3 (R09h) ISC[3:0] : Chỉ định khoảng chu kỳ quét của bộ điều khiển cổng tại khu vực không hiển thị khi PTG[1:0] = "10" để chọn khoảng thời gian quét. Sau đó chu kỳ quét được thiết lập như là số lẻ từ 0 đến 31 khung thời gian. Phân cực là đảo ngược mỗi chu kỳ quét. PTG[1:0]: Đặt chế độ quét trong khu vực không hiển thị. PTS[2:0]: Thiết lập mức độ đầu ra nguồn trong khoảng thời gian điều khiển khu vực không hiển thị (trước/sau thời kỳ porch và diện tích trống giữa hiển thị một phần). Điều khiển hiển thị 4 (R0Ah) FMI[2:0]: Đặt khoảng thời lượng đầu ra của tín hiệu FMARK theo chu kỳ dữ liệu hiển thị ghi lại và tốc độ truyền dữ liệu. FMARKOE: Khi FMARKOE = 1, ILI9320 bắt đầu ra tín hiệu FMARK trong khoảng đầu ra được set do FMI[2:0] bit. 4.7.2.9 Điều khiển giao diện hiển thị RGB Điều khiển giao diện hiển thị RGB 1 (R0Ch) RIM[1:0]: Chọn chiều rộng giao tiếp dữ liệu RGB. DM[1:0]: Chọn chế độ hoạt động hiển thị. DM1 DM0 Display Interface 0 0 Internal system clock 0 1 RGB interface 1 0 VSYNC interface 1 1 Setting disabled Các thiết lập DM[1:0] cho phép chuyển đổi giữa các chế độ clock hoạt động nội bộ và chế độ hoạt động giao tiếp hiển thị bên ngoài. Tuy nhiên, chuyển đổi giữa các chế độ hoạt động giao tiếp RGB và chế độ hoạt động giao tiếp VSYNC đều bị cấm. RM: Chọn giao tiếp để truy cập GRAM. Set RM sang "1" khi ghi dữ liệu hiển thị bằng giao tiếp RGB. ENC[2:0]: Đặt chu kỳ ghi GRAM thông qua giao tiếp RGB. Điều khiển giao diện hiển thị RGB 2 (R0Fh) DPL: Thiết lập tín hiệu phân cực của chân DOTCLK. DPL = "0": Dữ liệu là đầu vào trên cạnh lên của DOTCLK. DPL="1": Dữ liệu là đầu vào trên cạnh xuống của DOTCLK. EPL: Thiết lập tín hiệu phân cực của chân ENABLE. EPL="0" Các dữ liệu DB17-0 được ghi khi ENABLE="0". Vô hiệu hoá hoạt động ghi dữ liệu khi ENABLE="1". EPL="1" Các dữ liệu DB17-0 được ghi khi ENABLE="1". Vô hiệu hoá hoạt động ghi dữ liệu khi ENABLE="0". HSPL: Thiết lập tín hiệu phân cực của chân HSYNC. HSPL="0": kích hoạt LOW. HSPL="1": kích hoạt HIGH. VSPL: Thiết lập tín hiệu phân cực của chân VSYNC. VSPL="0": kích hoạt LOW. VSPL="1": kích hoạt HIGH. 4.7.2.10 Điều khiển nguồn Điều khiển nguồn 1 (R10h) SLP: Khi SLP = 1, ILI9320 vào chế độ ngủ và hoạt động hiển thị dừng ngoại trừ oscillator RC để giảm tiêu thụ điện năng. Trong chế độ ngủ, dữ liệu GRAM và hướng dẫn không thể được cập nhật, ngoại trừ hai hướng dẫn sau đây. a. Thoát khỏi chế độ ngủ (SLP = "0") b. Bắt đầu dao động DSTB: Khi DSTB = 1, ILI9320 vào chế độ chờ sâu. Trong chế độ chờ sâu, cung cấp điện logic nội bộ bị tắt để giảm tiêu thụ điện năng. Các dữ liệu GRAM và thiết lập chỉ dẫn không được duy trì khi các ILI9320 vào chế độ chờ sâu, và nó phải được đặt lại sau khi thoát chế độ chờ sâu. AP[2:0]: Điều chỉnh hằng số hiện tại trong hoạt động mạch khuếch đại trong các mạch LCD cung cấp điện. Các hằng số lớn hơn hiện nay nâng cao khả năng điều khiển của LCD, nhưng nó cũng làm tăng mức tiêu thụ hiện tại. Điều chỉnh hằng số hiện tại lấy trade-off vào tài khoản giữa chất lượng hiển thị và tiêu thụ hiện tại. Trong thời kỳ không hiển thị, thiết lập AP[2:0] = "000" để ngăn chặn các hoạt động mạch khuếch đại và bước lên mạch để giảm tiêu thụ hiện tại. SAP: Kiểm soát đầu ra Driver nguồn SAP = 0, đầu ra điều khiển nguồn bị vô hiệu hoá. SAP = 1, đầu ra điều khiển nguồn được kích hoạt. Khi bắt đầu charge-pump của LCD trong giai đoạn Power ON, hãy chắc chắn rằng SAP = 0, và cài SAP = 1, sau khi bắt đầu lên các mạch LCD cung cấp năng lượng. APE: Bit cho phép cung cấp nguồn. Set APE = "1" để bắt đầu một thế hệ cung cấp điện theo trình tự cung cấp năng lượng khởi động. BT [3:0]: Đặt yếu tố được sử dụng ở mạch step-up. Chọn yếu tố step-up tối ưu cho điện áp hoạt động. Để giảm mức tiêu thụ năng lượng, thiết lập một yếu tố nhỏ hơn. Điều khiển nguồn 2 (R11h) VC[2:0]: Set yếu tố tỷ lệ VciLVL để tạo ra điện áp tham chiếu VciOUT và Vci1. . DC0[2:0]: chọn tần số hoạt động của các mạch step-up 1. Tần số step-up cao hoạt động nâng cao khả năng điều khiển của mạch step-up và chất lượng hiển thị nhưng làm tăng mức tiêu thụ hiện tại. Điều chỉnh tần số lấy trade-off giữa chất lượng hiển thị và tiêu thụ hiện nay vào tài khoản. DC1[2:0]: chọn tần số hoạt động của các mạch step-up 2. Tần số step-up cao hoạt động nâng cao khả năng điều khiển của mạch step-up và chất lượng hiển thị nhưng làm tăng mức tiêu thụ hiện tại. Điều chỉnh tần số lấy trade-off giữa chất lượng hiển thị và tiêu thụ hiện nay vào tài khoản. Điều khiển nguồn 3 (R12h) VRH[3:0]: Đặt tỷ lệ khuyếch đại (1,6-1,9) của VciLVL áp dụng cho đầu ra mức. PON: Điều khiển ON/OFF của đầu ra mạch 3 (VGL). VCMR: chọn một trong hai điện trở bên ngoài (VcomR) hoặc âm lượng điện nội bộ (VCM) để thiết lập tiềm năng điện của VcomH (VCOM cấp trung tâm điện áp). VCMR = 0 → Sử dụng điện trở biến đổi bên ngoài để điều chỉnh mức điện áp VcomH. VCMR =1 → Sử dụng âm lượng nội điện tử (VCM[4:0]) để điều chỉnh mức điện áp VcomH. Điều khiển nguồn 4 (R13h) VDV[4:0]: Chọn các yếu tố của VREG1OUT để thiết lập biên độ của VCOM xen điện áp từ 0,7 đến VREG1OUTx1,24. Set VDV[4:0] để cho VCOM biên độ ít hơn 6V. Điều khiển nguồn 7 (R29h) VCM[4:0]: Đặt điện áp VcomH nội. VCMR = 1, điện áp VcomH được tạo ra dựa trên VCM[4:0] thiết lập giá trị. VCMR = 0, điện áp VcomH được tạo ra dựa trên VCOMR áp tham khảo bên ngoài. 4.7.2.11 GRAM Horizontal/Vertical Address Set (R20h, R21h) AD[16:0] : Đặt giá trị ban đầu là address counter (AC). Các address counter (AC) được tự động cập nhật theo quy định để các thiết lập của AM, I/D bit như là dữ liệu được ghi vào GRAM nội bộ. AC không được cập nhật tự động khi đọc dữ liệu từ GRAM nội bộ. 4.7.2.12 Write Data to GRAM (R22h) Thanh ghi này là port truy cập GRAM. Khi cập nhật dữ liệu hiển thị thông qua thanh ghi này, AC là tăng/giảm tự động. 4.7.2.13 Read Data from GRAM (R22h) RD[17:0]: Đọc 18 bit dữ liệu từ GRAM thông qua đọc dữ liệu thanh ghi (RDR). 4.7.2.14 Frame Rate and Color Control (R2Bh) EXT_R: Chọn điện trở bên ngoài hoặc bên trong cho mạch dao động. FR_SEL[1:0]: Đặt tỷ lệ khung hình khi điện trở bên trong được sử dụng cho mạch dao động. 4.7.2.15 Gamma Control (R30h-R3Dh) 4.7.2.16 Horizontal and Vertical RAM Address Position (R50h, R51h, R52h, R53h) HSA[7:0]/HEA[7:0]: HSA[7:0] và HEA[7:0] đại diện cho các địa chỉ tương ứng mở đầu và kết thúc của khu vực cửa sổ địa chỉ theo hướng ngang. Bằng cách đặt bit HSA và HEA, có thể hạn chế các khu vực trên GRAM theo chiều ngang cho dữ liệu ghi vào. Bit HSA và HEA phải được đặt trước khi bắt đầu hoạt động ghi RAM. Trong thiết lập các bit, chắc chắn "00"h ≤ HSA[7:0] < HEA[7:0] ≤ "EF" h và "04" h ≤ HEA-HAS. VSA[8:0]/VEA[8:0]: VSA[8:0] và VEA[8:0] đại diện cho các địa chỉ tương ứng mở đầu và kết thúc của khu vực địa chỉ cửa sổ theo hướng thẳng đứng. Bằng cách đặt bit VSA và VEA, có thể hạn chế các khu vực trên GRAM theo chiều dọc để ghi dữ liệu. Các bit VSA và VEA phải được đặt trước khi bắt đầu hoạt động ghi RAM. Trong cài đặt, hãy chắc chắn "000" h ≤ VSA[8:0] < VEA[8:0] ≤ "13F" h. Hình 4.14 Cấu hình dãy truy cập GRAM 4.7.2.17 Gate Scan Control (R60h, R61h, R6Ah) SCN[5:0]: ILI9320 cho phép để xác định đường cổng mà từ đó các trình điều khiển cổng bắt đầu quét bằng cách thiết lập bit SCN[5:0]. NL[5:0]: Bộ số dòng vào ổ đĩa LCD tại một khoảng thời gian của 8 dòng. Việc lập bản đồ địa chỉ GRAM không bị ảnh hưởng bởi số lượng các dòng do NL[5:0]. Số lượng dòng phải có cùng hoặc nhiều hơn số dòng cần thiết cho kích thước của bảng tinh thể lỏng. NDL: Đặt mức đầu ra trình điều khiển nguồn trong các khu vực không hiển thị. GS: Đặt hướng quét bởi trình điều khiển cổng trong phạm vi xác định bởi SCN[4:0] và NL[4:0]. Việc hướng quét xác định bởi GS = 0 có thể đảo ngược bằng cách đặt GS = 1. Khi GS = 0, hướng quét là từ G1 đến G320. Khi GS = 1, hướng quét là từ G320 đến G1. REV: Cho phép các đảo ngược grayscale của hình ảnh bằng cách thiết lập REV = 1. VLE: Vertical scroll display enable bit. Khi VLE = 1, ILI9320 bắt đầu hiển thị hình ảnh cơ sở từ dòng (trong màn hình vật lý) xác định bởi VL[8:0] bit. VL[8:0] đặt một lượng cuộn , đó là số dòng để thay đổi dòng đầu hiển thị từ dòng đầu tiên của màn hình vật lý. Lưu ý rằng một phần hình ảnh hiển thị vị trí không bị ảnh hưởng bởi sự cuộn hình ảnh cơ bản. Việc cuộn dọc không có sẵn trong hoạt động ngoại giao diện hiển thị. Trong trường hợp này, hãy chắc chắn để thiết lập VLE = "0". VL[8:0]: Đặt một lượng cuộn ngang của hình ảnh cơ bản. Các hình cơ bản là cuộn theo hướng dọc và hiển thị từ dòng xác định bởi VL[8:0]. Hãy chắc chắn rằng VL[8:0] ≤ 320. 4.7.2.18 Hình ảnh riêng phần Partial Image 1 Display Position (R80h) PTDP0[8:0]: Đặt vị trí hiển thị các hình ảnh phần 1. Các vùng hiển thị của hình ảnh phần 1 và 2 không được trùng nhau. Partial Image 1 RAM Start/End Address (R81h, R82h) PTSA0[8:0], PTEA0[8:0]: Thiết lập địa chỉ dòng bắt đầu và kết thúc dòng địa chỉ của vùng RAM lưu trữ dữ liệu của hình ảnh một phần 1. Và chắc chắn rằng PTSA0[8:0] ≤ PTEA0[8:0]. Partial Image 2 Display Position (R83h) PTDP1[8:0]: Đặt vị trí hiển thị các hình ảnh phần 2. Các khu vực hiển thị của hình ảnh phần 1 và 2 không được trùng nhau. Partial Image 2 RAM Start/End Address (R84h, R85h) PTSA1[8:0], PTEA1[8:0]: Thiết lập địa chỉ dòng bắt đầu và dòng địa chỉ kết thúc của vùng RAM lưu trữ dữ liệu của hình ảnh phần 2. Hãy chắc chắn rằng PTSA1[8:0] ≤ PTEA1[8:0]. 4.8 Màn hình cảm ứng 4.8.1 Giới thiệu Màn hình cảm ứng thuần trở là 1 loại cảm biến có chức năng chuyển đổi vị trí vật lý tại điểm chạm vào (X,Y) thành tín hiệu điện biểu diễn cho giá trị X và tín hiệu điện biểu diễn cho giá trị Y. Màn hình có thể dùng 4 hay 5 hay 7 hay 8 dây để tạo điện áp phân cực và đọc về điện áp ở chỗ tiếp xúc. Vi điều khiển SHARP như LH75400/01/10/11, LH7A404 sử dụng khối ADC với mạch phân cực tích hợp sẵn cho phép tạo một giao thức liên kết giữa màn hình cảm ứng và vi điều khiển. 4.8.2 Nguyên lý ADC Khối ADC của SHARP sử dụng Successive Approximation Register (SAR) loại chuyển đổi. 4.8.3 Kiến trúc SAR Hình 4.15 Kiến trúc N-bit SAR đơn giản Đây là kiến trúc cơ bản của SAR. Bộ comparator có chức năng so sánh 2 tín hiệu VIN và VDAC: Nếu VIN<VDAC thì bit MSB trong thanh ghi N-bit được xóa về 0. Nếu VIN>VDAC thì bit MSB trong thanh ghi N-bit được set lên 1. SAR control logic tiếp tục dịch chuyển đến bit kế tiếp và đem bit này so sánh cho đến khi đến bit LSB. Khi đó quá trình chuyển đổi hoàn thành, word N-bit được chuyển vào thanh ghi. Hình 4.16 Ví dụ về hoạt động SAR ADC 4 bit 4.8.4 Nguyên lý màn hình cảm ứng Màn hình cảm ứng được làm từ 2 lớp trong suốt. Màn hình cảm ứng 4 dây và 8 dây được làm từ 2 lớp trong suốt có tính thuần trở. Màn hình cảm ứng 5 dây và 7 dây được làm từ 1 lớp thuần trở và 1 lớp dẫn điện. Bình thường 2 lớp này tách biệt nhau, khi tiếp xúc đủ mạnh thì 2 lớp này tiếp xúc với nhau. Màn hình cảm ứng 4 dây Màn hình cảm ứng 4 dây được cấu tạo từ 2 lớp: 1 lớp có 2 vertical bus bar dọc 2 bên trái phải màn hình. 1 lớp có 2 horizontal bus bar ở bên trên và dưới màn hình như hình sau. Hình 4.17 Màn hình cảm ứng 4 dây Thanh bên trái 0V, thanh bên phải là VREF. Kết nối khối ADC vào thanh bên trên hay bên dưới và tiến hành đo khi 2 lớp tiếp xúc nhau. Thanh bên trên 0V, thanh bên dưới là VREF. Kết nối khối ADC vào thanh bên trái hay bên phải và tiến hành đo khi 2 lớp tiếp xúc nhau. Hình 4.18 Mạch tương đương màn hình cảm ứng 4 dây 4.8.5 Điều kiện Sensing Touch và No Touch Đối với tất cả các màn hình cảm ứng, bạn có thể thiết lập độ nhạy touch và notouch bằng cách kéo 1 lớp lên với điện trở kéo lên yếu và kéo lớp kia xuống với điện trở kéo xuống mạnh. Nếu điện áp đo được của lớp kéo lên trên mức ngưỡng thì no touch, ngược lại là touch. Phức tạp trong phương pháp này là màn hình cảm ứng là 1 tụ điện khổng lồ, đồng thời phải gắn thêm tụ để lọc ngõ ra màn hình. Điện trở kéo lên yếu kết nối với tụ có điện dung lớn lâu ngày sẽ dẫn đến sai lệch. Để đo touch pressure – lực chạm vào, chúng ta cần biết điện trở của 1 hay 2 lớp của màn hình hình 4.19 cho thấy làm thế nào để thực hiện các phép tính. Hình 4.19 Tính toán áp cho mà hình cảm ứng 4 dây 4.8.6 Cách dùng SHARP ADC Bảng 4.2 Thanh ghi HW Bảng 4.3 Thanh ghi LW 4.8.7 Hook up and Programming 4.8.7.1 4-wire Touch Screen Hookup and Programming Setup Hình 4.20, màn hình cảm ứng 4 dây kết nối với AN0-AN3, với các tụ điện và bộ lọc. Các bước lập trình: 1. Lập trình tất cả thanh ghi ghi ghi được của ADC bằng 0. 2. Đọc result register khi FIFO Status Register bit, FEMPTY (2) bằng 0. 3. lập trình chip registers. 4. Sử dụng hỏi vòng hay ngắt - driven measurement algorithm. Hình 4.20 4-wire Touch Screen Hookup C1 - C4 = 0.047 µF 4.8.7.2 Converting Result FIFO Values into Voltages and Screen Coordinates Kết quả FIFO trả về 16 bit với các đặc điểm: 10 bit có trọng số cao nhất là kết quả ADC. 4 bit có trọng số thấp nhất chú thích cho bảng Control Bank. Bit thứ 4 và 5 là bit dự trữ. Để tách biệt kết quả chuyển đổi, ta dịch kết quả đọc từ kết quả FIFO sang phải 6 lần (chia cho 64). Để chuyển đổi giá trị đo FIFO thành điện áp (V), nhân kết quả đo đã được dịch phải với mức điện áp tham chiếu và chia cho 0x3FF. Để chuyển đổi giá trị đo trục X thành screen coordinate, ta nhân giá trị thanh ghi kết quả đã được dịch phải với (độ rộng màn hình – 1) và chia cho 0x3FF. Để chuyển đổi giá trị đo trục Y thành screen coordinate, ta nhân giá trị thanh ghi kết quả đã được dịch phải với (độ cao màn hình – 1) và chia cho 0x3FF. Nếu giá trị touch X giảm khi điểm touch di chuyển từ trái sang phải, không thay đổi dây. Lấy (độ rộng màn hình – 1) trừ đi giá trị X. Giá trị Y có thể tăng hoặc giảm từ dưới lên trên cùng màn hình. Nếu giá trị trục Y tăng khi chúng cần được giảm thì lấy (độ cao màn hình – 1) trừ đi giá trị trục Y. 4.8.7.3 Making Polled Measurements Hỏi vòng là cách tốt nhất để thực hiện phép đo. Thiết lập measurement sequencer cho softtriggered measurements bằng cách ghi 0b10 vào vùng SSM. field của the General Configuration register. Để trigger measurement, lập trinh bit SSB của thanh ghi General Configuration bằng 1. Để tiết kiệm năng lượng, Idle Low Word = 0. Để thực hiện polled measurement: 1. Ghi 1 vào bit EOSINTC của thanh ghi Interrupt Clear Register. 2. Delay khoảng 100 ms. 3. Trigger a measurement bằng cách ghi 1 vào bit SSB của thanh ghi General Configuration Register. 4. Hỏi vòng thanh ghi Interrupt Status Register cho đến khi bit EOSINTR_UM được set lên 1. 5. Đọc và loại bỏ giá trị đầu tiên (VDDA_ADC). 6. Đọc giá trị thứ 2. Đây là giá trị đo đầu tiên được phát hiện Nếu giá trị đó trên mức ngưỡng: Đọc và ghi nhận là no touch detected. Nhảy đến bước 10 Nếu giá trị đó dưới mức ngưỡng: Đọc và lấy trung bình, xác định được tọa độ X, tọa độ Y Đọc và loại bỏ giá trị đo kế 7. Đọc giá trị cuối. đây là giá trị thứ hai được phát hiện Nếu giá trị đó trên mức ngưỡng: Quay lại giá trị X, Y cũ Ghi nhận là no touch detected. Ngược lại, ghi nhận là detected. 8. Nếu trạng thái trước là touch detected và trạng thái hiện tại là no touch detected thì tiếp tục đợi. 9. Nếu trạng thái trước là no touch detected và trạng thái hiện tại là touch detected hay cả trạng thái trước và trạng thái hiện tại đều là touch detected thì báo là phát hiện tọa độ X,Y mới. 10. Make the current state of the screen (touch state and coordinates) the new previous state of the touch screen. 11. Read the remaining non-touch screen results from the result FIFO (if any), and process them accordingly. 4.8.7.4 Making Interrupt-driven Measurements Để tiết kiệm năng lượng ta sử dụng ngắt Timer. Sử dụng ngắt PENIRQ để phát hiện việc chạm vào vì tiến hành phân cực cho màn hình. Cài đặt timer interrupt: 1. Xóa ngắt timer. 2. Trigger a measurement bằng cách ghi 1 vào bit SSB của General Configuration Register. 3. Đọc và xóa giá trị đầu tiên. 4. Đọc giá trị thứ 2. Đây là giá trị đo đầu tiên được phát hiện nếu nó trên mức ngưỡng thì loại bỏ, nhảy đến bước 11. Ngược lại 5. Đọc và lấy trung bình, xác định được tọa độ X. 6. Đọc và lấy trung bình, xác định được tọa độ Y. 7. Đọc và loại bỏ giá trị đo kế tiếp. 8. Khi có được tọa độ X,Y thì khởi động timer và thoát. Nếu chưa có được tọa độ X,Y nào Thay đổi I

Các file đính kèm theo tài liệu này:

  • docam_thanh_hinh_anh_final.doc