1. Trang chủ
  2. » Luận Văn - Báo Cáo

báo cáo bài tập lớn hệ điều hành nhúng đề tài thiết kế device driver rtc 1307 cho raspberry pi

29 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Thiết kế Device Driver RTC 1307 cho Raspberry Pi
Tác giả Trần Thị Thảo Anh, Phạm Đức Anh, Phạm Văn Thuận, Nguyễn Đình Phương, Đinh Anh Tuấn
Người hướng dẫn TS. Phạm Doãn Tĩnh
Trường học Trường Đại học Bách khoa Hà Nội, Viện Điện tử - Viễn thông
Chuyên ngành Hệ điều hành nhúng
Thể loại Báo cáo bài tập lớn
Năm xuất bản 2022
Thành phố Hà Nội
Định dạng
Số trang 29
Dung lượng 5,82 MB

Nội dung

Đừngnhầm lẫn RTC với điện toán thời gian thực, dù cùng được viết tắt bằng ba chữ cáigiống nhau nhưng nó không liên quan trực tiếp đến theo dõi mốc thời gian.Vấn đề thời gian là một vấn đ

Trang 1

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN ĐIỆN TỬ - VIỄN THÔNG

BÁO CÁO BÀI TẬP LỚN

HỆ ĐIỀU HÀNH NHÚNG

Đề tài: Thiết kế Device Driver RTC 1307 cho Raspberry Pi

Nhóm sinh viên thực hiện:

Trang 2

Giảng viên hướng dẫn: TS Phạm Doãn Tĩnh

Hà Nội, 8-2022

Trang 3

LỜI NÓI ĐẦU

Trong hệ thống IoT hiện nay, sự kết nối và phối hợp giữa các thiết bị là rất quantrọng Vậy làm sao để có thể kết nối được với các thiết bị khác, các thiết bị có tươngthích với nhau hay không, tốc độ truyền dữ liệu và độ chính xác như nào là những vấn

đề đáng được quan tâm hiện nay Vì vậy, nhóm em đã quyết định chọn đề tài module

đo thời gian thực để làm đề tài cho bài tập lớn lần này

Ngoài việc trau dồi các kiến thức về môn học Hệ điều hành nhúng qua lý thuyết và bàitập trên lớp, chúng em cũng mong muốn được áp dụng các kiến thức này vào các vấn

đề thiết thực và gần gũi trong thực tế

Trong quá trình thực hiện bài tập lớn của mình, dưới sự hướng dẫn của thầyPhạm Doãn Tĩnh, chúng em đã cố gắng hết sức để hoàn thiện một cách tốt nhất.Nhưng với kiến thức và sự hiểu biết có hạn nên sẽ không tránh khỏi những thiếu sótmong thầy và các bạn đóng góp ý kiến đề tài của nhóm em có thể hoàn thiện hơn

Em mong sẽ nhận được sự giúp đỡ, góp ý của thầy và các bạn để bài tập nhóm

có thể được hoàn thiện hơn, khắc phục được những nhược điểm hiện tại và phát triểnhơn nữa trong tương lai

Chúng em xin chân thành cảm ơn!

Trang 4

MỤC LỤC

LỜI NÓI ĐẦU i

DANH MỤC HÌNH VẼ 1

DANH MỤC BẢNG BIỂU 2

CHƯƠNG 1 TỔNG QUAN ĐỀ TÀI 3

1.1 Đặt vấn đề 3

1.2 Ý tưởng và mục tiêu 4

1.3 Yêu cầu hệ thống 5

1.3.1 Yêu cầu chức năng 5

1.3.2 Yêu cầu phi chức năng 5

1.4 Lập kế hoạch và phân công nhiệm vụ 5

CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 7

2.1 Device Drivers 7

2.1.1 Lý thuyết và vai trò của driver 7

2.1.2 Mô hình phân lớp theo chiều dọc 7

2.2 Raspberry Pi 4 8

