Khối vi xử lý AT91SAM9260

Một phần của tài liệu Luận văn tốt nghiệp đại học thiết kế ROBOT tự hành với hệ điều hành nhúng LINUX (Trang 63 - 90)

Khối vi xử lý gồm các thành phần:

o Vi xử lý AT91SAM9260.

o Thạch anh 18.432MHz, cung cấp xung nhịp clock cho vi điều khiển.

o Thạch anh 32.768KHz, cung cấp xung nhịp cho khổi Realtime Clock trong vi điều khiển.

o Jtag port, debug.

o Các nút nhấn Reset, Wake-up, user button

o User Led.

o Các jumper chọn chế độ hoạt động. Sơ đồ nguyên lý khối vi xử lý:

Luận án tốt nghiệp Chương 7: Mạch nhúng AT91SAM9260-SMISY

Hình 7.4 – Khối vi xử lý

Luận án tốt nghiệp Chương 7: Mạch nhúng AT91SAM9260-SMISY 7.3.2 SDRAM:

Sử dụng MT48LC4M16A2, là IC SDRAM của hãng MICRON, với các thông số cơ bản:

o Dung lượng: 8 MegaByte (1Meg x 16 x 4banks).

o Data bus 16bits, 133MHz.

o Address bus 12bits.

o Đóng gói: TSOP II - 54 chân.

Hình 7.5 – SDRAM.

SDRAM được điều khiển giao tiếp nhờ khối giao tiếp với bộ nhớ ngoài (External Bus Interface) của vi điều khiển AT91SAM9260, ta không quá quan tâm đến giao thức giao tiếp SDRAM.

Khối SDRAM này dùng làm vùng Ram chính cho hệ điều hành và các ứng dụng. 7.3.3 NAND Flash:

Sử dụng HY27UF081G2M, là IC NAND Flash của hãng HYNIX, các thông số tiêu biểu:

o Dung lượng 128 Mega Bytes.

o Data bus 8bits.

Luận án tốt nghiệp Chương 7: Mạch nhúng AT91SAM9260-SMISY

Hình 7.6 – NAND Flash.

NAND Flash cũng được giao tiếp nhờ vào khối External Bus Interface của vi điều khiển AT91SAM9260. NAND Flash đóng vai trò như ổ đĩa cứng máy vi tính, là bộ nhớ chứa hệ thống File (File System) cho hệ điều hành hoạt động.

7.3.4 SPI Data Flash:

Quá trình khởi động hệ điều hành Linux nhúng là quá trình phức tạp, qua nhiều giai đoạn. Cần một vùng nhớ chứa các đoạn code cho quá trình khởi động (Boot loader). Ta dùng AT45DB161D-SU, là IC nhớ Flash của hãng ATMEL:

o Dung lượng: 2 MegaBytes.

o Giao tiếp SPI, tốc độ tối đa 66MHz.

o Kiểu đóng gói: SOIC – 8 chân.

Hình 7.7 – SPI Data Flash.

AT45DB161D giao tiếp với AT91SAM9260 nhờ khối giao tiếp SPI với chân chip select SPI0_NPCS1 của AT91SAM9260.

7.3.5 Các khi khác:

7.3.5.1-Khối nguồn:

o Dùng LM1117-3V3, từ đầu vào 5VDC, tạo nguồn 3.3V cấp cho các module chức năng của AT91SAM9260, và các IC khác trên mạch.

Luận án tốt nghiệp Chương 7: Mạch nhúng AT91SAM9260-SMISY

o Dùng LM1117-1V8, từ đầu vào 5VDC, tạo nguồn 1.8V cấp cho lõi xử lý của AT91SAM9260.

o Nguồn pin 3V, qua MCP1700-1802E/MB, là IC ổn áp hiệu suất cao, tạo áp 1.8V cho khối Realtime Clock của AT91SAM9260.

Hình 7.8 – Khối cấp nguồn.

7.3.5.2-Khối RS232:

