正常情況下,我們需要一個gpio口控制燈,我們認為燈打開就是active狀態。對於一個程序員來說,我們可以封裝一個函數,寫1就是打開燈,寫0就是關燈。
但是對於硬件來說,變化的是gpio口的電平狀態。如果gpio輸出高電平燈亮,那么這就是高有效。如果硬件設計是gpio輸出低電平燈亮,那么就是低有效。對於一個軟件工程師來說,我們的期望是寫1就是亮燈,寫0就是關燈。
我可不管硬件工程師是怎么設計的。我們可以認為dts是描述具體的硬件。因此對於驅動來說,硬件的這種變化,只需要修改dts即可。軟件不用任何修改。
大概知道是將硬件邏輯隔離開來的意思。
gpio_set_value(led_dev.led_no,0); gpio_set_value(led_dev.led_no,1); gpio_set_value 設置的是邏輯電平,1 有效 0 無效 如果GPIO_ACTIVE_LOW 那么 1 有效 就是低電平 0 無效 就是高電平 (物理電平) 如果GPIO_ACTIVE_HIGH 那么 1 有效 就是高電平 0 無效 就是低電平 (物理電平)
總結一下:
在設備樹配置GPIO時設置的有效電平指的是實際電路的電平。例如一個LED,拉低點亮。那么在配置設備樹的時候這個GPIO就應該設置為GPIO_ACTIVE_LOW。
我們在應用層設置GPIO都是希望是高電平點亮,那么這個就可以理解為邏輯電平。那么我們應用程序就只管設置為高電平就行了。
底層程序會根據我們的邏輯電平去做適配。這樣就實現上層只管認為就是高電平點亮,不用管底層是什么電平點亮。