2.3 Lý thuyết giao tiếp I2C 11

2.4 Các thành phần trong chuẩn giao tiếp I2C 11

2.5 RTC 1307 14

CHƯƠNG 3 THIẾT KẾ HỆ THỐNG 15

3.1 Tính toán và lựa chọn thiết bị phần cứng 15

3.1.1 Lựa chọn khối điều khiển và xử lý trung tâm 15

3.1.2 Tính toán và lựa chọn khối nguồn 17

3.2 Tổng kết linh kiện 17

3.3 Sơ đE hê F thống chi tiết 17

3.3.1 Kết nối giữa MCU Raspberry Pi 4 với RTC 18

Trang 5

3.4 Sơ đE trạng thái 20

CHƯƠNG 4 THỰC HIỆN VÀ KẾT QUẢ 21

4.1 Sản phẩm board mạch 21

4.2 Kết quả thực hiê Fn 22

4.3 Nhận xét và kết luận 24

4.4 Hướng phát triển trong tương lai 24

PHỤ LỤC 25

1 Thư viê Fn sQ dụng cho RASPBERRY PI 4 25

2 Mã nguEn của sản phẩm 25

TÀI LIỆU THAM KHẢO 33

Trang 6

DANH MỤC HÌNH ẢNH

Hình 1 Module đo thời gian thực RTC 1307 2

Hình 2 Raspberry Pi 3

Hình 3 Mô hình phân lớp theo chiều dọc 7

Hình 4 Các chân kết nối của Pi 4 8

Hình 5 Cấu hình chân Raspberry Pi 4 8

Hình 6 Các hỗ trợ thiết bị ngoại vi 9

Hình 7 Chuẩn giao tiếp I2C 10

Hình 8 Cách kết nối giao thức I2C 11

Hình 9 Cách thức truyền dữ liệu trong giao thức I2C 11

Hình 10 Điều kiện bắt đầu 12

Hình 11 Điều kiện kết thúc 13

Hình 12 Module Real Time Clock 13

Hình 13 Raspberry Pi 4 Model B 15

Hình 14 Nguồn cho vi điều khiển 15

Hình 15 Sơ đồ hệ thống chi tiết 16

Hình 16 Sơ đồ trạng thái của hê t thống 22

Hình 17 Ảnh mạch thật của nhóm 23

Hình 18 Chạy lần đầu cần khởi tạo thời gian 23

Hình 19 Hình ảnh hiển thị quá trình chạy 24

Trang 7

DANH MỤC BẢNG BIỂU

Bảng 1 Phân công nhiệm vụ 5Bảng 2 Bảng linh kiện 16Bảng 3 Sơ đồ kết nối chân giữa SSD1306 với MCU 17

Trang 8

CHƯƠNG 1 TỔNG QUAN ĐỀ TÀI

1.1 Đặt vấn đề

Đồng hồ thời gian thực (tiếng Anh: real-time clock, viết tắt: RTC) là một thiết bị điện

tử (thường ở dạng mạch tích hợp) theo dõi thời gian đã trôi qua trên thực tế

Mặc dù thuật ngữ này thường đề cập đến các thiết bị trong máy tính cá nhân, máy chủ

và hệ thống nhúng, RTC có mặt trong hầu hết mọi thiết bị điện tử cần giữ thời gianchính xác, khi cả khi các thiết bị điện tử đó không được cấp nguồn

Thuật ngữ đồng hồ thời gian thực được sử dụng để tránh nhầm lẫn với đồng hồ điện tửkhác sử dụng xung nhịp đồng hồ (clock signal) là tín hiệu cho các thiết bị điện tử kỹthuật số, và không tự tính được thời gian bằng các đơn vị con người sử dụng Đừngnhầm lẫn RTC với điện toán thời gian thực, dù cùng được viết tắt bằng ba chữ cáigiống nhau nhưng nó không liên quan trực tiếp đến theo dõi mốc thời gian