Dùng IC Max3232 để chuyển đổi mức điện áp giữa khối giao tiếp UART của AT91SAM9260 (3.3V) và mức điện áp của chuẩn giao tiếp RS232 (±9V). nhờ đó giao tiếp với máy vi tính hoặc các thiết bị khác.

Khối UART0 của AT91SAM9260 còn giao tiếp với máy vi tính qua RS232, làm Console chính cho Hệ điều hành Linux chạy trên mạch.

Luận án tốt nghiệp Chương 7: Mạch nhúng AT91SAM9260-SMISY

Hình 7.9 – RS232.

7.3.5.3-Khối giao tiếp SD card:

Giao tiếp với thẻ nhớ SD. Thẻ nhớ SD có thể được dùng như bộ nhớ chính chứa Kernel Linux và File system, hoặc để chứa các chương trình ứng dụng hay các dữ liệu khác.

Hình 7.10 – SD card.

7.3.5.4-Khối giao tiếp Ethernet:

AT91SAM9260 đã có module điều khiển lớp MAC của giao thức Ethernet, ta cần IC DM9161A của hãng DAVICOM làm nhiệm vụ giao tiếp ethernet ở lớp vật lý (Physical layer).

Luận án tốt nghiệp Chương 7: Mạch nhúng AT91SAM9260-SMISY

Hình 7.11 – Ethernet.

7.3.5.5-USB port:

Cổng USB device dùng giao tiếp với máy vi tính.

Cổng USB host dùng giao tiếp với các thiết bị USB khác (USB webcam, USB flash disk…).

Hình 7.12 – USB port.

7.3.5.6-GPIO:

GPIO (General Purpose Input Output) là các chân vào/ra ứng dụng chung. Ta có thể dùng để điều khiển On/Off các thiết bị, đọc giá trị từ các nút nhấn...

Luận án tốt nghiệp Chương 7: Mạch nhúng AT91SAM9260-SMISY AT91SAM9260-SMISY có 47 chân GPIO.

Hình 7.13 – GPIO.

7.4 Thi công thc tế:

Mạch được vẽ sơ đồ nguyên lý và sơ đồ mạch in bằng phần mềm Orcad. Mạch in được thiết kế 2 lớp, có thể dễ dàng đặt sản xuất tại các cơ sở thi công mạch in tại Việt Nam.

Luận án tốt nghiệp Chương 7: Mạch nhúng AT91SAM9260-SMISY

Hình 7.15 – AT91SAM9260-SMISY – mặt dưới.

Luận án tốt nghiệp Chương 7: Mạch nhúng AT91SAM9260-SMISY Giải thích các Jumper:

Jumper Tên Chức năng

J3 INTRC/EXTCLK Chọn clock khởi động: từ bộ dao động RC bên trong hay từ thạch anh 32.768KHz ngoài.

J4 NTRST_E Cho phép hoặc cấm tín hiệu NTRST của khối Jtag. J5 TCK_RTCK Sử dụng hoặc không sử dụng tín hiệu RTCK của Jtag. J6 BDS_E Cho phép hoặc cấm chức năng Jtag debug.

J7 BMS_LOW Chọn boot từ Embedded ROM hay từ external memory. J8 SFLASH_WP Cho phép hoặc cấm ghi vào SPI DATA FLASH.

J17 NAND_WP Cho phép hoặc cấm ghi vào NAND FLASH.

J18 TXD1/DTXD Chọn TXD1 (từ khối UART1) hay DTXD (từ khối UART0 debug) kết nối đến RX của COM port.

J19 RXD1/DRXD Chọn RXD1 (khối UART1) hay DRXD (khối UART0 debug) kết nối đến TX của COM port.

Luận án tốt nghiệp Chương 8: Embedded Linux trên AT91SAM9260-SMISY CHƯƠNG 8

Embedded Linux trên AT91SAM9260-SMISY

8.1 Quá trình boot Linux trên board AT91SAM9260-SMISY:

8.1.1 Quá trình khởi động ca vi x lý AT91SAM9260:

