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

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

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 (5.23 MB, 29 trang )

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

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

<b>VIỆN ĐIỆN TỬ - VIỄN THÔNG</b>

<b>BÁO CÁO BÀI TẬP LỚN HỆ ĐIỀU HÀNH NHÚNG</b>

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

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

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

Giảng viên hướng dẫn: TS. Phạm Dỗn TĩnhHà Nội, 8-2022

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

<b>LỜI NĨI ĐẦU </b>

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ómcó thể được hồ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!

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

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

<i><b>1.4 Lập kế hoạch và phân công nhiệm vụ...5</b></i>

<b>CHƯƠNG 2. CƠ SỞ LÝ THUYẾT...7</b>

<i><b>2.1 Device Drivers...7</b></i>

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

<i><b>2.2 Raspberry Pi 4...8</b></i>

<i><b>2.3 Lý thuyết giao tiếp I2C...11</b></i>

<i><b>2.4 Các thành phần trong chuẩn giao tiếp I2C...11</b></i>

<i><b>2.5 RTC 1307...14</b></i>

<b>CHƯƠNG 3. THIẾT KẾ HỆ THỐNG...15</b>

<i><b>3.1 Tính tốn và lựa chọn thiết bị phần cứng...15</b></i>

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 tốn và lựa chọn khối nguồn...17

<i><b>3.2 Tổng kết linh kiện...17</b></i>

<i><b>3.3 Sơ đE hê F thống chi tiết...17</b></i>

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

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

<i><b>3.4 Sơ đE trạng thái...20</b></i>

<b>CHƯƠNG 4. THỰC HIỆN VÀ KẾT QUẢ...21</b>

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

<b>DANH MỤC HÌNH ẢNH</b>

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

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

<b> DANH MỤC BẢNG BIỂU</b>

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

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

<b>CHƯƠNG 1. TỔNG QUAN ĐỀ TÀI</b>

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:

<b>Hình 1 Module đo thời gian thực RTC 1307</b>

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

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="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.

<b>Hình 2 Raspberry Pi</b>

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 hồntồ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.

<b>1.2 Ý tưởng và mục tiêu </b>

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.

<b>1.3 Yêu cầu hệ thống </b>

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

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

<i><b>1.3.1 Yêu cầu chức năng</b></i>

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.

<i><b>1.3.2 Yêu cầu phi chức năng</b></i>

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 q lớn, dễ dàng lắp đặt.Độ trễ lấy thời gian là 1s

<b>1.4 Lập kế hoạch và phân cơng nhiệm vụ</b>

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 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>Bảng 1 Phân công nhiệm vụ</b>

<b>CHƯƠNG 2. CƠ SỞ LÝ THUYẾT</b>

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

<b>2.1 Device Drivers</b>

<i><b>2.1.1 Lý thuyết và vai trò của driver</b></i>

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.Ngồ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ếtkỹ 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, …

<i><b>2.1.2 Mơ hình phân lớp theo chiều dọc</b></i>