Vấn đề thời gian là một vấn đề rất quan trọng trong cuộc sống hiện nay, nên chúng emquyết định chọn module đo thời gian thực để làm đề tài ở Hình 1 như sau:

Hình 1 Module đo thời gian thực RTC 1307

Device driver hay trình điều khiển thiết bị là một chương trình máy tính vận hành hoặcđiều khiển một loại thiết bị ngoại vi cụ thể được gắn vào một con chip Driver cung

Trang 9

cấp giao diện phần mềm cho các thiết bị phần cứng, cho phép hệ điều hành (nếu có) vàcác chương trình khác truy cập các chức năng phần cứng mà không cần biết chi tiếtchính xác về phần cứng đang được sử dụng.

Có thể nói nếu thiếu device driver thì giữa các thiết bị với nhau không giao tiếp được,giữa người dùng và phần cứng thiết bị không thể tương tác được

Raspberry Pi là cái máy tính giá 35USD kích cỡ như iPhone và chạy HĐH Linux Vớimục tiêu chính của chương trình là giảng dạy máy tính cho trẻ em Được phát triển bởiRaspberry Pi Foundation – là tổ chức phi lợi nhuận với tiêu chí xây dựng hệ thống mànhiều người có thể sử dụng được trong những công việc tùy biến khác nhau

Hình 2 Raspberry Pi

Hiện nay, Raspberry Pi được tích hợp rất nhiều chức năng như chạy bằng Linux vớicác tiện ích như lướt web , môi trường Desktop và các nhiệm vụ khác Sinh viên hoàntoàn có thể lập trình thay đổi, cài đặt môi trường mô phỏng lại hệ thống máy tínhthông thường Tuy nhiên, vẫn có nhiều thiết bị mà Raspberry Pi chưa thể giao tiếpđược

1.2 Ý tưởng và mục tiêu

Xuất phát từ vấn đề thực tế, mục tiêu của nhóm tập trung vào việc viết và cài đặtDriver cho Raspberry Pi sử dụng module thời gian thực, hiển thị lên… Giúp ngườidùng sử dụng trong các hệ thống Iot với các thông tin được hiển thị một cách trựcquan giúp người dùng dễ dàng nắm bắt

1.3 Yêu cầu hệ thống

Hệ thống cần chạy ổn định, độ chính xác cao và độ trễ thấp

Trang 10

1.3.1 Yêu cầu chức năng

Raspberry Pi kết nối được và lấy dữ liệu đến RTC 1307 thành công, hiển thị thôngtin không bị sai lệch

1.3.2 Yêu cầu phi chức năng

Bên cạnh các yêu cầu chức năng ở trên, sản phẩm cuối cùng cần phải đảm bảo một sốyêu cầu như:

Mạch hoạt động ổn định, chính xác, tiêu thụ điện năng thấp

Sản phẩm nhỏ gọn, kích thước mạch không quá lớn, dễ dàng lắp đặt

Độ trễ lấy thời gian là 1s

1.4 Lập kế hoạch và phân công nhiệm vụ

Nhóm thực hiê tn phân chia công viê tc và phân công nhiê tm vụ, phân tích chi tiết kếhoạch thực hiê tn

Phân tích yêu cầu hệ thống Thảo Anh + Phương

Tìm hiểu Device Driver Thuận + Phương + Tuấn

Lắp mạch và Test Phương + Đức Anh + Thảo Anh

Bảng 1 Phân công nhiệm vụCHƯƠNG 2 CƠ SỞ LÝ THUYẾT

Trang 11

2.1 Device Drivers

2.1.1 Lý thuyết và vai trò của driver

Driver là một trình điều khiển có vai trò điều khiển, quản lý, giám sát một thực thể nào

đó dưới quyền của nó Bus driver làm việc với một đường bus, device driver làm việcvới một thiết bị (chuột, bàn phím, màn hình, đĩa cứng, camera, …)