Mỗi loại vi điều khiển có quá trình boot khác nhau. Đối với AT91SAM9260, khi vừa được cấp nguồn, AT91SAM9260 sẽ thực hiện quá trình “Rom Boot”: thực thi đoạn chương trình boot trong ROM (được xây dựng sẵn trong quá trình sản xuất chip).

Quá trình Rom Boot thực hiện như sau:

Luận án tốt nghiệp Chương 8: Embedded Linux trên AT91SAM9260-SMISY  Bước 1: Chương trình chạy với bộ dao động nội, hoặc với bộ dao động thạch anh (được chọn bởi kiểm tra mức điện áp trên chân OSCSEL – chân 41 của AT91SAM9260, đối với mạch AT91SAM9260-SMISY thì bằng cách nối hoặc không nối Jumper J3), thực hiện cấu hình main clock cho hệ thống.

 Bước 2: Kiểm tra sự tồn tại của chương trình BootStrap trong SPI dataflash (NPCS0). Nếu tồn tại, MPU thực hiện chép mã thực thi BootStrap từ SPI dataflash vào SRAM nội của MPU, sau đó thực thi lệnh nhảy đến địa chỉ đầu tiên của SRAM để thực thi chương trình đó. Nếu không tồn tại, MPU thực hiện Bước 3 sau đây.

 Bước 3: Kiểm tra sự tồn tại của chương trình BootStrap trong SPI dataflash (NPCS1) hay không. Nếu tồn tại, MPU thực hiện chép mã thực thi của BootStrap từ SPI dataflash vào SRAM nội của MPU, sau đó thực thi lệnh nhảy đến địa chỉ đầu tiên của SRAM để thực thi chương trình BootStrap. Nếu không tồn tại, MCU thực hiện Bước 4 sau đây.

 Bước 4: Kiểm tra sự tồn tại của chương trình BootStrap trong NAND FLASH device hay không. Nu tồn tại, MPU thực hiện chép mã thực thi của BootStrap từ NAND FLASH vào SRAM nội của MPU, sau đó thực thi lệnh nhảy đến địa chỉ đầu tiên của SRAM để thực thi chương trình BootStrap. Nếu không tồn tại, MPU thực hiện bước B5 sau đây.

 Bước 5: Nếu MPU nhận được ký tự bất kỳ từ bàn phím máy tính (qua cổng DBGU). Hoặc khi cắm cable USB vào máy tính chương trình sẽ nhảy sang SAM-BA boot. SAM-BA boot là quá trình giao tiếp giữa các MPU dòng AT91SAM với chương trình SAM-BA trên máy tính để thực hiện nạp chương trình khởi động cho MPU.

Chương trình BootStrap là đoạn chương trình nhỏ được lưu trữ ở địa chỉ đầu của các thiết bị nhớ (SPI DATA FLASH, NAND FLASH…), sẽ được chép vào SRAM và thực thi trên SRAM, có nhiệm vụ load các chương trình ứng dụng lớn hơn, vì chương trình ứng dụng lớn không thể được load trực tiếp vào 4KB SRAM của AT91SAM9260.

Việc kiểm tra sự tồn tại của BootStrap trên các thiết bị nhớ được xác định bằng cách kiểm tra 32byte đầu của các thiết bị nhớ:

• 8 vector lệnh ở đầu thiết bị nhớ (32 byte đầu, mỗi lệnh 4 byte), trừ vector thứ 6, là những lệnh thích hợp của tập lệnh ARM

• Vector thứ 6 (ở địa chỉ 0x14) cho biết kích thước của chương trình sẽ được chép vào SRAM của AT91SAM9260 để thực thi. Kích thước chương trình phải nhỏ hơn 4KB, vì AT91SAM9260 có SRAM 4KB.

Luận án tốt nghiệp Chương 8: Embedded Linux trên AT91SAM9260-SMISY Vậy với mạch AT91SAM9260-SMISY, ta có thể lưu trữ BootStrap ở SPI DATA FLASH (NPCS1) hoặc ở NAND FLASH. Chương trình BootStrap sẽ được Rom Boot load và chạy trên SRAM. BootStrap sẽ tiếp tục load các chương trình ứng dụng lớn hơn.

