Tải bản đầy đủ (.pdf) (28 trang)

đề tài xây dựng spi device driver cho ssd1306 oled trên raspberrypi

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (6.27 MB, 28 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b> ĐẠI HỌC BÁCH KHOA HÀ NỘITrường Điện – Điện tử</b>

<b>BÁO CÁO BÀI TẬP LỚNHỌC PHẦN: HỆ ĐIỀU HÀNH</b>

<b>Đề tài: Xây dựng SPI Device Driver cho SSD1306 Oled trên RaspberryPi GVHD: TS. Nguyễn Thanh Bình</b>

<b> Nhóm 2- Mã lớp:145603</b>

<b> Danh sách các sinh viên:</b>

<b>1. Trần Trọng Quyền -202037592. Đàm Minh Qn – 202035383. Dỗn Đình Vũ – 202036484. Đồn Xn Thắng - 20203576</b>

<b>Hà Nội, 2023</b>

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b>Mục lục</b>

<b>CHƯƠNG 1. TỔNG QUAN...3</b>

<i><b>I.Lý do chọn đề tài...3</b></i>

<i><b>II.Cơ sở lý thuyết...3</b></i>

<b>1.Tìm hiểu về cấu hình phần cứng của Raspberry pi 3B+...3</b>

<b>2.Lý thuyết cơ bản về hệ điều hành...5</b>

<i><b>2.1Giới thiệu chung về hệ điều hành...5</b></i>

<i><b>2.2Các chức năng của hệ điều hành...5</b></i>

<i><b>2.3Nhiệm vụ của hệ điều hành...5</b></i>

<b>3.Tìm hiểu về Driver và Controller...6</b>

<b>4.SSD1306 OLED...7</b>

<b>5.Tìm hiểu về chuẩn giao tiếp SPI...10</b>

<i><b>5.1Giới thiệu về SPI...10</b></i>

<i><b>5.2Giao tiếp SPI hoạt động như nào?...10</b></i>

<b>CHƯƠNG 2. Xây dựng SPI Device Driver...15</b>

2. SPI protocol Driver in Linux Kernel...19

<i><b>2.1Khai báo SPI Controller driver...19</b></i>

<i><b>2.2 Thêm thiết bị slave vào SPI Controller...19</b></i>

<i><b>2.3 Cấu hình SPI...21</b></i>

<i><b>2.4 Truyền nhận dữ liệu giữa master và slave...22</b></i>

<i><b>2.5 Remove thiết bị slave...22</b></i>

<i><b>3 Testing the Device driver……….24</b></i>

<i><b>4 Nguồnthamkhảo………...26</b></i>

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>CHƯƠNG 1. TỔNG QUAN</b>

Với yêu cầu làm bài tập lớn mơn Hệ điều hành, nhóm chúng em đã tìm hiểu vàđã chọn đề tài “<i><b>Xây dựng SPI Device Driver cho SSD1306 Oled trên RaspberryPi</b></i>”vì đề tài này giúp chúng em có thể thực hành cách kiến thức hệ điều hành đã được họcở trên lớp và hiểu thêm về cách hệ điều hành quản lý các thiết bị ngoại vi, phần cứngthơng qua driver. Cùng với đó là niềm đam mê với embedded chúng em có thể họcthêm được nhiều hơn kiến thức về hệ thống nhúng qua việc học cách cấu hình từ cơbản nhất cho giao tiếp SPI và làm việc trực tiếp với thanh ghi của thiết bị. Việc xâydựng một driver không chỉ là việc áp dụng kiến thức mà còn là một thách thức sángtạo, chúng em muốn thử sức mình đặt các vấn đề và tìm kiếm giải pháp cho chúng.

<b>1. Tìm hiểu về cấu hình phần cứng của Raspberry pi 3B+</b>

Raspberry Pi có cấu tạo giống như một máy tính thu nhỏ

CPU: “Trái tim” của board mạch. Raspberry Pi 3B+ sử dụng vi xử lýBCM2837B0 của Broadcom. Đây là loại SoC (system on chip) tức là trên chipnày tích hợp cùng lúc:

<b>CPU: 1.4 GHz ,4 nhân, kiến trúc ARM Cortex-A7. quad-core A53 (ARMv8)</b>

64-bit nên Raspberry Pi 2 có thể chạy được Ubuntu core và Windows 10 coremượt mà. o

<b>SD RAM: 1 GB LPDDR2 SDRAM</b>

<b>CONNECT: 2.4GHz and 5GHz IEEE 802.11 b/g/n/ac wireless LAN,</b>

Bluetooth 4.2, BLE, Gigabit Ethernet over USB 2.0 (Tối đa 300Mbps).Khe cắm thẻ micro SD: Có thể nhận thấy sẽ khơng có ổ cứng trên Raspberry Pivà thay vào đó là thẻ nhớ SD. Tất cả dữ liệu sẽ được lưu trữ trên thẻ nhớ này.Cần dùng ít nhất là thẻ 4GB class 4 (4MB/s) cho Raspberry Pi (khuyên dùngthẻ 8GB class 10). •

Cổng USB: Raspberry Pi 2 có 4 cổng USB 2.0. Đủ để bạn cắm các ngoại vicần thiết như chuột, bàn phím và usb wifi. •

Cổng Ethernet: Model 2 có cổng Ethernet chuẩn RJ45

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

Cổng HDMI: Dùng để truyền tín hiệu Video và Audio số. Có tới 14 chuẩnvideo được hỗ trợ và tín hiệu HDMI có thể dễ dàng chuyển đổi thành cácchuẩn khác như DVI, RCA, hoặc SCART. •

Ngõ ra Audio-Video: Ngõ ra này là giắc cắm chuẩn 3.5mm, hỗ trợ cho ngườidùng không có màn hình hỗ trợ HDMI. Âm thanh và hình ảnh lấy ra từ cổngnày có chất lượng kém hơn một chút so với từ cổng HDMI.

Cổng cấp nguồn Micro USB: Một trong những điều đầu tiên có thể nhận thấylà Raspberry Pi khơng có nút nguồn. Micro USB được chọn làm cổng cấpnguồn. Nguồn cấp cho Raspberry Pi là 5v điện áp (bắt buộc) và dòng nên lớnhớn 1A. Cấp nguồn quá 5v sẽ rất dễ làm cháy board mạch.

Cổng DSI (Display Serial Interface): Cổng này dùng để kết nối với LCD hoặcmàn hình OLED.

Cổng CSI (Camera Serial Interface): Cổng này dùng để kết nối với modulecamera riêng của Raspberry Pi. Module này thu được hình ảnh chất lượng lênđến 1080p.

GPIO (General Purpose Input and Output): Giống như các chân của vi điềukhiển, các IO này của Raspberry Pi cũng được sử dụng để xuất tín hiệu ra led,thiết bị… hoặc đọc tín hiệu vào từ các nút nhấn, cơng tắc, cảm biến… Ngồi racịn có các IO tích hợp các chuẩn truyền dữ liệu UART, I2C và SPI

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

<b>2. Lý thuyết cơ bản về hệ điều hành</b>

<b>2.1Giới thiệu chung về hệ điều hành</b>

Hệ điều hành là một phần mềm chạy trên máy tính và các thiết bị di động, dùng đểđiều hành, quản lý các thiết bị phần cứng và các tài nguyên phần mềm trên máy tính,và các thiết bị di động.

Hệ điều hành đóng vai trị trung gian trong việc giao tiếp giữa người sử dụng và phầncứng máy tính, cung cấp một mơi trường cho phép người sử dụng phát triển và thựchiện các ứng dụng của họ một cách dễ dàng.

<b>2.2Các chức năng của hệ điều hành</b>

Quản lý quá trình (process management). Quản lý bộ nhớ (memory mangement).Quản lý hệ thống lưu trữ.

Giao tiếp với người dùng (user interaction)

Điều khiển và quản lý trực tiếp các phần cứng như bo mạch chủ, bo mạch đồ họa vàbo mạch âm thanh, ...

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

Thực hiện một số thao tác cơ bản trong máy tính như các thao tác đọc, viết tập tin,quản lý hệ thống tập tin (file system) và các kho dữ liệu. –

Cung ứng một hệ hệ thống giao diện sơ khai cho các ứng dụng thường là thông quamột hệ thống thư viện các hàm chuẩn để điều hành các phần cứng mà từ đó các ứngdụng có thể gọi tới.

Cung ứng một hệ thống lệnh cơ bản để điều hành máy. Các lệnh này gọi là lệnh hệthống (system command).

Ngoài ra hệ điều hành, trong vài trường hợp, cũng cung cấp các dịch vụ cơ bản chocác phần mềm ứng dụng thông thường như chương trình hd duyệt wep, chương trìnhsoạn thảo văn bản...

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

<b>3. Tìm hiểu về Driver và Controller.</b>

<b>Khái niệm về Driver : Driver là một phần mềm, gồm các lệnh, hướng dẫn CPU cách</b>

tương tác với thiết bị. Các thiết bị có thể là chuột, bàn phím, ổ cứng, card mạng, loa,màn hình,…

<b>Nguyên lý hoạt động của Driver : Driver hoạt động bằng cách cung cấp giao diện</b>

trừu tượng giữa hệ điều hành và thiết bị phần cứng. Khi một ứng dụng hoặc hệ thốngyêu cầu truy cập vào một thiết bị cụ thể, hệ điều hành sẽ giao tiếp với driver tương ứngđể thực hiện các thao tác mong muốn. Driver sau đó sẽ tạo ra các tín hiệu và lệnh cầnthiết để điều khiển thiết bị phần cứng sao cho nó hoạt động theo u cầu.

<b>Ví dụ: Giả sử bạn muốn in tài liệu từ máy tính của mình. Khi bạn chọn in trong ứng </b>

dụng văn bản, hệ điều hành sẽ giao tiếp với driver máy in tương ứng. Driver máy in sẽchuyển dữ liệu văn bản sang ngơn ngữ máy in hiểu (ví dụ: PostScript hoặc PCL), sau đó gửi lệnh đến máy in để in tài liệu theo yêu cầu. Driver máy in sẽ điều khiển các thành phần của máy in như trống, mực in, và khay giấy để đảm bảo in ấn đúng cách.

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

Tuy nhiên, các thiết bị này không được nối trực tiếp với CPU, bởi vì: • Hệ thống có nhiều thiết bị, nhưng số lượng chân của CPU hữu hạn. • Tốc độ làm việc của các thiết bị thấp hơn nhiều so với CPU.

<b>Chính vì vậy, các thiết bị kết nối với CPU thông qua một thiết bị khác, gọi là bộ điềukhiển (device controller</b>). Sau đây là khái niệm về controller:

<b>Controller</b> devices là các phần cứng hoặc linh kiện điện tử được sử dụng để quản lý và điềukhiển các phần khác của máy tính. Các controller device đóng vai trị quan trọng trong việckết nối và điều khiển các thiết bị phần cứng như ổ cứng, bộ nhớ RAM, card mạng, card đồhọa, và nhiều thiết bị ngoại vi khác.

<b>4. SSD1306 OLED</b>

Đơi nét về <b>SSD1306 OLED</b>:

- SSD1306 là trình điều khiển CMOS OLED/PLED một chip có bộ điều khiển dành cho hệthống hiển thị đồ họa ma trận điểm đi-ốt phát quang hữu cơ/polymer. Nó bao gồm 128 phânđoạn và 64 lệnh.

- SSD1306 tích hợp điều khiển độ tương phản, RAM hiển thị và bộ dao động, giúp giảm sốlượng linh kiện bên ngồi và tiêu thụ năng lượng. Nó có điều khiển độ sáng 256 bước. Dữliệu/Lệnh được gửi từ MCU chung thông qua giao diện song song tương thích 6800/8000series có thể lựa chọn bằng cách sử dụng phần cứng, giao diện I2C hoặc giao diện SerialPeripheral Interface (Giao diện ngoại vi tuần tự).

- Nó phù hợp cho nhiều ứng dụng di động nhỏ gọn, chẳng hạn như màn hình phụ của điệnthoại di động, máy nghe nhạc MP3 và máy tính, v.v.

- Điện áp hoạt động của bộ điều khiển SSD1306 là từ 1,65V đến 3,3V trong khi tấm nềnOLED yêu cầu điện áp nguồn 7V đến 15V. Tất cả các yêu cầu năng lượng khác nhau này đềuđủ sử dụng mạch bơm sạc bên trong . Điều này giúp bạn có thể dễ dàng kết nối nó với bất kỳbộ vi điều khiển logic 5V nào mà không cần sử dụng bất kỳ bộ chuyển đổi mức logic nào.-Bản đồ bộ nhớ SSD1306 OLED:

o Dù kích thước của mơ-đun OLED là bao nhiêu, trình điều khiển SSD1306 đềucó bộ nhớ RAM dữ liệu đồ họa tích hợp 1KB (GDDRAM) cho màn hình đểlưu giữ mẫu bit cần hiển thị. Khu vực bộ nhớ 1KB này được tổ chức thành 8trang (từ 0 đến 7).

o Mỗi page chứa 128 cột/đoạn (khối từ 0 đến 127). Và mỗi cột có thể lưu trữ 8bitdữ liệu (từ 0 đến 7).

<b>o Ta có: 8 trang x 128 đoạn x 8bit dữ liệu = 8192 bit = 1024 byte = bộ nhớ1KB</b>

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

o Dưới đây là <b>thông số kỹ thuật OLED SSD1306</b> hoàn chỉnh:

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

Nguồn: embetronicx.com

o 1 số lệnh cơ bản trong SSD1306:

Nguồn: embetronicx.com

<b>o Dữ liệu: Dữ liệu được ghi trực tiếp vào màn hình OLED. Chúng ta có thể in </b>

bất cứ thứ gì chúng ta muốn bằng cách sử dụng OLED SSD1306 này

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

<b>5. Tìm hiểu về chuẩn giao tiếp SPI5.1Giới thiệu về SPI</b>

<b>SPI (Serial Peripheral Interface) là một chuẩn truyền thông nối tiếp tốc độ cao do hãng</b>

Motorola đề xuất. Đây là kiểu truyền thơng Master-Slave, trong đó có 1 chip Master điều phốiq trình truyền thơng và các chip Slave được điều khiển bởi Master vì thế truyền thông chỉxảy ra giữa Master và Slave. SPI là 1 cách truyền song công (full duplex) nghĩa là tại 1 thờiđiểm, q trình truyền và nhận có thể xảy ra đồng thời.

<b>5.2Giao tiếp SPI hoạt động như nào?Cấu tạo</b>

Sử dụng 4 đường giao tiếp nên đôi khi được gọi là chuẩn truyền thơng “ 4 dây”. 4 đườngđó là :

o SCK (Serial Clock): Thiết bị Master tạo xung tín hiệu SCK và cung cấp cho Slave.Xung này có chức năng giữ nhịp cho giao tiếp SPI. Mỗi nhịp trên chân SCK báo 1bit dữ liệu đến hoặc đi → Quá trình ít bị lỗi và tốc độ truyền cao.

o MISO (Master Input Slave Output): Tín hiệu tạo bởi thiết bị Slave và nhận bởithiết bị Master. Đường MISO phải được kết nối giữa thiết bị Master và Slave.o MOSI (Master Output Slave Input): Tín hiệu tạo bởi thiết bị Master và nhận bởi

thiết bị Slave. Đường MOSI phải được kết nối giữa thiết bị Master và Slave.

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

o SS (Slave Select): Chọn thiết bị Slave cụ thể để giao tiếp. Để chọn Slave giao tiếpthiết bị Master chủ động kéo đường SS tương ứng xuống mức 0 (Low). Chân nàyđơi khi cịn được gọi là CS (Chip Select). Chân SS của vi điều khiển (Master) cóthể được người dùng tạo bằng cách cấu hình 1 chân GPIO bất kỳ chế độ Output.

<b>Khung truyền SPI</b>

Mỗi chip Master hay Slave đều có một thanh ghi dữ liệu 8 bits.

Quá trình truyền nhận giữa Master và Slave xảy ra đồng thời sau 8 chu kỳ đồng hồ,một byte dữ liệu được truyền theo cả 2 hướng

Quá trình trao đổi dữ liệu bắt đầu khi Master tạo 1 xung clock từ bộ tạo xung nhịp(Clock Generator) và kéo đường SS của Slave mà nó truyền dữ liệu xuống mức Low.Cứ 1 xung clock, Master sẽ gửi đi 1 bit từ thanh ghi dịch (Shift Register) của nó đếnthanh ghi dịch của Slave thông qua đường MOSI. Đồng thời Slave cũng gửi lại 1 bitđến cho Master qua đường MISO.Như vậy sau 8 chu kỳ clock thì hồn tất việc truyềnvà nhận 1 byte dữ liệu.

Dữ liệu của 2 thanh ghi được trao đổi với nhau nên tốc độ trao đổi diễn ra nhanh vàhiệu quả.

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

Lưu ý: Trong giao tiếp SPI, chỉ có thể có 1 Master nhưng có thể 1 hoặc nhiều Slavecùng lúc. Ở trạng thái nghỉ, chân SS của các Slave ở mức 1, muốn giao tiếp với Slavenào thì ta chỉ việc kéo chân SS của Slave đó xuống mức 0.

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

o Mode 0 (mặc định) – xung nhịp của đồng hồ ở mức thấp (CPOL = 0) và dữ liệu đượclấy mẫu khi chuyển từ thấp sang cao (cạnh lên) (CPHA = 0).

o Mode 1 - xung nhịp của đồng hồ ở mức thấp (CPOL = 0) và dữ liệu được lấy mẫu khichuyển từ cao sang thấp (cạnh xuống) (CPHA = 1).

o Mode 2 - xung nhịp của đồng hồ ở mức cao (CPOL = 1) và dữ liệu được lấy mẫu khi chuyển từ cao sang thấp (cạnh lên) (CPHA = 0).

o Mode 3 - xung nhịp của đồng hồ ở mức cao (CPOL = 1) và dữ liệu được lấy mẫu khi chuyển từ thấp sang cao (cạnh xuông) (CPHA = 1).

<b>Các sơ đồ kết nối SPI1 thiết bị Master và 1 thiết bị Slave</b>

<b>1 thiết bị Master và nhiều thiết bị Slavea. Chế độ độc lập</b>

Ở chế độ này, mỗi thiết bị Slave kết nối với Master được quy định riêng bởinhững chân SS khác nhau. Khi thiết bị Master muốn giao tiếp với Slave nào thìkéo chân SS tương ứng xuống mức 0, những chân SS còn lại giữ ở mức 1.

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

<b>b. Chế độ dây truyền</b>

Trong cấu hình chế độ dây truyền, chỉ có một đường Slave Select được kết nối với tất cả cácSlave. MOSI của Master được kết nối với MOSI của Slave 1. MISO của Slave 1 được kết nốivới MOSI của Slave 2 và cứ thế nối tiếp… MISO của Slave cuối cùng được kết nối với MISOcủa Master.

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

CHƯƠ NG 2. Xây d ng SPI Device Driverự

<b>I.Thiết kế hệ thống1. Tổng quan về hệ thống </b>

Ở đây chúng ta cần phải cấu hình hệ thống để Raspberry Pi có thể giao tiếp vớimàn hình Oled bằng giao thức SPI với cổng SPI1 bằng cách kết nối chân của oledvà chân GPIO của Pi.

Hệ thống bao gồm các thành phần sau:

<b>Raspberry Pi: Là master chịu trách nhiệm điều khiển slave (oled) hiện thị</b>

các kí tự, hình ảnh mong muốn.

<b>Oled: Với vai trò là slave thực hiện các lệnh do master đưa ra</b>

<b>Driver: Ở đây là phần chủ yêu chúng ta cần thực hiện với đề tài này, nó</b>

đem giúp khai báo các dữ liệu về end_device cho master là Pi biết cùng vớiphương thức truyền dữ liệu từ Pi sang end_device. Với slave là oled thì tasẽ cần cung cấp các dữ liệu về modalias, speed, bus_num, CS, mode.

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

-SPI Core cung cấp các API để định nghĩa các cấu trúc dữ liệu, quản lý việc đăng ký và hủycác trình điều khiển điều khiển SPI và trình điều khiển thiết bị. Hay dễ hiểu hơn là SPI Coređược sử dụng để tạo và quản lý giao tiếp SPI giữa vi điều khiển và các thiết bị ngoại vi- Đây là lớp độc lập với nền tảng phần cứng, ẩn đi sự khác biệt của bộ điều khiển bus vật lýtrở xuống và định nghĩa chiến lược và giao diện truy cập thống nhất.

- Nó cung cấp một giao diện thống nhất trở lên. Vì thế, SPI device driver có thể gửi và nhậndữ liệu thơng qua bộ điều khiển bus (SPI bus controller).

Tiếp theo, cùng tìm hiểu về <b>SPI Controller driver:</b>

<b>- SPI Controller driver là trình điều khiển cụ thể dành riêng cho nền tảng (platform-specific</b>

driver). Vì vậy, mỗi nhà sản xuất SoC phải viết trình điều khiển này cho nền tảng hoặc MCU

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

và thường hỗ trợ cả chế độ Master và Slave (Hai chế độ Master và Slave sẽ được tìm hiểu ởphần sau)

<b>- Các drivers này tiếp xúc với các thanh ghi phần cứng và có thể sử dụng DMA hoặc chúng có</b>

thể là các trình điều khiển thao tác trực tiếp trên các chân GPIO. Nhiệm vụ của nó là triểnkhai các phương thức đọc và ghi tương ứng cho từng bus SPI trong hệ thống.

<b>- Về mặt vật lý, mỗi bộ điều khiển SPI có thể kết nối một số thiết bị SPI phụ. Khi hệ thống</b>

được bật, trình điều khiển bộ điều khiển SPI sẽ được tải trước tiên. Một controller driver đượcsử dụng để hỗ trợ quá trình đọc và ghi của 1 bus SPI cụ thể.

Và cuối cùng là về <b>SPI Protocol driver </b>(Trình điều khiển giao thức) :

-Mỗi trình điều khiển bus SPI có thể kết nối với nhiều thiết bị slave (slave devices). Drivernày được sử dụng để giao tiếp tới các thiết bị cụ thể thông qua bus SPI.

<i><b>Để thực hiện đề tài “Xây dựng SPI Device Driver cho SSD1306 Oled trên</b></i>

<i>RaspberryPi” chúng ta sẽ xây dựng SPI Protocol driver với các chức năng sau:</i>

- Khai báo SPI Controller driver.- Thêm thiết bị slave vào SPI Controller.- Cấu hình SPI.

- Truyền nhận dữ liệu giữa master và slave.- Remove thiết bị slave.

- Khởi tạo màn hình.- Đặt vị trí ghi dữ liệu trên oled.

- Ghi dữ liệu lên Oled, Scroll chữ, Ghi hình ảnh lên màn hình, Clear màn hình.

</div>

×