Các device driver để vận hành các thiết bị, mang đặc trưng của từng thiết bị xác định.Ngoài ra, mục đích quan trọng của các driver thiết bị là cung cấp một giao diện trừutường hóa cho người sử dụng, tức là cung cấp một giao diện lên tầng trên của hệ điềuhành Một cách tổng quan, một driver sẽ bao gồm 2 phần quan trọng:

Giao tiếp với thiết bị (Device-specific)

Giao tiếp với hệ điều hành (OS-specific)

Thành phần giao tiếp với thiết bị (device-specific) của một driver là giống nhau đốivới tất cả các hệ điều hành Nó có thể hiểu và giải mã các thông tin về thiết bị (chi tiết

kỹ thuật, kiểu thao tác, hiệu năng, cách lập trình giao tiếp với thiết bị, …)

Thành phần giao tiếp với hệ điều hành (OS-specific) gắn kết chặt chẽ với các cơ chếcủa hệ điều hành, và do vậy sẽ là khác nhau giữa một driver trên Linux và một drivertrên Windows, hoặc MacOS, …

2.1.2 Mô hình phân lớp theo chiều dọc

Trên Linux, device driver cung cấp một giao diện “system call” (giao diện gọi các hàm

hệ thống) đến tầng ứng dụng cho người dùng; đây được coi là một ranh giới giữa tầngnhân (kernel space) và tầng người dùng (user space) của Linux Mô hình phân tầngđược chỉ ra như hình dưới đây:

Trang 12

Hình 3 Mô hình phân lớp theo chiều dọc

2.2 Raspberry Pi 4

Raspberry là gì ?

Raspberry pi 4 là một máy tính cỡ nhỏ sử dụng hệ điều hành Linux Đây là loạimáy tính cỡ nhỏ được sử dụng chủ yếu để chạy các chương trình lớn nhằm đạt tínhiệu đầu ra nhanh chóng

Có tất cả các hệ thống truyền thông có dây và không dây mới nhất được yêu cầu sửdụng trong hầu hết các dự án điều khiển thông minh

Raspberry Pi 4 là vi xử lý 4 lõi và có ba phiên bản khác nhau có ba dung lượngRAM khác nhau Pi 4 sử dụng mini HDMI và hỗ trợ hai cổng cho hai màn hình4K

Trang 13

Hình 4 Các chân kết nối của Pi 4 Cấu hình chân Raspberry Pi

Hình 5 Cấu hình chân Raspberry Pi 4

Mô tả chân Raspberry Pi :

Raspberry Pi 4 có thể sử dụng trong hệ thống nhúng bên ngoài để giao tiếp tínhiệu

Có tổng cộng 40 chân , trong đó 28 chân là chân GPIO và các chân còn lại là chânnguồn (Power in, Power out, Ground)

Các chân GPIO không chỉ thực hiện các chức năng I / O đơn giản mà còn hỗ trợgiao thức UART, SPI và I2C

Trang 14

Các giao thức này dành riêng cho mọi chân.

Module giao tiếp dữ liệu nối tiếp Raspberry Pi

Raspberry có thể truyền dữ liệu bằng các cách sau:

USB

PoE Header

Trang 15

bị hiển thị, thiết bị IoT, EEPROMs, v.v …

Đây là một loại giao thức giao tiếp nối tiếp đồng bộ

Hình 7 Chuẩn giao tiếp I2C

2.4 Các thành phần trong chuẩn giao tiếp I2C

Tổng quan về I2C:

Bus I2C chỉ gồm hai dây SCL và SDA

Dữ liệu được truyền đi được gửi qua dây SDA và được đồng bộ với tín hiệu đồng hồ (clock) từ SCL

Tất cả các thiết bị / IC trên mạng I2C được kết nối với cùng đường SCL và SDA

Các thiết bị kết nối với bus I2C được phân loại hoặc là Master hoặc là Slave

Trang 16