ATMEL cung cấp sẵn source code BootStrap cho dòng chip AT91, gọi là AT91BootStrap.

8.1.2 Quá trình boot Linux trên board AT91SAM9260:

Quá trình boot Linux trên board AT91SAM9260-SMISY cũng cần các boot loader, Linux Kernel Image, và File System. Ở đây, 1st bootloader ta dùng AT91BootStrap, sử dụng DAS U-boot cho boot loader tầng thứ 2.

Ta phân vùng bộ nhớ như sau:

o AT91BootStrap, U-boot, và Linux Kernel được chứa trong SPI DataFlash.

o File System được chứa trong NAND Flash.

o AT91BootStrap thực thi trên SRAM nội của MPU.

o U-boot và Linux Kernel chạy trên SDRAM.

Hình 8.2 – Phân vùng bộ nhớ cho AT91SAM9260-SMISY.

Boot media

(SPI Data Flash AT45DB161D) (2 MegaBytes) AT91BootStrap (4KB) 0x0000 0x1000 U-boot environment (16KB) 0x5200 U-boot (230KB) Kernel image (1.75MB) 0x3E800 U-boot (1MB) 0x20000000 0x20780000 Linux kernel (7MB) 0x1FFFFF 0x207FFFFF SDRAM (8MegaBytes)

Luận án tốt nghiệp Chương 8: Embedded Linux trên AT91SAM9260-SMISY Quá trình boot Linux:

Hình 8.3 – Quá trình boot Linux.

(1) Rom code:

Quá trình Rom Boot: AT91SAM9260 khởi động, Rom code sẽ thực thi, kiểm tra xem AT91BootStrap có tồn tại trên Boot Media không. (Boot media là các bộ nhớ ngoài như SPI Data Flash, Nand Flash, hay SD card…).

Nếu tìm thấy, Rom code sẽ load AT91BootStrap (4KB đầu tiền của Boot Media) vào SRAM nội của AT91SAM9260 và thực thi nó.

(2) AT91BootStrap:

Có nhiệm vụ khởi động SDRAM, bộ dao động, và load U-boot từ địa chỉ 0x5200 trên SPI Data Flash vào địa chỉ 0x207800000 trên SDRAM, rồi thực hiện lệnh nhảy đến địa chỉ đó để chuyển thực thi cho U-boot.

(3) U-boot:

Thực hiện load Linux Kernel từ địa chỉ 0x3E800 trên SPI Data Flash vào địa chỉ 0x20000000 trên SDRAM, truyền các biến môi trường và chuyển thực thi cho Kernel.

Linux Kernel sẽ căn cứ vào các biến môi trường để truy xuất File System và bắt đầu hệ điều hành Linux.

Luận án tốt nghiệp Chương 8: Embedded Linux trên AT91SAM9260-SMISY

8.2 Thc hin port Linux lên board AT91SAM9260-SMISY:

Board AT91SAM9260-SMISY có các thông số phần cứng gần giống với AT91SAM9260-EK Evaluation board của ATMEL. Vì vậy ta có thể sử dụng lại các công cụ phát triển và một số mã nguồn dùng cho board này.

Chi tiết về board AT91SAM9260-EK tìm thấy trong tài liệu “AT91SAM9260- EK Evaluation board – User Guide” của ATMEL.

Điểm khác biệt lớn nhất của AT91SAM9260-SMISY so với AT91Sam9260-EK về cấu hình hệ thống để boot Embedded Linux đó là SDRAM. AT91SAM9260-EK dùng SDRAM 32MB với data bus width = 32; AT91SAM9260-SMISY dùng SDRAM 8MB với data bus width = 16.

Ta tiến hành chuẩn bị các bootloader (AT91BootStrap và U-boot), Linux Kernel Image, và File System cho quá trình boot Embedded Linux.

8.2.1 Các công c cn thiết:

8.2.1.1-Cross-Compiler:

Sử dụng gói "arm-2007q3.tar.bz2" download tại http://www.codesourcery.com/