Trên Linux, device driver cung cấp một giao diện “system call” (giao diện gọi các hàmhệ 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:

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

<b>Hình 3 Mơ hình phân lớp theo chiều dọc</b>

<b>2.2 Raspberry Pi 4</b>

<b>Raspberry là gì ?</b>

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.

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

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

<b>Hình 5 Cấu hình chân Raspberry Pi 4Mơ tả chân Raspberry Pi :</b>

Raspberry Pi 4 có thể sử dụng trong hệ thống nhúng bên ngồ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.

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

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

<b>Module giao tiếp dữ liệu nối tiếp Raspberry Pi </b>

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

Giao thức SPI.Chân giao tiếp I2C.Các chân GPIO PWM. Các chân SDIO.

Ở đây chúng ta sẽ chọn giao thức I2C để thực hiện bài tập lớn.

<b>Mơ tả bảng mạch Raspberry pi 4</b>

Có hỗ trợ nhiều ngoại vi có thể được sử dụng:

<b>Hình 6 Các hỗ trợ thiết bị ngoại viCác thiết bị ngoại vi chính khác</b>

USB PoE Header

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

Máy ảnhMàn hìnhÂm thanhThẻ SD

<b>2.3 Lý thuyết giao tiếp I2C </b>

<b>Giao thức I2C</b>

I2C là một giao thức giao tiếp để truyền dữ liệu giữa một bộ xử lý trung tâm với nhiều IC trên cùng một board mạch chỉ sử dụng hai đường truyền tín hiệu.Được sử dụng rộng rãi cho giao tiếp giữa vi điều khiển và mảng cảm biến, các thiếtbị 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ộ.

<b>Hình 7 Chuẩn giao tiếp I2C</b>

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

<b>Tổng quan về I2C: </b>

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

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="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.

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

<b>Giao thức truyền dữ liệu</b>

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:

<b>Hình 9 Cách thức truyền dữ liệu trong giao thức I2CMột số chi tiết về I2C</b>

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="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ỉ.

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

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.

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

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

<b>2.5 RTC 1307</b>

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, ngồ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.

<b>Hình 12 Module Real Time ClockThơng số kĩ thuật</b>

IC chính: RTC DS1307 + EEPROM AT24C32Nguồn cung cấp: 5VDC.

Giao tiếp: I2C

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="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.

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

Khả năng tạo sóng vng 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.

<b>Một số chi tiết của DS1307: </b>

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.

Ngồ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.

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

<b>CHƯƠNG 3. THIẾT KẾ HỆ THỐNG</b>

<b>3.1 Tính tốn và lựa chọn thiết bị phần cứng</b>

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

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

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

<i><b>3.1.2 Lựa chọn khối nguEn</b></i>

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

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

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

<b>Hình 14 Nguồn cho vi điều khiển</b>

<b>3.2 Tổng kết linh kiện</b>

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:

<b>3.3 Sơ đồ hê € thống chi tiết</b>

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êntừ đó phân tích chi tiết kết nối giữa các khối với nhau.

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

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

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

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>Bảng 3 Sơ đồ kết nối chân giữa RTC 1307 với MCU</b>

3.3.1.2 Xây dựng Driver

<b>Struct i2c_driver</b>

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

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="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 structi2c_device_id *);

(*remove)(<sub>int</sub> <sub>struct</sub> i2c_client *);

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

void (*shutdown)(struct i2c_client *); struct device_driver driver;

<sub>const struct</sub> i2c_device_id *id_tablex`;};

Hàm probe là một phần của struct i2c_driver, và nó được thực hiện khi xảy ra matchgiữa một i2c device và i2c driver. Các nhiệm vụ cần thiết của hàm probe() là:

Kiểm tra xem device được match có đúng là device mong muốn hay không.Kiểm tra chức năng I2C bus controller

Khởi tạo device.Thiết lập thơng số device.Đăng kí kernel framework.

<b>Khởi tạo và đăng kí driver I2C</b>

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="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);

<b>Driver và device provisioning</b>

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:

struct i2c_device_id {

char name[I2C_NAME_SIZE]; kernel_ulong_t driver_data;};

MODULE_DEVICE_TABLE(i2c, my_idtable);

<b>Giao tiếp với client.</b>

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.

<b>Giao tiếp I2C truyền thống</b>

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

Ta sử dụng 2 hàm dưới đây để giao tiếp với các I2C device:int i2c_master_send(struct i2c_client *client, const char*buf, count);int

int i2c_master_recv(struct i2c_client *client, char *buf, int count);

Hầu hết các hàm giao tiếp I2C đều phải lấy struct i2c_client là tham số để biết được chính xác phải giao tiếp với I2C device nào. Tham số thứ 2 chứa những byte cần đọc hoặc ghi vào, tham số thứ 3 là số byte để đọc hoặc ghi. Giống như hầu hết các hàm đọc/ghi khác, giá trị trả về của hàm là số byte được đọc/ghi thành công.

<b>Khởi tạo I2C device trong file cấu hình board (file code C - cách cũ)</b>

Có một điều chắc chắn là ta luôn phải thông báo cho kernel về sự xuất hiện của các thiết bị vật lý trong hệ thống. Như đã biết thì có hai kiểu khai báo device trong kernel: dùng file cấu hình board code c, device tree. Với kiểu khai báo trong code C thì ta sử dụng struct i2c_board_info để đại diện cho một I2C device.

Struct này được định nghĩa:struct i2c_board_info { char type[I2C_NAME_SIZE]; <sub>unsigned short</sub> addr;

void *platform_data; irq;int

Tuy nhiên khai báo này là cũ và không được khuyên dùng nữa.

<b>I2C và device tree (khơng dùng trong project này)</b>

Để cấu hình và điều khiển được các I2C device, ta phải làm 2 bước:Định nghĩa và đăng kí I2C driver

ĐỊnh nghĩa và đăng kí I2C device

</div>

×