1. 程式人生 > >MT7621方案 LED 燈控制 (基於OpenWrt平臺)

MT7621方案 LED 燈控制 (基於OpenWrt平臺)

注:出處不明,最開始是在這裡看到的,圖竟然沒有。。。沒有。。。相關資料也幾乎木有。。。datasheet裡也沒有暫存器配置說明。。。。。。MT7621還真是坑爹啊!

目前市面上大部分路由器方案是基於MT7620的,LED的控制比較簡單,直接修改dts檔案,系統會自動生成相應的檔案系統節點,從而可以很方便的控制,當然這些LED控制都是基於CPU的GPIO來控制,包括LAN燈、WIFI燈。但MT7621方案開始,對於LED燈的控制有所區別,LAN燈直接由晶片內部的SWITCH(MT7503)直接控制,而且預定義是自動配好的,有資料收發時會自動閃爍,插上網線會自動亮,拔掉會自動滅,這部分LED控制完全是硬體自動實現,不再贅述。

USB2.0和USB3.0燈是由CPU直接控制的,可以增加dts的LED節點即可:

gpio-leds { 
  compatible = "gpio-leds"; 
  usb2 { 
  label = "green:usb2"; 
  gpios = <&gpio0 14 1>; 
  }; 
  usb3 { 
  label = "green:usb3"; 
  gpios = <&gpio0 17 1>; 
  }; 
  };

核心解析完dts檔案後,會在/sys/devices/platform/gpio-leds/leds 目錄下生成兩個目錄,分別為green:usb2 和green:usb3,進入這兩個資料夾,可以通過echo命令來操作LED燈:

操作USB燈(例如USB2.0燈):

cd  sk:green:usb2
echo 1 > brightness   // 開啟usb2.0 燈
echo 0  > brightness  // 關閉usb2.0 燈

MT7621方案,一般會由兩個射頻晶片和MT7621相連,一個是MT7612e (5G WIFI) ,一個是MT7602e(2.4G WIFI,也有用MT7603的) ,我的demo板是MT7612e + MT7602e 。 5G WIFI 和 2.4G WIFI 指示燈 分別由 這兩個晶片控制(區別於MT7620由CPU的GPIO控制):
【我猜此處應有圖】
在OpenWrt中的公版驅動中,這兩個晶片的驅動是通用的,所以控制方式一致。我是通過操作晶片的LED_CTRL暫存器直接控制的,對於WIFI指示燈,對應該暫存器中的LED2對應的幾個bit:
【我猜此處應有圖】
通過測試 ,發現LED燈是由 電平脈衝 形式觸發,LED2_KICK置為1,則表示產生一個脈衝。LED2_TX_BLINK_MODE置為1,表示有資料傳送時,LED燈會自動閃爍。LED2_POL表示LED極性。
對於本單板:

LED2_KICK = 1 , LED2_POL = 0 ,                 LED燈常亮           (LED_CTRL寫 0x800000)
LED2_KICK = 1 , LED2_POL = 1,                 LED燈常滅           (LED_CTRL寫 0x820000)
LED2_KICK = 1,LED2_TX_BLINK_MODE   ,     LED自動閃爍        (LED_CTRL寫 0x840000)  

MT76x2的暫存器讀寫,可通過openwrt 的mt76x2驅動提供的除錯命令實現,例如要實現MT7612E LED常亮:

cd      /sys/kernel/debug/ieee80211/phy0/mt76
echo  0x770 > regidx    //設定相對偏移地址
echo  0x800000 > regval    //寫暫存器

至此,MT7621方案的LED控制完成。