để biên dịch AT91BootStrap, U-boot, Linux Kernel, và chương trình ứng dụng cho board AT91SAM9260-SMISY.

Việc cài đặt và thiết lập Cross-compiler thực hiện như đã trình bày ở mục 6.2.2. 8.2.1.2-Minicom:

Minicom cũng được dùng như console chính để giao tiếp giữa máy PC Linux và mạch AT91SAM9260-SMISY.

Thiết lập cho Minicom: baud rate = 115200, data 8bit, no parity, 1bit Stop. Các thao tác thiết lập như ở mục 6.2.2.

8.2.1.2-SAM-BA:

SAM-BA (SAM Boot Assistant) là một chương trình chạy trên máy tính (hệ điều hành Windows hoặc Linux) do ATMEL phát triển. Có chức năng giao tiếp với mạch sử dụng các chip dòng AT91SAM qua cổng RS232 hoặc USB để nạp chương trình cho mạch.

Chi tiết về SAM-BA xem trong tài liệu AT91 ISP/SAM-BA® User Guide của ATMEL.

SAM-BA đã được xây dựng sẵn một bộ thư viện các board có thể kết nối. Để thực hiện kết nối SAM-BA với board không có trong thư viện, ta cần thêm thông tin về board vào thư viện SAM-BA. Thao tác thêm board AT91SAM9260-SMISY vào danh sách các board của SAM-BA phiên bản 2.10 như sau:

Danh sách các board có thể kết nối của SAM-BA được lưu trong file “SAM-BA- v2.10/tcl_lib/boards.tcl”. Ta thêm dòng:

"at91sam9260-SMISY" "at91sam9260-SMISY/at91sam9260-SMISY.tcl" vào cuối danh sách các board.

Tiếp theo, trong thư mục “SAM-BA-v2.10/tcl_lib/” chứa nhiều thư mục con, mỗi thư mục con tương ứng với 1 board. Ta chọn thư mục board AT91SAM9260-EK có

Luận án tốt nghiệp Chương 8: Embedded Linux trên AT91SAM9260-SMISY phần cứng gần nhất với board AT91SAM9260-SMISY, copy và đổi tên thành AT91SAM9260-SMISY:

# cd SAM-BA-v2.10/tcl_lib

# cp –r AT91SAM9260-EK/ AT91SAM9260-SMISY/

Đổi tên file “at91sam9260-ek.tcl” thành “AT91SAM9260-SMISY.tcl”: # cd AT91SAM9260-SMISY

# mv at91sam9260-ek.tcl AT91SAM9260-SMISY.tcl

Trong file “AT91Sam9260-SMISY.tcl”, dòng 49, sửa “variable extRamDataBusWidth 32” thành “variable extRamDataBusWidth 16”.

Tiếp theo, trong thư mục “SAM-BA-v2.10/applets/at91lib/boards/” có các thư mục con chứa source code tương ứng cho 1 board. ta copy và đổi tên thư mục AT91SAM9260-EK thành AT91SAM9260-SMISY:

# cp –r AT91SAM9260-EK/ AT91SAM9260-SMISY/

Thư mục AT91SAM9260-SMISY, file “board.h”, dòng 513, sửa các thông tin về SDRAM size và data bus width:

File “board_memory.c”, dòng 108, sửa các tham số cấu hình SDRAM:

Các tham số này tìm thấy trong datasheet của SDRAM MT48LC4M16A2.

Cấu hình xong, vào thư mục “SAM-BA-v2.10/applets/isp-project/extram”, và biên dịch:

#cd SAM-BA-v2.10/applets/isp-project/extram

#make clean BOARD=AT91SAM9260-SMISY CHIP=at91sam9260 sdram File “isp-extram-at91sam9260.bin” sẽ được tạo ra và được chép tự động vào thư mục “SAM-BA-v2.10/tcl_lib/AT91SAM9260-SMISY”. Lúc này SAM-BA đã sẵn sàng làm việc với board AT91SAM9260-SMISY.

