Linux人工智能開發(fā)實(shí)例 課件 2.1 總體設(shè)計(jì)與Linux驅(qū)動(dòng)開發(fā)_第1頁(yè)
Linux人工智能開發(fā)實(shí)例 課件 2.1 總體設(shè)計(jì)與Linux驅(qū)動(dòng)開發(fā)_第2頁(yè)
Linux人工智能開發(fā)實(shí)例 課件 2.1 總體設(shè)計(jì)與Linux驅(qū)動(dòng)開發(fā)_第3頁(yè)
Linux人工智能開發(fā)實(shí)例 課件 2.1 總體設(shè)計(jì)與Linux驅(qū)動(dòng)開發(fā)_第4頁(yè)
Linux人工智能開發(fā)實(shí)例 課件 2.1 總體設(shè)計(jì)與Linux驅(qū)動(dòng)開發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩36頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第2章音頻分析系統(tǒng)Linux開發(fā)案例音頻分析系統(tǒng)Linux開發(fā)案例本章分析Linux技術(shù)在音頻分析系統(tǒng)中的應(yīng)用,共分2個(gè)模塊:1.系統(tǒng)總體設(shè)計(jì)與Linux驅(qū)動(dòng)開發(fā):先進(jìn)行系統(tǒng)總體設(shè)計(jì)分析,分析點(diǎn)陣屏和OLED的Linux驅(qū)動(dòng)開發(fā),并實(shí)現(xiàn)顯示模塊驅(qū)動(dòng)開發(fā)與測(cè)試。2.

音頻分析系統(tǒng)開發(fā):分析音頻頻譜分析和功能開發(fā),音頻處理功能開發(fā)和上位機(jī)控制應(yīng)用開發(fā),并實(shí)現(xiàn)音頻分析顯示。第2章音頻分析系統(tǒng)Linux開發(fā)案例

