開發闆:I.MX6Q 5155
Linux核心:嵌入式3.10.53
蜂鳴器:無源壓電式
日期:2019-6-29 18:50
調試目的:在開發闆上實作PWM驅動蜂鳴器蜂鳴。
調試過程如下:
(0)首先運作開發闆Linux系統,檢視目前系統所使用的pwm裝置。
如下:
可見目前系統隻有背光是使用pwm實作,為了調試友善,可以通過背光來模拟蜂鳴器,使用背光裝置樹來驅動蜂鳴器,因為系統自帶了可以在使用者空間調試背光的brightness檔案(後面會用到),用這種方法可以利用brightness檔案以調試蜂鳴器。
(1)檢視硬體原理圖和datasheet,了解硬體相關資訊。
在IMX6Q原理圖(SPF-27516_C5)中搜尋pwm,發現了一處連接配接pwm的管腳,即DISP0_PWM。
從原理圖可知,DISP0_PWM連接配接的是SD1_DAT3,但我們還不能确定是不是該管腳是不是連接配接的背光。
(2)檢視背光裝置樹,确定背光連接配接管腳。
在sourceinsight中搜尋backlight,可在imx6qdl-sabresd.dtsi中得到以下資訊管腳
可知backlight連接配接的是pwm1。
在imx6qdl-sabresd.dtsi中搜尋pwm1,可得:
可知pwm1連接配接的管腳為pinctrl_pwm1_1。
繼續搜尋pinctrl_pwm1_1,可在imx6qdl.dtsi中得到以下資訊:
從MX6QDL_PAD_SD1_DAT3__PWM1_OUT可知,背光的pwm對應的管腳為SD1_DAT3,至此可确定原理圖中DISP0_PWM即是連接配接的背光引腳。
從以上DTS檔案資訊也可以知道,DTS檔案已經建好了pwm控制背光的裝置樹。
到這裡,我們确定了一個資訊,即背光連接配接的PWM1管腳是SD1_DAT3。已知我們的闆子有PWM1、PWM2、PWM3、PWM4四個PWM,現在PWM1已經使用,那麼能否用其他某一個PWM控制蜂鳴器?繼續下面探索。
(3)查閱datasheet,确定可用于蜂鳴器的PWM。
查閱datasheet,看是否有其他可用的pwm。在datasheet中得到以下資訊:
可知SD1_CMD管腳可以複用為PWM4_OUT輸出,是以可以使用pwm4來驅動蜂鳴器。在原理圖中查找SD1_CMD,得到如下資訊:
可以看出SD1_CMD管腳已經被連接配接到了蜂鳴器控制器上,是以我們可以對SD1_CMD進行配置,以實作pwm4驅動蜂鳴器。
(4)修改背光裝置樹,以實作PWM4驅動蜂鳴器。
Ⅰ、修改imx6qdl.dtsi中pwm1節點,如下
這裡将本用于背光的PWM1管腳配置為用于蜂鳴器的PWM4管腳。
Ⅱ、修改imx6qdl-sabresd.dtsi中pwm1節點,如下
這裡依樣畫葫蘆,根據原來pwm1的描述,修改為pwm4的描述。
Ⅲ、修改imx6qdl-sabresd.dtsi中節點,如下
這裡依然使用了backlight的名字,這樣便可以使用系統自帶的檔案brightness檔案來調試蜂鳴器。其中的字段“pwms”指定了蜂鳴器的頻率(這裡我取370370,轉換為頻率為2700HZ),“brightness-levels”字段指定了占空比,分7級,輸入7最大,100%,蜂鳴器不會響(因為是無源蜂鳴器,輸入0也一樣不響),輸入6占空比為50%,蜂鳴器聲音最大。
到這一步,裝置樹的修改便已完成。
(5)測試
測試時,運作Linux系統後,輸入如下指令,在使用者空間進行測試。其中的brightness檔案是3.10.53系統提供的測試imx6q背光的檔案,通過往該檔案寫入0-7幾個數字可以調節背光亮度,如果我們前面的工作沒有出錯,那輸入非0或非7數字蜂鳴器就會發出蜂鳴聲。
測試結果:蜂鳴器無聲響,示波器測量蜂鳴器管腳亦無波形,可知未成功。
原因排查:
如下,
輸入dmesg | grep pwm指令檢視啟動資訊,得到如下資訊:
可以看到,MX6Q_PAD_SD1_CMD引腳正在被另一個裝置iomuxc所占用,無法配置設定給208c000.pwm(208c000為pwm4位址資訊,可在datasheet中查到),也就是我們的pwm4裝置,在DTS檔案中搜尋MX6Q_PAD_SD1_CMD,在imx6qdl-sabresd.dtsi中可得到如下資訊,
由最後一行資訊可知MX6Q_PAD_SD1_CMD在這裡被占用。
從資料手冊也可以看出,SD1_CMD可以有5種使用方式,其中就包含了GPIO1_IO18,如下表,
是以可以确定是GPIO_IO18占用了MX6Q_PAD_SD1_CMD管腳,将其屏蔽掉,再重新編譯裝置樹。
啟動系統,再輸入“echo 6 > /sys/bus/platform/devices/backlight.36/backlight/backlight.36/brightness” 指令,蜂鳴器發出聲響,成功!
最後再重複一遍,這種方法是在背光裝置樹的基礎上,修改相應管腳等資訊來實作PWM驅動蜂鳴器,這種方法可以利用系統中已有的調試背光用的brightness檔案,以在使用者空間調試蜂鳴器,友善快捷。但這樣占用了背光的裝置樹,将會使背光不能使用。若想同時使用PWM驅動背光和蜂鳴器,需要另外建立蜂鳴器自己的裝置樹,其方法也和上面所叙大同小異,隻是不修改背光的裝置樹而已,在此不多贅述,隻将最主要的修改部分貼出,如下
至此整個過程結束。