8.2.2 AT91BootStrap:

AT91BootStrap là boot loader được ATMEL viết dành cho các chip dòng AT91 của hãng này. AT91BootStrap có mã nguồn mở, ta sử dụng phiên bản 1.16, download tại http://www.atmel.com/dyn/products/tools_card.asp?tool_id=4093

Luận án tốt nghiệp Chương 8: Embedded Linux trên AT91SAM9260-SMISY AT91BootStrap đóng vai trò 1st bootloader trong quá trình boot Linux, có nhiệm vụ cấu hình các khối chức năng cần thiết của MPU, sau đó thực thi 2nd bootloader.

Chi tiết về AT91BootStrap xem tài liệu “AT91BootStrap” của ATMEL.

Trong đề tài này, ta sử dụng source code của AT91BootStrap viết cho board AT91SAM9260-EK, vì board này có cấu hình phần cứng khá giống với board AT91SAM9260-SMISY tự thiết kế. Cụ thể, trong AT91BootStrap, ta cần cấu hình lại các thông số của SDRAM, và địa chỉ của U-boot:

 Trong thư mục source code của AT91BootStrap, thư mục “board” chứa source code xây dựng sẵn cho các board. Copy “AT91SAM9260-EK” và đổi tên thành “AT91SAM9260-SMISY”:

# cd board

# cp –r at91sam9260ek/ AT91SAM9260-SMISY/ Đổi tên file:

# cd AT91SAM9260-SMISY

# mv at91sam9260ek.c at91sam9260-SMISY.c # cd dataflash

# mv at91sam9260ek.h at91sam9260-SMISY.h

Ta lưu trữ AT91BootStrap trong SPI DataFlash nên ta chỉ quan tâm đến thư mục “dataflash”. Tiếp theo, ta sửa lại file “Makefile” ở dòng 18:

BOARD=AT91SAM9260-SMISY

 File “at91sam9260-SMISY.c”, dòng 114, sửa lại đoạn code số cấu hình SDRAM ở 3 thông số AT91C_SDRAMC_NC_8, AT91C_SDRAMC_NR_12, AT91C_SDRAMC_DBW_16_BITS.

Luận án tốt nghiệp Chương 8: Embedded Linux trên AT91SAM9260-SMISY  Ta sử dụng SPI DataFlash để chứa AT91BootStrap. Vào thư mục “dataflash”, file “at91sam9260-SMISY.h”, dòng 70, phần “bootstrap setting”, sửa lại các thông số: IMG_ADDRESS, IMG_SIZE, JUMP_ADDR cho phù hợp với phân vùng bộ nhớ.

Sử dụng Cross Toolchain, biên dịch:

# cd board/AT91SAM9260-SMISY/dataflash # make

Trong thư mục board/AT91SAM9260-SMISY/dataflash sẽ xuất hiện file “dataflash_at91sam9260-SMISY.bin”. Đây là file bootstrap để nạp vào địa chỉ 0x0000 của SPI DataFlash.

8.2.3 U-boot:

DAS U-boot (Universal Bootloader) là một bootloader mã nguồn mở, tương thích với rất nhiều kiến trúc CPU. U-boot được phát triển đầu tiên bởi Wolfgang Denk vào năm 2002. Website chính nơi phát triển U-boot: http://sourceforge.net/projects/u- boot/. U-boot vẫn đang tiếp tục được phát triển mạnh bởi cộng đồng mã nguồn mở, và trung bình 1 tháng có một phiên bản U-boot mới ra đời.

Chức năng cơ bản của U-boot là cấu hình cho một số khối phần cứng trên board và khởi động hệ điều hành một cách tự động hoặc có sự can thiệp của người dùng qua dòng lệnh. Việc can thiệp bằng dòng giúp người dùng có thể cấu hình bộ nhớ, cấu hình

Một phần của tài liệu Luận văn tốt nghiệp đại học thiết kế ROBOT tự hành với hệ điều hành nhúng LINUX (Trang 63 - 90)

Tải bản đầy đủ (PDF)

(90 trang)