2.1總體設(shè)計(jì)與Linux驅(qū)動(dòng)開發(fā)音頻分析系統(tǒng)Linux開發(fā)案例聲音頻譜分析是考慮人耳對(duì)不同頻率成分的聲音的感受的不同,進(jìn)而通過傅里葉變換等獲得其準(zhǔn)確頻譜特性的技術(shù)。聲壓頻譜分析是后續(xù)聲學(xué)分析的基礎(chǔ),同時(shí)在聲學(xué)測(cè)量,噪聲污染,健康醫(yī)療,降噪減噪,故障診斷,國(guó)防建設(shè)等中都具有重要的應(yīng)用。本項(xiàng)目從理論分析到硬件及算法設(shè)計(jì),分別介紹了基于嵌入式系統(tǒng)的音頻分析系統(tǒng)的實(shí)現(xiàn)過程。提出了一套精度較高,運(yùn)算量較小,實(shí)時(shí)性較好,可操作性較強(qiáng)的聲學(xué)頻譜分析方案。本系統(tǒng)對(duì)基于嵌入式系統(tǒng)的聲壓頻率計(jì)權(quán)、頻譜分析進(jìn)行了簡(jiǎn)單的分析,首先介紹了基于卷積的頻率計(jì)權(quán)實(shí)現(xiàn)及基于傅里葉變換、快速傅里葉變換的聲音頻譜分析方法。2.1.1系統(tǒng)總體設(shè)計(jì)分析2.1.1.1系統(tǒng)需求分析功能功能說明音頻采集功能通過邊緣計(jì)算網(wǎng)關(guān)上的麥可風(fēng)實(shí)時(shí)采集音頻數(shù)據(jù)音頻頻譜分析功能對(duì)采集音頻數(shù)據(jù)進(jìn)行頻譜分析頻譜實(shí)時(shí)動(dòng)態(tài)顯示功能通過擴(kuò)展板的點(diǎn)陣屏與OLED屏動(dòng)態(tài)顯示頻率變化Android應(yīng)用控制功能通過Android應(yīng)用程序?qū)ο到y(tǒng)功能進(jìn)行切換與硬件測(cè)試音頻分析系統(tǒng)Linux開發(fā)案例音頻分析顯示系統(tǒng),其硬件主要由邊緣計(jì)算網(wǎng)關(guān)和Arm擴(kuò)展模塊構(gòu)成,通過邊緣計(jì)算網(wǎng)關(guān)上的麥可風(fēng)實(shí)時(shí)采集音頻數(shù)據(jù),采集的數(shù)據(jù)分析處理后由Arm擴(kuò)展模塊顯示頻譜變化,Android手機(jī)可以對(duì)設(shè)備進(jìn)行相關(guān)的功能切換與控制,硬件結(jié)構(gòu)框圖如圖所示。2.1.1系統(tǒng)總體設(shè)計(jì)分析2.1.1.2系統(tǒng)總體設(shè)計(jì)音頻分析系統(tǒng)Linux開發(fā)案例音頻分析顯示系統(tǒng),軟件結(jié)構(gòu)框圖如圖所示。2.1.1系統(tǒng)總體設(shè)計(jì)分析2.1.1.2系統(tǒng)總體設(shè)計(jì)音頻分析系統(tǒng)Linux開發(fā)案例邊緣計(jì)算網(wǎng)關(guān)采用工業(yè)級(jí)鋁合金一體屏設(shè)計(jì),AI嵌入式邊緣計(jì)算處理器RK3399,4G+16G內(nèi)存配置,10寸高清電容屏,運(yùn)行ubuntu、android多操作系統(tǒng)系統(tǒng),如圖所示。2.1.2開發(fā)平臺(tái)音頻分析系統(tǒng)Linux開發(fā)案例邊緣計(jì)算網(wǎng)關(guān)提供豐富的外設(shè)接口,易于功能擴(kuò)展,方便開發(fā)調(diào)試,如圖所示。2.1.2開發(fā)平臺(tái)智能邊緣計(jì)算網(wǎng)關(guān)系統(tǒng)啟動(dòng)進(jìn)入U(xiǎn)buntu操作系統(tǒng)界面,如圖所示。音頻分析系統(tǒng)Linux開發(fā)案例本項(xiàng)目開發(fā)時(shí)需要連接ARM擴(kuò)展模塊,首先從ARM擴(kuò)展模塊上拆下STM32核心板,然后將ARM擴(kuò)展模塊與網(wǎng)關(guān)的EXT接口連接。連接完成的示意如圖所示。2.1.2開發(fā)平臺(tái)音頻分析系統(tǒng)Linux開發(fā)案例擴(kuò)展板上的點(diǎn)陣屏需要HT16K33驅(qū)動(dòng)芯片進(jìn)行控制驅(qū)動(dòng)。HT16K33是一款存儲(chǔ)器映射和多功能LED控制驅(qū)動(dòng)芯片。該芯片支持最大128點(diǎn)的顯示模式(16SEGs×8COMs)以及最大13×3的按鍵矩陣掃描電路。HT16K33的軟件配置特性使其適用于多種LED應(yīng)用,包括LED模塊和顯示子系統(tǒng)。HT16K33通過雙向I2C接口可與大多數(shù)微控制器進(jìn)行通信。2.1.3點(diǎn)陣屏Linux驅(qū)動(dòng)開發(fā)2.1.3.1點(diǎn)陣屏硬件原理音頻分析系統(tǒng)Linux開發(fā)案例顯示存儲(chǔ)器–RAM結(jié)構(gòu)●16×8位靜態(tài)RAM用于存儲(chǔ)LED顯示數(shù)據(jù)。對(duì)RAM中的某一個(gè)位寫“1”則相對(duì)應(yīng)的LEDROW點(diǎn)亮,寫“0”則相對(duì)應(yīng)的LEDROW熄滅。●RAM地址與行輸出一一對(duì)應(yīng),一個(gè)RAM字中的每個(gè)位與縱列輸出一一對(duì)應(yīng)。RAM與LED的映射關(guān)系如表2.2所示。2.1.3點(diǎn)陣屏Linux驅(qū)動(dòng)開發(fā)2.1.3.1點(diǎn)陣屏硬件原理COMROW0~ROW7ROW8~ROW15COM000H01HCOM102H03HCOM204H05HCOM306H07HCOM408H09HCOM50AH0BHCOM60CH0DHCOM70EH0FHi2c數(shù)據(jù)字節(jié)D7D6D5D4D3D2D1D0ROW7654321015141312111098音頻分析系統(tǒng)Linux開發(fā)案例linux內(nèi)核和芯片提供商為I2C設(shè)備的驅(qū)動(dòng)程序提供了I2C驅(qū)動(dòng)的框架,以及框架底層與硬件相關(guān)的代碼的實(shí)現(xiàn)(完整流程圖請(qǐng)查看文檔)。剩下的就是針對(duì)掛載在I2C兩線上的I2C設(shè)備了device,而編寫的即具體設(shè)備驅(qū)動(dòng)了,這里的設(shè)備就是硬件接口外掛載的設(shè)備,而非硬件接口本身(soc硬件接口本身的驅(qū)動(dòng)可以理解為總線驅(qū)動(dòng))2.1.3點(diǎn)陣屏Linux驅(qū)動(dòng)開發(fā)2.1.3.2點(diǎn)陣屏Linux驅(qū)動(dòng)程序音頻分析系統(tǒng)Linux開發(fā)案例從i2c驅(qū)動(dòng)架構(gòu)圖中可以看出,linux內(nèi)核對(duì)i2c架構(gòu)抽象了一個(gè)叫核心層core的中間件,它分離了設(shè)備驅(qū)動(dòng)devicedriver和硬件控制的實(shí)現(xiàn)細(xì)節(jié),core層不但為上面的設(shè)備驅(qū)動(dòng)提供封裝后的內(nèi)核注冊(cè)函數(shù),而且還為小面的硬件事件提供注冊(cè)接口,core層起到了承上啟下的作用。開發(fā)I2C驅(qū)動(dòng)時(shí),有4個(gè)步驟,前2個(gè)步驟屬于I2C總線驅(qū)動(dòng),后面2個(gè)步驟屬于I2C設(shè)備驅(qū)動(dòng)。過程如下:2.1.3點(diǎn)陣屏Linux驅(qū)動(dòng)開發(fā)2.1.3.2點(diǎn)陣屏Linux驅(qū)動(dòng)程序(1)提供I2C適配器的硬件驅(qū)動(dòng),探測(cè),初始化I2C適配器,驅(qū)動(dòng)CPU控制的I2C適配器從硬件上產(chǎn)生。(2)提供I2C控制的algorithm,用具體適配器的xxx_xfer()函數(shù)填充i2c_algorithm的master_xfer指針,并把i2c_algorithm指針賦給i2c_adapter的algo指針。(3)實(shí)現(xiàn)I2C設(shè)備驅(qū)動(dòng)中的i2c_driver接口,用具體yyy的yyy_probe(),yyy_remove(),yyy_suspend(),yyy_resume()函數(shù)指針和i2c_device_id設(shè)備ID表賦給i2c_driver的probe,remove,suspend,resume和id_table指針。(4)實(shí)現(xiàn)I2C設(shè)備所對(duì)應(yīng)類型的具體驅(qū)動(dòng),i2c_driver只是實(shí)現(xiàn)設(shè)備與總線的掛接。音頻分析系統(tǒng)Linux開發(fā)案例i2c設(shè)備注冊(cè)主要定義一些結(jié)構(gòu)體和使用一些API函數(shù)。1)在Linux驅(qū)動(dòng)中I2C系統(tǒng)中主要包含以下幾個(gè)成員:2.1.3點(diǎn)陣屏Linux驅(qū)動(dòng)開發(fā)2.1.3.2點(diǎn)陣屏Linux驅(qū)動(dòng)程序2)板級(jí)信息里應(yīng)該包含I2C的地址和設(shè)備名:示例:#defineDEVICE_NAME "ht16k33"#ifDEVICE_RS#defineDEV_I2C_BUS2#defineDEV_I2C_ADDRESS(0xE0>>1)structi2c_board_infoinfo;memset(&info,0,sizeof(structi2c_board_info));info.addr=DEV_I2C_ADDRESS;strcpy(info.type,DEVICE_NAME);音頻分析系統(tǒng)Linux開發(fā)案例i2c設(shè)備注冊(cè)主要定義一些結(jié)構(gòu)體和使用一些API函數(shù)。3)i2c_get_adapter函數(shù)說明:獲取adapter總線上的相應(yīng)的I2C設(shè)備,參數(shù)是設(shè)備號(hào),舉例如下:2.1.3點(diǎn)陣屏Linux驅(qū)動(dòng)開發(fā)2.1.3.2點(diǎn)陣屏Linux驅(qū)動(dòng)程序#defineDEV_I2C_BUS2adapter=i2c_get_adapter(DEV_I2C_BUS);if(adapter==NULL){return-ENODEV;}i2c_get_adapt、r和i2c_new_device配合使用:adapter=i2c_get_adapter(DEV_I2C_BUS);if(adapter==NULL){return-ENODEV;}client=i2c_new_device(adapter,&info);i2c_put_adapter(adapter);if(client==NULL){return-ENODEV;}音頻分析系統(tǒng)Linux開發(fā)案例i2c讀寫接口1)設(shè)備讀寫的實(shí)現(xiàn)設(shè)備讀寫分為兩類,一類是寫命令,一類是寫數(shù)據(jù),都是通過i2c_master_send函數(shù)來實(shí)現(xiàn)。2)i2c_master_send函數(shù)的使用2.1.3點(diǎn)陣屏Linux驅(qū)動(dòng)開發(fā)2.1.3.2點(diǎn)陣屏Linux驅(qū)動(dòng)程序3)寫命令函數(shù):其實(shí)也是調(diào)用i2c_master_send函數(shù),比如下面的這個(gè):i2c_master_send(new_client,write_data,2);//向new_client發(fā)送write_data內(nèi)數(shù)據(jù)先發(fā)命令,后數(shù)據(jù),2表示發(fā)送的大小。staticintht16k33_write_command(charc){ returni2c_master_send(i2c_dev,&c,1);}

