You are on page 1of 2

Hi guys!!!

Nhân một ngày có khá nhiều thời gian như bao ngày khác mình xin phép share một topic liên quan đến
một trong những subsystem khá là quan trọng trong công việc Porting Linux song song với việc sử dụng
device tree trong các dự án Emb sau này để mọi người cùng thảo luận.
1. Khái niệm về hệ thống Pinctrl.

Nếu như bạn là một người đã quen với việc lập trình vi điều khiển thì có lẽ đã quen với việc muxing pin
hoặc nhóm pin nào đó để đạt được một chức năng cụ thể. Ví dụ: bạn có 2 chân A,B. Nếu bạn muốn chân
A,B được sử dụng cho mục đích I/O, bạn cần cài đặt để kết nối chúng với module GPIO. Hay bạn muốn
sử dụng chân A,B cho UART, SPI thì bạn cần cài đặt chúng để kết nối với module UART, SPI tương ứng.

Điều này có thể được mô tả như sau:

GPIO

A
Muxing
B

SPI

Các chip hiện nay có hàng trăm chân. Việc mỗi lần khi phải cấu hình một chân với một chức năng nào đó
có lẽ không khó nhưng sẽ ra sao nếu là 10 cho đến vài chục chân => điều này thật sự sẽ mất thời gian
của bạn. Chính vì lý do này, các kĩ sư BSP đã giúp chúng ta tất cả các công việc khó khăn vì dù sao họ
cũng là người hiểu con chip của chính mình hơn.
Câu hỏi đặt ra là họ đã làm những gì và làm như thế nào ? Trước tiên hãy cùng đi qua một số khái niệm
quan trọng.

a. Pin Control.
Hãy hiểu đơn giản đây là một khái niệm phần mềm. Nó tương ứng với IOMUX như mình đã đề
cập ở trên. Được sử dụng để ghép kênh ( ghép thành các chân chức năng GPIO, UART vv..) và
định cấu hình các chân ( như cấu hình thành pull-up, pull-down vv..)
b. State.
Trạng thái của thiết bị. Như mình thấy sẽ có một số trạng thái như sau: default, sleep, idle … Lấy
UART làm ví dụ. Thiết bị được cấu hình ở trạng thái default sẽ có chức năng UART. Tuy nhiên
nếu chuyển sang trạng thái sleep, để tiết kiệm năng lượng thì những pin này sẽ được muxing
thành chức năng GPIO, hoặc cấu hình trực tiếp để xuất ra mức cao. Lưu ý, nếu state không được
chỉ định thì trạng thái mặc định của thiết bị là default.
c. Group và Function
Một thiết bị sử dụng 1 hoặc nhiều chân. Các chân này có thể nhóm lại thành 1 group. Mỗi group
sẽ tương ứng với 1 function.

You might also like