Ở bất cứ thời điểm nào thì chỉ có duy nhất một thiết bị Master ở trang thái hoạt động trên bus I2C Nó điều khiển đường tín hiệu đồng hồ SCL và quyết định hoạt động nào sẽ được thực hiện trên đường dữ liệu SDA.

Hình 8 Cách kết nối giao thức I2C

Giao thức truyền dữ liệu

Giao thức sau đây (tập hợp các quy tắc) được theo sau bởi thiết bị Master và các thiết bị Slave để truyền dữ liệu giữa chúng

Dữ liệu được truyền giữa thiết bị Master và các thiết bị Slave thông qua một đường dữ liệu SDA duy nhất, thông qua các chuỗi có cấu trúc gồm các số 0 và

1 (bit)

Mỗi chuỗi số 0 và 1 được gọi là giao dịch (transaction) và dữ liệu trong mỗi giao dịch có cấu trúc như sau:

Hình 9 Cách thức truyền dữ liệu trong giao thức I2C

Một số chi tiết về I2C

Trang 17

Điều kiện bắt đầu (Start Condition) SDA từ mức điện áp cao xuống mức điện áp thấp trước khi đường SCL chuyển từ cao xuống thấp.

Khi điều kiện bắt đầu được gửi bởi thiết bị Master, tất cả các thiết bị Slave đều hoạtđộng ngay cả khi chúng ở chế độ ngủ (sleep mode) và đợi bit địa chỉ

Hình 10 Điều kiện bắt đầu

Khối địa chỉ (Nó bao gồm 7 bit )

Bit Read / Write (Bit này xác định hướng truyền dữ liệu)

Bit ACK / NACK (Bit kiểm tra)