音頻分析系統(tǒng)Linux開發(fā)案例4)寫數(shù)據(jù)函數(shù):其實(shí)也是調(diào)用i2c_master_send函數(shù),比如下面的這個(gè):2.1.3點(diǎn)陣屏Linux驅(qū)動(dòng)開發(fā)2.1.3.2點(diǎn)陣屏Linux驅(qū)動(dòng)程序staticintht16k33_write_cmd_data(charc,chard){ charv[]={c,d}; returni2c_master_send(i2c_dev,v,2);}staticintht16k33_flush(void){ intr; charbuf[17]; buf[0]=0; memcpy(buf+1,led_buf,16); r=i2c_master_send(i2c_dev,buf,17); printk(KERN_ERR"wr%d\n",r); returnr;}

(點(diǎn)陣驅(qū)動(dòng)代碼詳細(xì)請(qǐng)查看文檔)音頻分析系統(tǒng)Linux開發(fā)案例點(diǎn)陣屏驅(qū)動(dòng)主要實(shí)現(xiàn)對(duì)硬件設(shè)備的基本控制,具體的功能要由上層應(yīng)用調(diào)用驅(qū)動(dòng)提供的接口對(duì)設(shè)備進(jìn)行控制。點(diǎn)陣屏應(yīng)用功能函數(shù)說明如表所示。2.1.3點(diǎn)陣屏Linux驅(qū)動(dòng)開發(fā)2.1.3.3點(diǎn)陣屏Linux應(yīng)用程序函數(shù)名稱參數(shù)說明函數(shù)功能voidled8x8Init(void)無點(diǎn)陣屏初始化staticvoiddumRam(void)無點(diǎn)陣屏顯示Ram數(shù)組內(nèi)容voidled8x8Brightness(intb)b:亮度值點(diǎn)陣屏亮度控制voidled8x8Point(intx,inty,intst)x:行坐標(biāo)y:列坐標(biāo)點(diǎn)陣屏設(shè)置指定坐標(biāo)數(shù)據(jù)voidled8x8Draw(char*buf)buf:顯示緩沖區(qū)點(diǎn)陣屏Ram數(shù)組從緩沖區(qū)取值voidled8x8Clear(void)無點(diǎn)陣屏清屏voidled8x8Flush(void)無點(diǎn)陣屏刷新顯示內(nèi)容(led8x8.c程序源碼詳細(xì)請(qǐng)查看文檔)音頻分析系統(tǒng)Linux開發(fā)案例點(diǎn)陣屏應(yīng)用功能,流程分析:1)led8x8Init()初始化點(diǎn)陣屏硬件;2)led8x8Face(i)設(shè)置要顯示的第i類笑臉坐標(biāo)數(shù)據(jù)3)led8x8Flush()點(diǎn)陣屏刷新顯示4)sleep(2)休眠2秒鐘5)i值在faces數(shù)組有效范圍內(nèi)加16)返回到2)步驟循環(huán)執(zhí)行2.1.3點(diǎn)陣屏Linux驅(qū)動(dòng)開發(fā)2.1.3.3點(diǎn)陣屏Linux應(yīng)用程序(Led8x8Test.c源碼詳細(xì)請(qǐng)查看文檔)音頻分析系統(tǒng)Linux開發(fā)案例1、基本結(jié)構(gòu)

OLED器件由基板、陰極、陽(yáng)極、空穴注入層(HIL)、電子注入層(EIL)、空穴傳輸層(HTL)、電子傳輸層(ETL)、電子阻擋層(EBL)、空穴阻擋層(EBL)、發(fā)光層(EML)等部分構(gòu)成?;迨钦麄€(gè)器件的基礎(chǔ),所有功能層都需要蒸鍍到器件的基板上;通常采用玻璃作為器件的基板。陽(yáng)極與器件外加驅(qū)動(dòng)電壓的正極相連,陽(yáng)極中的空穴在外加驅(qū)動(dòng)電壓的驅(qū)動(dòng)下向器件中的發(fā)光層移動(dòng),陽(yáng)極需要在器件工作時(shí)具有一定的透光性,使得器件內(nèi)部發(fā)出的光能夠被外界觀察到,陽(yáng)極最常使用的材料是氧化銦錫ITO。空穴注入層可以使來自陽(yáng)極的空穴順利地注入空穴傳輸層;空穴傳輸層負(fù)責(zé)將空穴傳輸?shù)桨l(fā)光層;電子阻擋層會(huì)把來自陰極的電子阻擋在器件的發(fā)光層界面處,從而增大器件發(fā)光層界面處電子的濃度。2.1.4OLEDLinux驅(qū)動(dòng)開發(fā)2.1.4.1OLED的基本結(jié)構(gòu)和發(fā)光原理音頻分析系統(tǒng)Linux開發(fā)案例1、基本結(jié)構(gòu)OLED器件的結(jié)構(gòu)可分為單層結(jié)構(gòu)、雙層結(jié)構(gòu)、三層結(jié)構(gòu)和多層結(jié)構(gòu)。單層結(jié)構(gòu)只包含基板、陽(yáng)極、陰極和發(fā)光層的結(jié)構(gòu),由于OLED器件中的材料對(duì)電子和空穴有不同的傳輸能力,該結(jié)構(gòu)會(huì)使得電子和空穴在發(fā)光層界面處的濃度差別很大,導(dǎo)致OLED器件的發(fā)光效率較低。雙層結(jié)構(gòu)是指發(fā)光層除了具有電子和空穴先通過再結(jié)合形成激子然后通過激子退激發(fā)光的作用,還具有傳輸電子或傳輸空穴的作用。

三層結(jié)構(gòu)是指器件結(jié)構(gòu)中一般包含有陰極、電子傳輸層、發(fā)光層、空穴傳輸層、陽(yáng)極和基板的OLED器件;三層結(jié)構(gòu)的OLED器件具有更高的電子和空穴傳輸能力,發(fā)光效率也更高。多層結(jié)構(gòu)是指OLED器件除具了有三層結(jié)構(gòu)所具有的功能層,還具有電子注入層、空穴注入層、電子阻擋層和空穴阻擋層;由于更多功能層的加入,OLED器件的發(fā)光效率更高,但由于器件的厚度增加,需要更高的驅(qū)動(dòng)電壓才能正常工作。2.1.4OLEDLinux驅(qū)動(dòng)開發(fā)2.1.4.1OLED的基本結(jié)構(gòu)和發(fā)光原理音頻分析系統(tǒng)Linux開發(fā)案例2.發(fā)光原理OLED是一種在外加驅(qū)動(dòng)電壓下可主動(dòng)發(fā)光的器件,無須背光源。OLED基本驅(qū)動(dòng)原理:OLED器件中的電子和空穴在外加驅(qū)動(dòng)電壓的驅(qū)動(dòng)下,從器件的兩極向中間的發(fā)光層移動(dòng),到達(dá)發(fā)光層后,在庫(kù)侖力的作用下,電子和空穴進(jìn)行再結(jié)合形成激子,激子的產(chǎn)生會(huì)活化發(fā)光層的有機(jī)材料,進(jìn)而使得有機(jī)分子最外層的電子突破最高占有分子軌道(HOMO)能級(jí)和最低未占有分子軌道(LUMO)能級(jí)之間的能級(jí)勢(shì)壘,從穩(wěn)定的基態(tài)躍遷到極不穩(wěn)定的激發(fā)態(tài),處于激發(fā)態(tài)的電子的狀態(tài)極不穩(wěn)定,會(huì)通過內(nèi)轉(zhuǎn)換回到LUMO能級(jí)。2.1.4OLEDLinux驅(qū)動(dòng)開發(fā)2.1.4.1OLED的基本結(jié)構(gòu)和發(fā)光原理音頻分析系統(tǒng)Linux開發(fā)案例

OLED器件的驅(qū)動(dòng)方式分為主動(dòng)式驅(qū)動(dòng)(有源驅(qū)動(dòng))和被動(dòng)式驅(qū)動(dòng)(無源驅(qū)動(dòng))。1.無源驅(qū)動(dòng)無源驅(qū)動(dòng)分為靜態(tài)驅(qū)動(dòng)和動(dòng)態(tài)驅(qū)動(dòng)。(1)靜態(tài)驅(qū)動(dòng):在靜態(tài)驅(qū)動(dòng)的OLED器件上,一般采用共陰極連接方式,有機(jī)電致發(fā)光像素的陰極是連在一起引出,陽(yáng)極是分立引出。若要驅(qū)動(dòng)器件發(fā)光,只要讓恒流源的電壓與陰極的電壓之差大于驅(qū)動(dòng)電壓,正向?qū)ê髮l(fā)光;若要器件不發(fā)光,將陽(yáng)極接在一個(gè)負(fù)電壓上,反向截止后不能發(fā)光。如果圖像變化比較多時(shí),會(huì)出現(xiàn)交叉效應(yīng),為了避免這種現(xiàn)象,需要采用交流的形式。靜態(tài)驅(qū)動(dòng)一般用于段式顯示屏的驅(qū)動(dòng)。(2)動(dòng)態(tài)驅(qū)動(dòng):在動(dòng)態(tài)驅(qū)動(dòng)時(shí),器件的兩個(gè)電極做成了矩陣結(jié)構(gòu),水平一組顯示像素的相同性質(zhì)的電極共用,縱向一組顯示像素的相同性質(zhì)的電極共用。如果器件可分為N行和M列,行和列分別對(duì)應(yīng)發(fā)光像素的陰極和陽(yáng)極。在實(shí)際驅(qū)動(dòng)時(shí),要逐行點(diǎn)亮或者要逐列點(diǎn)亮像素,一般采用逐行掃描的方式。2.1.4OLEDLinux驅(qū)動(dòng)開發(fā)2.1.4.2OLED器件的驅(qū)動(dòng)方式音頻分析系統(tǒng)Linux開發(fā)案例2.有源驅(qū)動(dòng)有源驅(qū)動(dòng)的每個(gè)像素都配備了具有開關(guān)功能的低溫多晶硅薄膜晶體管(TFT),而且每個(gè)像素都配備了一個(gè)電荷存儲(chǔ)電容,外圍驅(qū)動(dòng)電路和顯示陣列集成在同一玻璃基板上。由于LCD采用電壓驅(qū)動(dòng),OLED卻依賴電流驅(qū)動(dòng),因此與LCD相同的TFT結(jié)構(gòu),無法用于OLED,需要能讓足夠電流通過導(dǎo)通阻抗較小的小型驅(qū)動(dòng)TFT。有源驅(qū)動(dòng)屬于靜態(tài)驅(qū)動(dòng),可進(jìn)行100%的負(fù)載驅(qū)動(dòng),且不受掃描電極數(shù)的限制,可以獨(dú)立地對(duì)每個(gè)像素進(jìn)行選擇性調(diào)節(jié)。有源驅(qū)動(dòng)無占空比問題,易于實(shí)現(xiàn)高亮度和高分辨率,由于有源驅(qū)動(dòng)可以對(duì)紅色像素和藍(lán)色像素獨(dú)立地進(jìn)行灰度調(diào)節(jié),更有利于OLED彩色化實(shí)現(xiàn)。2.1.4OLEDLinux驅(qū)動(dòng)開發(fā)2.1.4.2OLED器件的驅(qū)動(dòng)方式音頻分析系統(tǒng)Linux開發(fā)案例

本項(xiàng)目采用了SSD1306OLED,是一個(gè)單片OLED/PLED驅(qū)動(dòng)芯片,可以驅(qū)動(dòng)有機(jī)/聚合發(fā)光二極管點(diǎn)陣圖形顯示系統(tǒng),由128列和64行組成,該芯片專為共陰極OLED面板設(shè)計(jì)。SSD1306中嵌入了對(duì)比度控制器、顯示RAM和晶振,從而減少了外部器件和功耗,有256級(jí)亮度控制。

數(shù)據(jù)/命令的發(fā)送有三種接口可選擇:6800/8000、I2C或SPI,本節(jié)采用I2C接口,驅(qū)動(dòng)指令如表所示。2.1.4OLEDLinux驅(qū)動(dòng)開發(fā)2.1.4.3OLED硬件音頻分析系統(tǒng)Linux開發(fā)案例

2.1.4OLEDLinux驅(qū)動(dòng)開發(fā)2.1.4.3OLED硬件音頻分析系統(tǒng)Linux開發(fā)案例

2.1.4OLEDLinux驅(qū)動(dòng)開發(fā)2.1.4.3OLED硬件音頻分析系統(tǒng)Linux開發(fā)案例

2.1.4OLEDLinux驅(qū)動(dòng)開發(fā)2.1.4.3OLED硬件OLED顯示技術(shù)具有自發(fā)光的特性,采用非常薄的有機(jī)材料涂層和玻璃基板,當(dāng)有電流通過時(shí),這些有機(jī)材料就會(huì)發(fā)光,而且OLED顯示屏幕可視角度大,并且能夠節(jié)省電能,從2003年開始這種顯示設(shè)備在MP3播放器上得到了應(yīng)用。0.96寸OLED顯示屏接口定義如表所示。引

腳符

號(hào)引

腳符

號(hào)引

腳符

號(hào)1GND2C2P3C2N4C1P5C1N6VDDB7NC8VSS9VDD10BS011BS112BS213CS#14RES#15D/C#16R/W#17E/RD#18D019D120D221D322D423D524D625D726IREF27VCOMH28VCC29VLSS30GND音頻分析系統(tǒng)Linux開發(fā)案例

2.1.4OLEDLinux驅(qū)動(dòng)開發(fā)2.1.4.3OLED硬件OLED驅(qū)動(dòng)方式:模塊的通信接口是通過BS0,BS1,BS2三個(gè)管腳來配置的。項(xiàng)目中使用i2c接口進(jìn)行開發(fā),如表所示。通信方式BS0BS1BS2i2c0103線SPI1004線SPI0008-bit68XX并口0018-bit80XX并口011音頻分析系統(tǒng)Linux開發(fā)案例

2.1.4OLEDLinux驅(qū)動(dòng)開發(fā)2.1.4.3OLED硬件OLED原理圖SCL,SDA對(duì)應(yīng)的是I2C總線2,OLED起始地址0x39。主要是通過SDA,SCL引腳進(jìn)行通信i2c通信,通過寫命令,寫數(shù)據(jù)對(duì)顯示器進(jìn)行控制,如圖所示。音頻分析系統(tǒng)Linux開發(fā)案例

2.1.4OLEDLinux驅(qū)動(dòng)開發(fā)2.1.4.4OLEDLinux驅(qū)動(dòng)程序開發(fā)I2C驅(qū)動(dòng)時(shí),有4個(gè)步驟,前2個(gè)步驟屬于I2C總線驅(qū)動(dòng),后面2個(gè)步驟屬于I2C設(shè)備驅(qū)動(dòng)。過程如下(具體步驟與LCD類似,請(qǐng)查看源文檔):(1)提供I2C適配器的硬件驅(qū)動(dòng),探測(cè),初始化I2C適配器,驅(qū)動(dòng)CPU控制的I2C適配器從硬件上產(chǎn)生。(2)提供I2C控制的algorithm,

用具體適配器的xxx_xfer()函數(shù)填充i2c_algorithm的master_xfer指針,并把i2c_algorithm指針賦給i2c_adapter的algo指針。(3)實(shí)現(xiàn)I2C設(shè)備驅(qū)動(dòng)中的i2c_driver接口,用具體yyy的yyy_probe(),yyy_remove(),yyy_suspend(),yyy_resume()函數(shù)指針和i2c_device_id設(shè)備ID表賦給i2c_driver的probe,remove,suspend,resume和id_table指針。(4)實(shí)現(xiàn)I2C設(shè)備所對(duì)應(yīng)類型的具體驅(qū)動(dòng),i2c_driver只是實(shí)現(xiàn)設(shè)備與總線的掛接。(OLED驅(qū)動(dòng)源碼詳細(xì)請(qǐng)查看文檔)音頻分析系統(tǒng)Linux開發(fā)案例

2.1.4OLEDLinux驅(qū)動(dòng)開發(fā)2.1.4.5OLEDLinux應(yīng)用程序OLED屏驅(qū)動(dòng)主要實(shí)現(xiàn)對(duì)硬件設(shè)備的基本控制,具體的功能要由上層應(yīng)用調(diào)用驅(qū)動(dòng)提供的接口對(duì)設(shè)備進(jìn)行控制。OLED屏應(yīng)用功能函數(shù)說明如表所示。(oled源碼源碼詳細(xì)請(qǐng)查看文檔)函數(shù)名稱參數(shù)說明函數(shù)功能voidoledInit(void)無OLED屏初始化staticvoiddumRam(void)無OLED屏顯示Ram數(shù)組內(nèi)容voidoledPoint(intx,inty,intst)x:行坐標(biāo)y:列坐標(biāo)OLED屏設(shè)置指定坐標(biāo)數(shù)據(jù)voidoledDraw(char*buf)buf:顯示緩沖區(qū)OLED屏Ram數(shù)組從緩沖區(qū)取值voidoledClear(void)無OLED屏清屏voidoledFlush(void)無OLED屏刷新顯示內(nèi)容音頻分析系統(tǒng)Linux開發(fā)案例

2.1.4OLEDLinux驅(qū)動(dòng)開發(fā)2.1.4.5OLEDLinux應(yīng)用程序oled應(yīng)用功能,流程分析:1)oledInit()初始化點(diǎn)陣屏硬件;2)fontShow16(16,8,"Welcome!",oledPoint)設(shè)置要顯示的坐標(biāo)與字符數(shù)據(jù)3)oledFlush()刷新顯示(oled源碼源碼詳細(xì)請(qǐng)查看文檔)#include<unistd.h>#include<math.h>#include<stdlib.h>#include"oled.h"#include"utils.h"#include"font.h"intmain(intargc,char*argv[]){ oledInit(); fontShow16(16,8,"Welcome!",oledPoint); oledFlush(); return0;}音頻分析系統(tǒng)Linux開發(fā)案例

2.1.5開發(fā)實(shí)踐:顯示模塊驅(qū)動(dòng)開發(fā)與測(cè)試1、ARM擴(kuò)展模塊硬件連接從ARM擴(kuò)展模塊上拆下STM32核心板,然后將ARM擴(kuò)展模塊與網(wǎng)關(guān)連接,如圖2.4所示,框線內(nèi)為網(wǎng)關(guān)的ARM擴(kuò)展模塊接口(EXT)。使用交叉網(wǎng)線連接邊緣計(jì)算網(wǎng)關(guān)(LAN口)和PC,使網(wǎng)關(guān)、PC、虛擬機(jī)處于統(tǒng)一網(wǎng)段。音頻分析系統(tǒng)Linux開發(fā)案例

2.1.5開發(fā)實(shí)踐:顯示模塊驅(qū)動(dòng)開發(fā)與測(cè)試2、點(diǎn)陣屏驅(qū)動(dòng)開發(fā)1)硬件原理圖音頻分析系統(tǒng)Linux開發(fā)案例

2.1.5開發(fā)實(shí)踐:顯示模塊驅(qū)動(dòng)開發(fā)與測(cè)試2、點(diǎn)陣屏驅(qū)動(dòng)開發(fā)2)硬件說明:點(diǎn)陣屏通過HTML6K33芯片進(jìn)行驅(qū)動(dòng),使用i2c接口。3)首先建立交叉編譯開發(fā)環(huán)境,內(nèi)核必須是被編譯過的,如果已經(jīng)建立好了,就不需要再建立了。然后將“FFTDriver”目錄下的ht16k33Driver文件夾拷貝到Linux開發(fā)主機(jī)中當(dāng)前用戶文件夾。4)打開終端,進(jìn)行驅(qū)動(dòng)源碼目錄,輸入make命令,進(jìn)行編譯(Makefile文件中kernel源碼目錄要確認(rèn)無誤,否則會(huì)編譯報(bào)錯(cuò))。編譯完成后會(huì)生成ht16k33.ko文件。5)通過Moba軟件將成生的驅(qū)動(dòng)程序ht16k33.ko文件復(fù)制到邊緣計(jì)算網(wǎng)關(guān)。通過sudoinsmodht16k33.ko加載驅(qū)動(dòng)。test@rk3399:~$lsht16k33.koht16k33.kotest@rk3399:~$sudoinsmodht16k33.ko6)如果驅(qū)動(dòng)加載成功,可以在/sys目錄查看驅(qū)動(dòng)信息。test@rk3399:~$ls/sys/bus/i2c/devices/i2c-2/2-0070/brightnessbufferdrivermodaliasnamepowersubsystemueventtest@rk3399:~$cat/sys/bus/i2c/devices/i2c-2/2-0070/modaliasi2c:ht16k33音頻分析系統(tǒng)Linux開發(fā)案例

2.1.5開發(fā)實(shí)踐:顯示模塊驅(qū)動(dòng)開發(fā)與測(cè)試3、點(diǎn)陣屏應(yīng)用開發(fā)與測(cè)試1)通過Moba軟件將“FFTDriver”目錄下的ht16k33App文件夾復(fù)制到邊緣計(jì)算網(wǎng)關(guān)。2)在應(yīng)用程序源碼目錄進(jìn)行

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論