You are on page 1of 45

BÁO CÁO THỰC HÀNH

Thực hiện theo nhóm đã đăng ký


Nội dung: Tổng hợp lại báo cáo thực hành gồm các nội dung sau:
(20-30trang)
1. Giao tiếp UART
2. Giao tiếp SPI
3. Giao tiếp I2C
4. Biến đổi AD/DA
Các nội dung làm cho mỗi mục:
1. Giới thiệu
2. Nguyên lý hoạt động
3. Thuật toán điều khiển
4. Mạch ứng dụng (STM32F407) (nguyên lý hoặc mô phỏng)

i
DANH MỤC HÌNH VẼ

Hình 1.2. Mô hình kiến trúc vi xử lý ARM...........................................................1


Hình 1.3. Sự phát triển của các dòng ARM..........................................................1
Hình 1.4. Tính năng các dòng lõi xử lý ARM.......................................................2
Hình 2.1. Kiến trúc ARM Cortex-M3...................................................................3
Hình 2.2. Kiến trúc đường ống của ARM Cortex – M3........................................3
Hình 2.3 Kiến trúc Load và Store của ARM Cortex – M3....................................3
Hình 2.4. Các thanh ghi của ARM Cortex – M3...................................................4
Hình 2.5. Thanh ghi trạng thái chương trình của CPU Cortex..............................4
Hình 2.6. Bản đồ bộ nhớ tuyến tính 4Gbytes của bộ xử lí Cortex – M3...............5
Hình 2.7. Mạch ADC trong STM32......................................................................5
Hình 2.8. Mô hình hoạt động của chế độ Thread và Handler...............................6
Hình 2.9. Đồ thị biểu diễn hiệu năng của bộ xử lí Cortex.....................................6
Hình 2.10. Cấu trúc NVIC trong bộ xử lí Cortex..................................................7
Hình 3.4. Các mức trừu tượng của platform phần cứng........................................8
Hình 3.5. Minh họa vấn đề big endian/little endian..............................................8
Hình 3.13. vẽ mô tả chân đầu vào Pull-up............................................................9
Hình 3.14. GPIO C ở trạng thái Floating (không rõ trạng thái 0 hay 1)...............9
Hình 3.15. Chân đầu ra Push pull..........................................................................9
Hình 3.16. Chân đầu ra Open Drain......................................................................9
Hình 3.17. Các chế độ cho GPIO của STM32....................................................10
Hình 3.18. Đấu nối giao tiếp UART....................................................................10
Hình 3.19. Dữ liệu truyền qua UART.................................................................10
Hình 3.20. Gói dữ liệu.........................................................................................10
Hình 3.21. Sơ đồ khối phần cứng USART STM32 UART.................................11
Hình 3.22. Sơ đồ giao tiếp SPI............................................................................11
Hình 3.23. Khung truyền SPI..............................................................................11
Hình 3.24. Dạng tín hiệu xung các chân khi truyền............................................12
Hình 3.25. Tín hiệu các chân khi truyền.............................................................12
Hình 3.26. Một thiết bị Master và 1 thiết bị Slave..............................................12
Hình 3.27. Một thiết bị Master và nhiều thiết bị Slave chế độ độc lập...............12
Hình 3.28. Một thiết bị Master và nhiều thiết bị Slave chế độ dây chuyền........13
Hình 3.29. Sơ đồ khối SPI của STM32F103.......................................................13
Hình 3.30. Sơ đồ kết nối các thiết bị qua I2C.....................................................13
Hình 3.31. Sơ đồ kết nối I2C...............................................................................14
Hình 3.32. Một Master nhiều Slave.....................................................................14
Hình 3.33. Nhiều Master nhiều Slave.................................................................14
Hình 3.34. Thiết bị Master gửi điều kiện bắt đầu đến tất cả các thiết bị Slave...15
Hình 3.35. Slave so sánh địa chỉ được gửi từ thiết bị Master..............................15
Hình 3.36. Thiết bị Master gửi hoặc nhận khung dữ liệu....................................16
Hình 3.37. Gửi báo hiệu......................................................................................16
Hình 3.38. Gửi tín hiệu dừng truyền...................................................................17
Hình 3.39. Master gửi dữ liệu đến thiết bị Slave.................................................17
Hình 3.40. Master nhận dữ liệu đến thiết bị Slave..............................................17
Hình 3.41. Cấu trúc khung dữ liệu......................................................................17
Hình 3.42. Quá trình truyền nhận dữ liệu I2C.....................................................18
Hình 3.43. Lưu đồ thuật toán truyền nhận dữ liệu..............................................18
Hình 3.45. Khối điều khiển EXTI.......................................................................19
Hình 4.1. Cấu trúc Embedded Linux...................................................................20
Hình 4.2. Hệ thống USB trên Linux....................................................................28
Hình 4.3 Xem thông tin các thiết bị USB sử dụng lệnh lsusb.............................28
Hình 4.4. Xem thông tin đặc tả thiết bị USB.......................................................29
Hình 4.5. Mô hình biểu diễn tổng quan thiết bị USB..........................................29
Hình 4.6. Thử nghiệm với usb driver pen_register.............................................30
Hình 4.7. Xem thông tin về đặc tả thiết bị USB..................................................30
Hình 4.8. Kết quả thử nghiệm với driver pen_info.............................................31
Hình 4.9 Xem thông tin đặc tả của thiết bị USB Flash Drive.............................32
Hình 4.10. Tương tác giữa thiết bị và driver.......................................................32
Hình 4.11. Các thành phần của driver thên Linux...............................................33
Hình 4.12. Kiến trúc tổng quan nhân Linux........................................................33
Hình 4.13. Xem các module sẵn có trên Linux...................................................34
Hình 4.14. Các thao tác (nạp, gỡ) module trên Linux.........................................34
Hình 5.1. Kiến trúc chung của họ vi điều khiển PSoC........................................35
Hình 5.2. Cấu tạo CPU........................................................................................35
Hình 5.3. Hệ thống đồng hồ trong PSoC.............................................................36
Hình 5.4. Thao tác truy xuất cổng.......................................................................36
Hình 5.5. Các lối vào tương tự............................................................................36
Hình 5.6. Truy cập các khối số............................................................................37
Hình 5.7. Kết nối thông qua bộ hợp kênh...........................................................37
Hình 5.8. Các khối số khả trình...........................................................................37
Hình 5.9. Các nguồn đồng hồ..............................................................................38
Hình 5.10. Mạch điện logic.................................................................................38
Hình 5.11. Kết nối các đường dây vào ra............................................................38
Hình 5.12. Các khối khả trình.............................................................................39
Hình 5.13. Các khối tương tự..............................................................................39
Hình 5.14. Các lối ra tương tự.............................................................................39
Hình 5.15. Cung cấp đồng hồ cho các khối tương tự..........................................40
Hình 5.16. Điện áp tham chiếu AGND trong PSoC............................................40
Hình 5.17. Các giá trị điện áp tham chiếu trong PSoC........................................40
Hình 5.18. Chế độ bơm điện áp SMP..................................................................41
.

Hình 1.2. Mô hình kiến trúc vi xử lý ARM

Hình 1.3. Sự phát triển của các dòng ARM

1
Hình 1.4. Tính năng các dòng lõi xử lý ARM
Bảng 1.2. Đặc tính kỹ thuật chung của dòng ARMv5
Hình 2.1. Kiến trúc ARM Cortex-M3

Hình 2.2. Kiến trúc đường ống của ARM Cortex – M3

Hình 2.3 Kiến trúc Load và Store của ARM Cortex – M3


Hình 2.4. Các thanh ghi của ARM Cortex – M3

Hình 2.5. Thanh ghi trạng thái chương trình của CPU Cortex
Hình 2.6. Bản đồ bộ nhớ tuyến tính 4Gbytes của bộ xử lí Cortex – M3

Hình 2.7. Mạch ADC trong STM32


Hình 2.8. Mô hình hoạt động của chế độ Thread và Handler

Hình 2.9. Đồ thị biểu diễn hiệu năng của bộ xử lí Cortex


Hình 2.10. Cấu trúc NVIC trong bộ xử lí Cortex
Hình 3.4. Các mức trừu tượng của platform phần cứng

Hình 3.5. Minh họa vấn đề big endian/little endian

Hình 3.13. vẽ mô tả chân đầu vào Pull-up

Hình 3.14. GPIO C ở trạng thái Floating (không rõ trạng thái 0 hay 1)
Hình 3.15. Chân đầu ra Push pull

Hình 3.16. Chân đầu ra Open Drain

Hình 3.17. Các chế độ cho GPIO của STM32

Hình 3.18. Đấu nối giao tiếp UART


Hình 3.19. Dữ liệu truyền qua UART

Hình 3.20. Gói dữ liệu

Hình 3.21. Sơ đồ khối phần cứng USART STM32 UART



Hình 3.22. Sơ đồ giao tiếp SPI

Hình 3.23. Khung truyền SPI

Hình 3.24. Dạng tín hiệu xung các chân khi truyền
Hình 3.25. Tín hiệu các chân khi truyền

Hình 3.26. Một thiết bị Master và 1 thiết bị Slave

Hình 3.27. Một thiết bị Master và nhiều thiết bị Slave chế độ độc lập

Hình 3.28. Một thiết bị Master và nhiều thiết bị Slave chế độ dây chuyền
Hình 3.29. Sơ đồ khối SPI của STM32F103

Hình 3.30. Sơ đồ kết nối các thiết bị qua I2C

Hình 3.31. Sơ đồ kết nối I2C


Hình 3.32. Một Master nhiều Slave

Hình 3.33. Nhiều Master nhiều Slave.


Hình 3.34. Thiết bị Master gửi điều kiện bắt đầu đến tất cả các thiết bị
Slave

Hình 3.35. Slave so sánh địa chỉ được gửi từ thiết bị Master

Hình 3.36. Thiết bị Master gửi hoặc nhận khung dữ liệu


Hình 3.37. Gửi báo hiệu

Hình 3.38. Gửi tín hiệu dừng truyền

Hình 3.39. Master gửi dữ liệu đến thiết bị Slave


Hình 3.40. Master nhận dữ liệu đến thiết bị Slave

Hình 3.41. Cấu trúc khung dữ liệu

Hình 3.42. Quá trình truyền nhận dữ liệu I2C


Hình 3.43. Lưu đồ thuật toán truyền nhận dữ liệu

Hình 3.45. Khối điều khiển EXTI

.
Hình 4.1. Cấu trúc Embedded Linux

- Kích chuột phải vào màn hình và kích vào Open in Terminal ta sẽ được
màn hình như sau:
- Con trỏ sẽ xuất hiện trong Terminal.
* Bước 3:
Ta sẽ gõ lệnh từ sau dấu $
Đầu tiên ta gõ lệnh tạo file kernel $ sudo mkdir kernel // lệnh tạo thư mục
kernel
Trên desktop sẽ xuất hiện thư mục kernel:

Thư mực kernel sẽ được tạo ra trên màn hình desktop


Hoặc có thể gõ lệnh:
$ls
//để kiểm tra file đã được tạo

* Bước 4:Truy xuất vào file vừa tạo vs câu lệnh $ cd kernel/
Tương đương vs việc kích đúp vào thư mục kernel trên màn hình
* Bước 5:Ta sẽ cài đặt các thư viện cần thiết:
$sudo apt-get install git bc flex libssl-dev make libc6-dev libncurses5-dev
Ta sẽ được như sau:

Tiếp tục gõ: Y


Để chọn tiếp tục.
Sau đó chờ thư viện tải những gói cần thiết
Màn hình sau khi cài đặt xong:

* Bước 6: Ta tiếp tục cài đặt trình biên dịch cho phép biên dịch ARM
Ta gõ câu lệnh:
$sudo apt-get install crossbuild-essential-armhf
Tiếp tục gõ Y để tiếp tục khi máy hỏi:
Quá trình tải sẽ mất vài phút để xong.
Khi đã hoàn thành trình biên dịch cho phép biên dịch arm ta sẽ tiếp tục tải
source Linux
* Bước 7: Tải về source Linux
Gõ dòng lệnh:
$sudo git clone --depth==1
https://github.com/raspberrypi/linux
Chờ quá trình cài đặt source Linux hoàn thành

Để kiếm tra tương tự bên trên gõ lệnh


$ls
Ta có hiển thị thư mục
* Bước 8:
Tươn tự trên dùng câu lệnh
$cd linux
Để truy cập vào thư mục linux

Xét biến môi trường bằng câu lệnh


$KERNEL=kernel7l
Khai báo hệ thống kiến trúc arm để sử dụng trình biên dịch hợp lí:
$sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
bcm2711_deconfig

Tại đây sẽ đều xuất hiện báo lỗi bison not found, ta sẽ cài đặt bison bằng
câu lệnh
$sudo apt-get install bison
Chờ đợi máy tính cài đặt

Ta gõ lại câu lệnh:


$ sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
bcm2711_deconfig
Câu lệnh dùng để khai báo hệ thống kiến trúc arm và trình biên dịch
File sẽ được lưu vào thư mục .config như trên
Để sửa config lại ta gõ lệnh
$ sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
menuconfig

* Bước 9:
Chọn những phần được đặt con trỏ trong hình:
Thay đổi tên ban đầu thành tên mk muốn để cho dễ nhớ:
Ấn ok và save lại:

Save vào file .config ấn ok rồi exit để quay trở lại màn hình terminal
* Bước 10: Tải makefile để biên dịch kernel
Gõ câu lệnh
$ sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
zImage modules dtbs
Việc tải makefile sẽ hơi lâu và có thể xuất hiện lỗi khôngo tìm được
module đích
Ta có thể gõ lại dòng lệnh trên để tải lại
Gõ thêm 2 dòng lệnh như hình cuối để kiểm tra có kết quả như trong hình
là việc biên dịch nhân nhúng Linux đã thành công.

4.1. Cài đặt Linux nhúng

Các bước chính thực hiện thực hiện:


Bước 1: Cài đặt bootloader (VD: U-Boot, Supervivi)
Bước 2: Cài đặt kernel
Bước 3: Cài đặt hệ thống file (root file system)
4.1.1. Cài đặt từ môi trường Window
Công cụ
• Phần mềm HyperTerminal: kết nối với KIT
micro2440 qua cổng COM
• Phần mềm DNW: kết nối với KIT micro2440 qua cổng USB
Cách thức
• Phần mềm HyperTerminal (giao tiếp với BIOS trên
Nor Flash qua cổng rs232) truyền c|c lệnh điều
khiển
• Phần mềm DNW trao đổi file
4.2. Lập trình ARM Linux

4.2.1. Lập trình giao tiếp USB


Quá trình nhận dạng thiết bị usb trên Linux
Khi có một thiết bị usb hợp lệ được cắm vào hệ thống Linux, cho dù nó có
driver hay không thì nó cũng vẫn được nhận diện (detect) bởi phần cứng ở tầng
nhân (kernel space) của hệ thống Linux mà đã được hỗ trợ giao thức usb. Hệ
thống có thể làm điều này là bởi vì khả năng của chính bản thân giao thức usb
đã được thiết kế trong đặc tả của nó. Cụ thể, việc phát hiện ra thiết bị usb cắm
vào được thực hiện bởi chip usb host controller (là thiết bị chủ động đường bus
của giao thức usb). USB host controller này sẽ thu thập và diễn giải các thông
tin ở tầng vật lý (low-level) đến các thông tin đặc tả giao thức USB ở tầng trên
(high-level). Các thông tin về thiết bị theo khuôn dạng qui định của giao thức
USB lại tiếp tục được đưa vào tầng usb core tổng quát (generic usb core) trong
tầng nhân (được điều khiển bởi usbcore driver). Chính điều này giúp cho các
thiết bị usb được hệ thống nhận diện ở tầng nhân, mặc dù nó có thể chưa có một
driver cụ thể nào cho chức năng của nó.
 Sau quá trình diễn ra ở tầng nhân này, sẽ đến nhiệm vụ của các drivers
hoặc interfaces hoặc applications (cái mà phụ thuộc vào các bản Linux khác
nhau) để tiếp tục nhận dạng ra thiết bị ở tầng người dùng (user space). Hình
dưới minh họa cho kiến trúc phân tầng từ trên xuống của hệ thống USB trên
Linux
Hình 4.2. Hệ thống USB trên Linux

Hình 4.3 Xem thông tin các thiết bị USB sử dụng lệnh lsusb
Hình 4.4. Xem thông tin đặc tả thiết bị USB

Hình 4.5. Mô hình biểu diễn tổng quan thiết bị USB


 
Hình 4.6. Thử nghiệm với usb driver pen_register

Hình 4.7. Xem thông tin về đặc tả thiết bị USB


Hình 4.8. Kết quả thử nghiệm với driver pen_info
Hình 4.9 Xem thông tin đặc tả của thiết bị USB Flash Drive
4.2.2. Lập trình driver trên Linux

Hình 4.10. Tương tác giữa thiết bị và driver


Hình 4.11. Các thành phần của driver thên Linux

Hình 4.12. Kiến trúc tổng quan nhân Linux


Hình 4.13. Xem các module sẵn có trên Linux

Hình 4.14. Các thao tác (nạp, gỡ) module trên Linux
Hình 5.1. Kiến trúc chung của họ vi điều khiển PSoC

Hình 5.2. Cấu tạo CPU


Hình 5.3. Hệ thống đồng hồ trong PSoC

Hình 5.4. Thao tác truy xuất cổng

Hình 5.5. Các lối vào tương tự


Hình 5.6. Truy cập các khối số

Hình 5.7. Kết nối thông qua bộ hợp kênh

Hình 5.8. Các khối số khả trình


Hình 5.9. Các nguồn đồng hồ

Hình 5.10. Mạch điện logic

Hình 5.11. Kết nối các đường dây vào ra


Hình 5.12. Các khối khả trình

Hình 5.13. Các khối tương tự

Hình 5.14. Các lối ra tương tự


Hình 5.15. Cung cấp đồng hồ cho các khối tương tự

Hình 5.16. Điện áp tham chiếu AGND trong PSoC

Hình 5.17. Các giá trị điện áp tham chiếu trong PSoC
Hình 5.18. Chế độ bơm điện áp SMP

You might also like