Khối dữ liệu (Bao gồm 8 bit và chúng được thiết lập bởi bên gửi

Điều kiện kết thúc (Stop condition) Đường SDA từ mức điện áp thấp sang mức điện áp cao trước khi đường SCL chuyển từ cao xuống thấp

Trang 18

Hình 11 Điều kiện kết thúc

2.5 RTC 1307

Mạch thời gian thực RTC DS1307 được sử dụng để cung cấp thông tin thời gian: ngày,tháng, năm, giờ, phút, giây, cho vi điều khiển qua giao tiếp I2C, mạch tích hợp sẵnpin backup để duy trì thời gian trong trường hợp không cấp nguồn, ngoài ra mạch cònđược tích hợp thêm IC EEPROM AT24C32 để lưu trữ thông tin khi cần, thích hợp chocác ứng dụng điều khiển hoặc đồng bộ dữ liệu thời gian thực RTC

Hình 12 Module Real Time Clock Thông số kĩ thuật

IC chính: RTC DS1307 + EEPROM AT24C32

Nguồn cung cấp: 5VDC

Giao tiếp: I2C

Trang 19

Lưu trữ và cung cấp các thông tin thời gian thực: ngày, tháng, năm, giờ, phút, giây,

Có pin backup duy trì thời gian trong trường hợp không cấp nguồn

Có ngõ ra tần số 1Hz

Kích thước: 27 x 28 x 8.4mm

Một số tính năng quan trọng của DS1307 là:

Khả năng tạo sóng vuông có thể lập trình

Dòng điện thấp, dưới 500mA trong chế độ sao lưu pin

Khả năng thiết lập ngày đến năm 2100

Sử dụng chuẩn giao tiếp I2C

Một số chi tiết của DS1307:

Module DS1307 sử dụng pin CR2023 3 volt Bộ nhớ EEPROM 24c32 nhúng trên mô-đun này có thể tiết kiệm 32kb dữ liệu

Ngoài ra, có thể đo nhiệt độ môi trường bằng cách sử dụng cảm biến DS18B20

đã được tích hợp sẵn trên board mạch

Đọc giá trị điện áp của pin từ chân BAT

Trang 20

CHƯƠNG 3 THIẾT KẾ HỆ THỐNG

3.1 Tính toán và lựa chọn thiết bị phần cứng

3.1.1 Lựa chọn khối điều khiển và xQ lý trung tâm

Theo yêu cầu chức năng của sản phẩm, ta có thể xác định các yêu cầu cho khối xử

lý trung tâm như sau:

Tối thiểu 5 GPIO ( 5 GPIO OUTPUT )

Tiết kiệm năng lượng

Trang 21

3.1.2 Lựa chọn khối nguEn

Do các linh kiện có điện áp sử dụng từ 3.3–5V, yêu cầu sản phẩm đặt trong các không

gian kín nên adapter 5V-2A như Error: Reference source not found là một lựa chọn

phù hợp vừa đảm bảo về mặt công suất cũng như nơi sử dụng

Hình 14 Nguồn cho vi điều khiển

3.2 Tổng kết linh kiện

Các linh kiện được nhóm em thiết kế và sử dụng được thể hiện ở bảng dưới đây:

3.3 Sơ đồ hê € thống chi tiết

Dựa trên các linh kiện hiện có, nhóm đưa ra sơ đồ hê t thống kết nối giữa các khối trên

từ đó phân tích chi tiết kết nối giữa các khối với nhau

Trang 22

Hình 15 Sơ đồ hệ thống chi tiết

3.3.1 Kết nối giữa MCU Raspberry Pi 4 với RTC

Như đã trình bày ở trên, trong đề tài này nhóm quyết định sử dụng RTC 1307 để hiểnthị dữ liệu từ Pi 4

Bảng 3 Sơ đồ kết nối chân giữa RTC 1307 với MCU

3.3.1.2 Xây dựng Driver

Struct i2c_driver

I2C protocol driver được dại diện trong kernel bằng struct i2c_driver I2C clientdevice được đại diện bằng struct i2c_client

Trang 23

Struct i2c_driver được định nghĩa như sau:

struct i2c_driver {

/* module giao diện driver tiêu chuẩn */

(*probe)(int struct i2c_client *, const struct

i2c_device_id *);

(*remove)(int struct i2c_client *);

/* driver model interfaces không liên quan đ Ān liệt kê*/

void (*shutdown)(struct i2c_client *);

struct device_driver driver;

const struct i2c_device_id *id_tablex`;

Khởi tạo device

Thiết lập thông số device

Đăng kí kernel framework

Hàm remove()

Nguyên mẫu hàm remove() đơn giản như sau:

static int foo_remove(struct i2c_client *client)

Hàm remove() cũng được truyền vào một tham số là struct

i2c_client *client giống như hàm probe() (việc truyền tham số này

do kernel đảm nhận) Nhiệm vụ của hàm remove() là giải phóng những gì hàm probe() cấp phát, bao gồm những dữ liệu riêng cho device

Khởi tạo và đăng kí driver I2C

Trang 24

Như ở bài Platform Driver, kernel cung cấp cho chúng ta mộ họ hàm

là module_*_driver, dành cho việc, đăng kí/hủy đăng kí driver với hệ

thống trong các hàm init/exit Với I2C thì hàm được sử dụng là:

module_i2c_driver(ds1307_driver);

Driver và device provisioning

Như cơ chế match giữa driver và driver, ta cần cấp mảng device_id để thông báo những device mà driver có thể điều khiển Với các I2C device thì mảng struct là i2c_device_id Struct này được định nghĩa như sau:

Để hệ thống I2C biết về những device cần điều khiển thì ta sử dụng

macro MODULE_DEVICE_TABLE để thông báo

Giao tiếp với client.

Bản chất giao tiếp I2C chỉ là việc thao tác với các thanh ghi (ghi/đọc thông tin)

Hệ thống I2C trong linux cung cấp cho ta 2 loại API, loại thứ nhất là loại truyền thống, dành riêng cho I2C, loại thứ 2 sử dụng giao tiếp SMBUS device, loại này tương thích với giao tiếp I2C thông thường

Giao tiếp I2C truyền thống

Ngày đăng: 29/05/2024, 17:53

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN