原文:http://lxr.linux.no/#linux+v2.6.32/Documentation/sound/alsa/soc/
Embedded linux 裡的audio通常是由ASoC (Alsa System on Chip)這個subsystem實作,此subsystem由Wolfson提出,用來針對portable embedded system的聲音支援。
ASoC subsystem對embedded SoC及可攜式的auido codec提供較好alsa支援。在ASoC subsystem之前,在kernel也有SoC audio的支援,但有一些限制:
1. codec driver跟SoC CPU有相依性,因此不同的cpu就需要不同的driver
2. 對於audio event (如插入headphone/mic)並沒有標準的通知方法。
3. power management的支援較差

ASoC的設計

ASoC就是要解決上述限制,其特色如下:
1. codec independence:不同platform可用同一隻codec driver
2. 在codec/CPU之間的簡易I2S/PCM/AC97介面
3. DAPM (Dynamic Audio Power Management)
4. 減少pop和click (audio component在power up/down時的副作用,就是雜音啦)
5. 對音效卡特定的控制,如控制放大器的音量。Machine透過I2C控制codec。
因此,在設計上,將audio system分成3個部分:

kezeodsnx 發表在 痞客邦 留言(1) 人氣()

1. usb不支援peer to peer的傳輸,因此必須是master/slave
2. 隨身碟插入電腦,host為電腦,隨身碟為device (通常pc都是host)
3. 在沒有電腦的情況下,兩個devices要傳輸,仍然必須基於master/slave的架構。因此就有了OTG這個技術,使得device可藉由protocol ( HNPHost negotiation protocol)的溝通決定誰是host/device。例如,camera直接輸出到printer,則camera須為host,printer需為device。因此camera必須支援OTG傳輸。兩台mp3 player的情況也類似,兩台支援OTG的mp3連在一起,一樣會有一個host一個device。
4. 通常pc上不會有OTG,而都是host,但公板上可能會有一個OTG,這是為了在download mode的需要。

kezeodsnx 發表在 痞客邦 留言(0) 人氣()

power-saving-tech
1. power consumption包括static和dynamic。static主要是因為leakage current,而dynamic是因為state轉換,因此隨著複雜度昇高
2. 省電技術:
frequency scaling: 對clock降頻

kezeodsnx 發表在 痞客邦 留言(0) 人氣()

來源:  http://www.digitimes.com.tw/tw/dt/n/shwnws.asp?CnlID=10&cat=30&id=0000134347_WOQ2P3YI5WDWNT6PU5EVU&ct=2
PLL(Phase Lock Loop),照字面上解釋為鎖相迴路技術,此技術演進已有數十年歷史,以往多用來作為對產品、晶片時脈或頻率的精確控制。
基本上,任何有關頻率調諧,或是數位電子產品的時脈控制功能,都可使用PLL來設計頻率控制迴路,一方面簡化電路本身設計的複雜度,另一方面,也可增加精確性。
由於PLL技術層次並不高,加上應用範圍廣泛,因此台系類比IC設計業者幾乎人人都有PLL晶片產品線,主要用來搭配自家的電源管理(Power Management)IC及其他高階類比IC產品線,這幾年在同業價格競爭激勵下,PLL甚至被視為半買半相送的附贈品。

kezeodsnx 發表在 痞客邦 留言(0) 人氣()


來源: Linux 使用 USB 裝置筆記
USB規格簡介
USB Univeral Serial Bus (通用串列匯流排),常見的外部匯流排,支援熱插拔 (hot plugable),一個 USB 最多可以連接127個裝置。
目前規格包括:

  • USB 1.1 支援二種傳輸速率:Low speed - 1.5 Mbps 及 Full Speed - 12 Mbps。

  • USB 2.0 傳輸速率 480 Mbps 並支援 USB 1.1。


  • USB 採用 Single-Master (單主控) 設計,線路架構就像多個點對點的樹狀結構,具 USB 介面的 PC 至少有一個 "root hub",並提供二個外接孔供 USB 設備或另一個 USB hub。在電腦中的 USB 主控器會去 poll USB 匯流排上的各個裝置,每個 USB 設備連接到主機時,USB 主控器會分配一個代碼給該裝置,並讀取該裝置的描述表 (Device Descriptor) 以獲知裝置的硬體資訊。
    USB 主控器(USB hoot Controller) 分為三種規格:
      1. OHCI (Open Host Controller Interface):USB 1.1 規格,Compaq(康柏)公司主導, 使用廠商包括 Compaq、iMacs、OPTi、SIS、ALi,採用 Memory-mapped 的 I/O 方式 (CPU   使用記憶體指令來存取 USB 主控),非intel chipset應該是用這個controller。
      2. UHCI (Universal Host Controller Interface) :USB 1.0 規格(Full and low speed),Intel公司提倡, 線路比 OHCI 線路簡單(與OHCI不相容),但是需要比較複雜的驅動程式,對CPU負擔也微重了些,使用廠商包括 Intel、VIA,採用 I/O-mapped 的 I/O 方式 (CPU 使用 I/O 指令來存取 USB 主控器)。因此intel/via應該是用UHCI,其他則用OHCI。
      3. EHCI (Enhanced Host Controller Interface):USB 2.0 規格,速度較快 (480 Mbps),支援 USB 1.1,相容於 OHCI 和 UHCI。EHCI只提供High speed,full/low speed則由OHCI/UHCI負責。
    PC上這三種HCI皆可共存。
    note: xHCI(eXtensible Host Controller Interface)是更新的host controller。目的是用來取代OHCI/UHCI/EHCI,並提供high/full/low speed,也是USB 3.0的標準。
     
    Linux 對 USB的支援
    Linux 從 kernel 2.2.7 版本便開始支援 USB,USB 2.0 是從 2.4.19 開始, Linux 以三層式架構來支援 USB 系統,這三層是內核層 (Core) 、主控層 (Controller)、裝置層 (Device)。內核層指的是 kernel 對 USB 系統的支援,主控層對應到不同規格的 USB 主控器,連接 USB 設備時不必考慮主控器的規格,裝置層的設定,依裝置類型會有所不同。
    Linux USB 驅動程式共有三種不同的 USB 主控制器選項,因為在主板和 PCI 卡上有三種不同類型的 USB 控制晶片。

  • EHCI (ehci-hcd.o) :USB 2.0 協定的晶片。

  • OHCI (usb-ohci.o) :非 PC 系統上的(以及帶有 SiS 和 ALi 晶片組的 PC 主板上的)USB 晶片。

  • UHCI (usb-uhci.o) :大部份 PC 主機板(包括 Intel 和 Via)。


  • 在 Linux 下可查詢 /proc/pci 所記錄的 PCI 子系統資源配置情況,或指令 lspci,從中分辦出 USB 主控器屬於那種規格,只需載入 USB 類型對應的 ?HCI 驅動程式即可,若單獨載入 EHCI 不行,則根據主板類型載入UHCI 或 OHCI 後,再載入EHCI。
    使 用 usbmodules 指令可查詢己連接至系統的 USB 裝置有那些可以使用的核心驅動模組,在載入/卸載核心模組會利用到 usbmodules 程式,利用 hotplug 或 usbmgr 程式可以在 USB 裝置與電腦連接/移除時,自動載入/卸載核心模組、執行相關 Scripts。
     
    Linux 相關的指令和檔案:
    mount none /proc/bus/usb -t usbdevfs
    usbmodules
    hotplug
    usbmgr
    /etc/usbmgr/
    /etc/hotplug/
    Linux 對應USB設備一些常用必要的驅動程式模組:
    usbcore.o:支援usb所需要的最基礎模組。
    usb-uhci.o / usb-ohci.o / ehci-hcd.o:USB 控制晶片驅動程式。
    uhci.o :另一個uhci驅動程式,一般不需載入,可能會當機。
    hid.o:USB人機界面設備,如滑鼠、鍵盤。
    usbmouse.o:USB滑鼠(還需再載入mousedev.o)。
    usbkbd.o:USB鍵盤(還需再載入keybdev.o)。
    usb-storage.o:USB 存儲設備,Flash Disk 等。
    usbnet.o:USB並聯線,讓兩部電腦資料透過USB傳輸。

    Linux 相關驅動程式模組:

    ide-disk.o :IDE硬碟。
    ide-scsi.o :把IDE設備類比SCSI介面。
    scsi_mod.o:SCSI 裝置。
    sd_mod.o:SCSI硬碟。
    sr_mod.o:SCSI光碟機。
    sg.o:SCSI 一般裝置,在某些 Flash Disk、SCSI裝置偵測中會使用到。


    Linux 使用 Flash Disk 需要載入的模組:

    1.usbcore
    2.usb-uhci / usb-ohci / ehci-hcd
    3.scsi_mod
    4.sd_mod
    5.usb-storage

    kezeodsnx 發表在 痞客邦 留言(0) 人氣()

    device透過bus來跟系統做communication。系統上有好幾種bus,cpu bus,pci bus等,每種bus的spec不用,因此不會隨便接。platform device是linux下,一種與cpu bus連接的機制,因此其特色就是direct addressing。其與傳統的linux device driver在資源管理上有些優勢: 藉由將自己本身的資源向kernel註冊,由kernel來做統一管理。其方式為使用platform device所提供的api,這樣在可移植性和安全性上也會有一些好處。
    下面以framebuffer device做例子,說明如何註冊device與driver。
    Platform device
    include/linux/platform_device.h

    kezeodsnx 發表在 痞客邦 留言(0) 人氣()

    了解framebuffer driver,skeletonfb.c有著一個framebuffer基本的架構,值得參考。筆記如下:
    顯卡可支援多螢幕,因此可能有多個display。而每個display可有自己的data,因此每個display都是一個framebuffer device,意即各有其fb_info。fb_info中的par是硬體相關的state,硬體只有一份,因此這些state對每個display來說是共享的。任一個display做了改變 (如resolution,var->xres和var->yres),其他的display都可得知此狀況。以下是framebuffer driver需要或不需要實作的function:
    int xxxfb_init(void):
        在linux kernel 2.6後引入platform的概念,讓driver更加容易實作。這個function的功能是向platform註冊這支driver,即執行platform_driver_register()。如int __init   s3c2410fb_init(void)

    kezeodsnx 發表在 痞客邦 留言(0) 人氣()

    來源: LCD Driver 筆記 - Frame Buffer
    什麼是framebuffer 設備:
    framebuffer 是一種能夠提取圖形的硬件設備,是用戶進入圖形界面很好的接口。
    有了framebuffer,用戶的應用程序不需要對底層的驅動的深入瞭解就能夠做出很好的圖形。
    對於用戶而言,它和 /dev 下面的其他設備沒有什麼區別,用戶可以把 framebuffer 看成一塊內存,既可以向這塊內存中寫入數據,也可以從這塊內存中讀取數據。
    第一個被註冊的 framebuffer 的 minor 等於0,第二個被註冊的 framebuffer的minor 等於 1,以此類推。其 major 都為 29。
    framebuffer 內部結構說明:
    相關檔案:
    linux/include/linux/fb.h
    linux/drivers/video/fbmem.c

    fb_var_screeninfo 是用來描述圖形卡的特性的。通常是被用戶設置的。

    kezeodsnx 發表在 痞客邦 留言(1) 人氣()

    來源: FCLK, HCLK, PCLK
     
    因應不同的硬體元件
    有不同的 clock
    arm裡面
    有三個clock - FCLK, HCLK, PCLK
    FCLK: 用於CPU
    HCLK: 用於 controller (including memory, interrupt,LCD), DMA, Usb host block
    PCLK: 用於 peripheral
    Mpll 產生 clock 然後依照FCLK, HCLK, and PCLK的分配比率 來產生不同硬體元件的 clock
    FCL, HCLK, PCLK的比率分配產生 由設定CLKDIVN(0x4C000014)來得到
    Mpll的產生有一個公式 Mpll = (2*m*Fin)/(p*2^s)
    m = (MDIV + 8)
    p= (PDIV + 2)
    s = SDIV
    MDIV, PDIV, and SDIV 由設定 MPLLCON(0x4c000004)得到
    如此一來
    就可以得到FCLK, HCLK, PCLK.
    Upll 則是用於 USB的設備
    計算的概念相同
    可參考
    UPLLCON(0x3c000008)

    kezeodsnx 發表在 痞客邦 留言(0) 人氣()


    來源: UART
    通用非同步收發傳輸器(Universal Asynchronous Receiver/Transmitter,通常稱作UART,讀音/ˈjuːɑrt/)是一種非同步收發傳輸器,是電腦硬體的一部分,將資料由序列傳輸(Serial communication)與平行傳輸(Parallel communication)間作傳輸轉換。UART通常用在與其他通訊協定(如EIA RS-232)的連結上。

    kezeodsnx 發表在 痞客邦 留言(0) 人氣()

    來源: SPI (Serial Peripheral Interface Bus) & IIC (Inter Integrated Circuit)

    SPI是現在所謂的RS232功能,這種功能大都使用硬體的方式來處理,使用者只需要將速度..等參數設定好之後,對SBUF丟資料即可,這種傳輸方式最大的缺點是速度不高,最高只有119200bps,一般是拿來做控制的信號傳輸使用而已,不能夠傳大量的資料,因為很慢!這種型態可以拿來做同步雙向傳輸使用,其內部的頻率是以counter來計算的,例如頻率是9600bps,就是每 9600分之一秒自動傳送一個bit,沒有其他的信號來觸發傳送.
    以上是UART而非SPI, 感謝讀者指出。
    所謂I2C就是一般常見到的IIC, Inter Integrated Circuit. 最早的版本是PHILPS公司在1992所設計的串列匯流排介面,利用兩條訊號控制線來進行資料傳輸,其中兩條訊號控制線分別為:
    SCL(Serial Clock) : 作為資料傳輸時的參考時脈
    SDA(Serial Data) : 以串列傳輸(一次一位元)的方式傳送資料
    如此的設計是適用於IC與IC之間的資料溝通,低功率且速度快.而且分為master和slave裝置,利用master裝置發送訊號出去,每一 個具有IIC介面的晶片都有一個屬於IIC的識別ID碼.因此同樣的SCL與SDA控制線上可一次並聯2的n次方晶片,當master裝置發送訊號出去 時,並聯的晶片將同時收到訊號,但只有正確對應的ID碼晶片才會回送訊息給master端,進而執行資料傳輸的動作.特別需要注意到的一點是,IIC裝置 的slave端無法主動傳送或要求訊號,一定要先由master端發送訊號後,才能有所回應!!
    I2C這種方式的傳輸最大可以有400Kbps只比SPI快三倍多而已,它的腳位是2支腳(接地不算),一個叫SDA另一個叫SCL,這種型態多半是拿來做電路板之內各個IC之間的橫向溝通,因此400Kbps的速度其實也是游刃有餘,它的工作方式是以SCL來當做觸發準位,平常時都是在high, 一旦遇到要傳輸開始,就會產生一個Low電位,然後再去SDA取樣(信號端),這種方式由於是所有IC都共用這兩條線,所以在發送資料之前還必須再多送一 個slave address,以利IC辨別現在是在呼叫誰,否則大家同時都收到,卻不知道哪一個要回應會造成錯亂. PS. 液晶電視內部這兩種傳輸方式都有用到.
    I2C(InterIntegrated Circuit)匯流排是一種由PHILIPS公司開發的兩線式串列匯流排,用於連接微控制器及其週邊設備。I2C 匯流排產生於在80年 代,最初為音訊和視頻設備開發,如今主要在伺服器管理中使用,其中包括單個元件狀態的通信。例如管理員可對各個元件進行查詢,以管理系統的配置或掌握元件 的功能狀態,如電源和系統風扇。可隨時監控記憶體、硬碟、網路、系統溫度等多個參數,增加了系統的安全性,方便了管理。
     
    加註:
    既生spi,何生I2C?
    1.
    SPI每條線皆單向,可以做增強及隔離。
    IIC每加一個裝置,也不用加線是最大好處。因各有所長,所以在不同場合使用。

    2.
    SPI與I2C的傳輸封包是不一樣的 
    相對的運用場合也不同 
    舉例來說I2C的傳輸封包中包含了位置訊息,故可以支援一對多傳輸方式,而SPI就沒有這樣的功能

    3.
    I2C可以做multi-mast,SPI不行
    4.
    BUS的定訂一定有其時空背景
    只是follow的人多不多,不好用就會慢慢消失
    PS: SPI 速度比較快-->可達50MHz以上
    I2C應該不行,另外有SMbus也是架構在I2C上
    5.
    SPI傳輸協定簡單,很容易就上手了。但若要做到一對多傳輸的話,有點麻煩,必須利用CS選擇線來做選擇。但i2C就沒有這種問題,在加上只需要兩支IO就可以做到一對多的傳輸
    6.
    uart就是通常说的串口了,固定波特率通信,双方点对点固定的通信
    spi是可以支持多个设备通信,但是需要有选择线(CS),两个设备之间互相通信的话至少要3根,如果1主2从就要5根线了(因为主设备要提供2根CS选择到底和哪个从设备通信,不过1根CS再加非门也可以),但是spi速度很快
    i2c是根据特定的协议(时序)以及器件号来进行通信的,只使用两跟线就可以在总线上挂很多设备,这在I/O口资源不丰富的情况下很好用,我现在就在找I2C的器件,但是I2C速度慢,消耗CPU时间
    总结,spi,i2c都能多对多双向通信,但是spi速度快,占用I/O口多,i2c速度慢,占用口少,uart的优缺点倒还真不知道,只是经常用来和PC通信
    7.
    任何接口都适用在CPU和外围的芯片之间做接口,包括SPI/IIC/UART。
    在低速领域(8位单片机极其周边设备),IIC/SPI/UART都可以用来作为配置(寄存器),也可以用来数据传输。
    在高速领域(32位系统极其周边设备),IIC/SPI/UART一般只用来作为配置(寄存器),基本不会用来数据传输,因为速度慢,会严重影响传输效率。
    针对这个情况,现在有高速的UART,特别适用在蓝牙的VOIP的大数据量传输。有高速SPI,适用在数字电视(DTV/DMB/CMMB,etc)模块的大数据量传输。
    当然这些只是考虑了消费领域,如果考虑工业领域,那这几个就得分别考虑了,因为要牵涉到干扰、辐射、功率等因素了。
    8.
    IIC/SPI/UART统称为通讯接口,一般CPU都是Master,发起方,外设都是slave,被动方。
    CPU一般有地址总线、数据总线。而IO一般都会有一些复用功能,这些虽然是控制管脚,但不是“总线”的概念。
    地址总线/数据总线很少和IO口复用,只有极少数的芯片会将A0地址线、D16以上的数据线和IO口复用。但是现在涉及到DDR SDRAM的cpu接口,绝对不会有这样的复用了。
     
    9.
    总线的英文是bus,而bus在我们的学习体系中刚接触的翻译是:公交汽车,也就是一车带N多人的。所以,总线原本的含义是:N多线由控制器统一控制,设计者无法对其中某一个信号单独控制。这也是地址、数据总线的表现状态。
    而控制信号就是反面表现了,分别独立,单独控制,互不影响等等。
    倒不是说绝对不能叫“控制总线”,而是习惯不会这么说。你真要这么说,也不会有人拿枪逼着你改,放心。
    目前嵌入式上用的DDR SDRAM的速率虽然不高(一般都是133MHz,也就是DDR 266的),但是DDR对于边沿的要求很高,稍微一些毛刺就直接over了。如果在这个控制器上贸然引入别的设备,很容易就将总线拉垮的。
     
    Reference
    http://topic.csdn.net/u/20080613/17/cc9e59f6-5d2a-4dfe-94ae-e977329c4f4e.html
    http://www.haifeng.idv.tw/leo/cgi-bin/topic.cgi?forum=53&topic=334&show=&replynum=0
     
     

    kezeodsnx 發表在 痞客邦 留言(4) 人氣()

    [轉載請註明出處] http://kezeodsnx.pixnet.net/blog
    作者: kezeodsnx
    簡介
    framebuffer (fbdev)的特色是與硬體無關的抽像層,用來在console做圖形的處理,好處是不需要如Xwindow這些loading很大的東西來完成圖形化的display。目前來說,包括gtk,qt都可直接操作framebuffer,而不需透過X-windows。意思是在一些resource相對珍貴的embedded system,可以享受到gtk的library,直接對framebuffer做render (GtkFB),而不用透過X-windows這麼龐大的東西。然而,bottleneck是performance,但DirectFB解決了這個問題,它提供了硬體加速的framework。

    kezeodsnx 發表在 痞客邦 留言(0) 人氣()

    « 1 2 3
    Blog Stats
    ⚠️

    成人內容提醒

    本部落格內容僅限年滿十八歲者瀏覽。
    若您未滿十八歲,請立即離開。

    已滿十八歲者,亦請勿將內容提供給未成年人士。