1.08.2008

osrmt : open source requirement management tool

James要一個 Requirement Management System,直接google,好像就只有 osrmt (open-source requirement management tool)。

是用 java 寫的,所以install 方式也很java。
在 sourceforge page都找不到任何文件,download 回來解開也是一個 jar 檔而已,沒有 README和INSTALL。

到forume去看,原來要run 這個jar檔,就會產生install文件。
java -jar osrmt15.jar
這個jar 需要X,所以要在X下run (或是重導)。
依照內容"click-click-click"後,就出現osrmt目錄,裡面的配置就很像一般的opensource package了。

然後在 doc 下就有 : osrmt_installation.pdf

30 page的安裝說明,要決定是使用 2-tire 或是 3-tire的方式。
但是說明內容大部分都是Windows平台

哇!安裝起來真是麻煩呀,因為option 很多,連database 都可以選,還要自己改xml...

1.07.2008

found : usb no actin after waking up from sleep.

Wake up 後USB就不能動作了:

結果是 USB/UART multiplex chip 的問題,multiplex chip 的switch id pin 接到 cpu。
cpu 沒有program 成input (float),加上有 pull-up 電阻,所以真正的 USB_ID signale 沒辦法把 id pin 拉到 low,導致 multiplex一直切在 UART 端。

所以 USB 不會通。

sleep 後才發生問題:因為 initial boot 是設對的,但是 wakeup/sleep 的gpio program function 又把他設回去了。


結果 : 寫在function 的 power-up function 中比較保險。

最好還是不要在USB D+/D- 上動手腳。

1.05.2008

一直都是用wl-330,接到 hub上,來讓另一層的所有電腦能夠經由wl-330連到AP上網。
但是前一陣子想換到wl-330g後,不成功,換回wl-330時,竟然不能用了。

這樣使用的配置:要配置成adaptor mode,然後不clone mac。

問題大概就在clone mac上吧,config wl-330有兩種方法 : browser和config application。

browser好像不行,好像設好了,結果卻沒設。後來還是裝回wl-330的configuration applicaion才讓她動起來 (用wl-330g的設定程式不行)。

Sirf InstantFix II

Sirf 的新技術,可以將 cold start time由 30 sec縮短到 5sec。

從 其他站台的報導文件好像是說....利用前一次關機前定位的時間和定位資訊,猜測目前(利用目前時間)的衛星位址,來省去需要由衛星下載資訊的30sec時間。

以上都是我猜的....

1.04.2008

要configure (poweron) usb function controller,有一些register要設:

MISCCR
  • bit 12 (SEL_SUSPEND) : 0 Normal Mode, 1 Suspend Mode
PWRCFG
  • bit 4 (nSW_PHY_OFF_USB) : 0 Power Off USB PHY, 1 Power ON PHY
URSTCON (USB Reset Controller)
  • bit 2 (FUNC_RESET)
  • bit 1 (HOST_RESET)
  • bit 0 (PHY_RESET)
使用上bit 設為1 就是reset,但是要記得,要設回0。
code上的說明是,要先 reset PHY,10us 後再reset FUNC和HOST

PHYCTRL
設定PHY用的crystal,都是0就是...外接crystal 48MHz,device mode
PHYPWR
  • bit 31 (COMMON_ON_N) : ohci (host) crystal 在suspend mode是否仍要power on。 0 : Off
  • bit 5:4 (ANALOG_POWERDOWN) : 01 , 關掉 PHY2.0 的analog part。 其他的值:power on (normal)
  • bit 3 (PLL_REF_CLK) : 0 使用外部crystal
  • bit 2 (XO_ON) : 0 XO block power down in suspend mode.
  • bit 1 (PLL_POWERDOWN) : 0 : PHY2.0 PLL power down.
  • bit 0 (FORCE_SUSPEND) : 0 normal operation, 1 apply suspend signal for power saving,
很複雜,一個PHY竟然區分成 PLL, Analog Part

UCLKON (USB Clock Control)
一堆,DETECT_VBUS,host/function clock enable/disable

1.03.2008

ADV7180 - about interrupt

ADV7180 有一個中斷輸出 pin : INTRQ.

先看一些縮寫好了 -____-

VDP : (VBI Data Processor).
VBI : Vertical Blanking Interval.

這是因為analog的電視把一些data (例如:字幕),放到畫面的 vertical blanking interval (就是畫面裡,上,下不會顯示出來的區域)。
所以需要額外的processor 來處理這一段的資料。

放在這個區域的資料可能會有:
  • teletext
  • CC/CCAP (Close Caption)
  • CGMS (Copy Generation Management System)
  • WSS (Wide Screen Signaling)
所以ADV7180 的 VDP (Vertical Blanking Interval Data Processor) 可以decode 這些standard
因為這些 VBI 的資料不是一直都有,VDP處理也需要時間,所以VDP 可以trigger Interrupt,programmer 可以設定,當VDP處理完哪些資料後,trigger interrupt。


Interrupt System Register Map : register 0x40 ~ 0x9C (不連續)

這一段 的register 好像都是設定 interrupt,開頭有個小小的 * mark:
To access the registers listed in Table, SUB_USER_EN in register 0x0E must be programed to 1.
所以說,要access interrupt 相關的register,要先把 register 0x0E 寫入 0x20 才行..
那寫完後要不要寫回0x00?

configure interrupt 的trigger source 要program interrupt mask,總共有4個interrupt mask.

但是有說明的部份,只有和VDP相關的部份,對於video detection 則沒有提,只有在register map 中的 bit name... (是要自己猜 ?)。

要偵測 video signal 是否存在,猜測幾個 interrupt status bit:
  • SD_LOCK_Q
  • SD_H_LOCK
  • SD_V_LOCK
使用一個 polling thread,polling reg 0x42 (先set reg 0x0E =0x20 再read reg 0x42)。

只read 0x42 : SD_LOCK, SD_UNLOCK:
  • Video 插入時,會有SD_LOCK
  • Video 移出時,會有SD_UNLOCK
這兩個interrupt 只有在"狀態變化" 時,才會動作。 ( edge-trigger)。
也就是說:
  1. Video 插入
  2. SD_LOCK = 1
  3. 寫入 reg 0x43 = 0x01 (clear SD_LOCK)
  4. SD_LOCK = 0 (雖然這時候 Video 依然插著)
  5. 拔出 Video
  6. SD_UNLOCK = 1
  7. 寫入 reg 0x43 = 0x02 (clear SD_UNLOCK)
  8. SD_UNLOCK = 0 (雖然這時候 Video 還沒插入)
  9. --- 回到 1---繼續
上面 "寫入 reg 0x43" 是 ADV7180 的interrupt 動作機制,意思ack interrupt。
!!發現 initstate 是 assume video in,所以啟動時若是Video In,則 SD_LOCK bit 不會set,
但是若是啟動時是 Video OUT,會有SD_UNLOCK bit。


1.02.2008

Camera Interface.

CAMIF 的bus priority 只能比LCD 的priority 低,要比其她hardware都高。

CAMIF 有兩個path : preview, Capture。

preview 和 capture path 都各有4個target frame memory (4 pingpong frame memory)。
意思是依照1,2,3,4,1,2,3,4,,,依序放置 ?
pixel 的格式有YCbCr和RGB兩種方式。

YCbCr是Capture Path使用的方法,Y, Cb, Cr資料非別放在每個frame的獨立page,所以program 可以獨立得到image的Y frame資料 (或Cb, Cr資料)。

RGB是Preview Path使用的方法(Capture path好像也可以設定成這樣),可以選用 32 bit/16bit模式的RGB資料,但是每個pixel的RGB資料是組合在一起的(2或4bytes),依序放置的frame memory中,不像 YCbCr模式的方開放置。

MSDMA (不知道是什麼的縮寫)

MSDMA只能在previewpath使用 (SEL_DMA_CAM='1')。
MSDMA可以作memory data scaling,但是只支援 YCbCr Mode。
依照示意圖,MSDMA好像只是DMA,單純的作memory 到 memory的搬移,但是她還在搬移的時候作scaling的運算。
奇怪得的是,MSDMA在圖中,是作為 CAMIF--preview path的輸入端,也就是說,MSDMA處理過後的資料,進入camif的preivew path (?那MSDMA鎖需要的frame data是哪一個device放到memory中的?)


REGISTERS

CISRCFMT : 設定 source video 的format。
  • Bt601, Bt656 ?
  • YCbCr Order
  • H, V Size
CIWDOFST : 設定 source video 需不需要作clip (切割: 左右上下)。
  • 原來在 CISRCFMT中設定的source H, V size。經過這個register 中設定的上下
  • CIWDOFST只包含一側(上,左)的offset設定,另一側(下,右)在CIWDOFST2 設定。
設定這個clip (crop) 動作有一堆限制:
  • crop後的image 水平 pixel 必需要是8的倍數,同時又是PreHorRatio的4倍數
  • crop後的image 垂直 pixel ,作scale-down時,必需要是 PreVerRatio的倍數。
  • 左右切下來(不顯示)的pixel數 >= Source 水平pixel數 x PreHorRatio_Pr
CIGCTRL : 設定一些interface (PCLK, VSYNC, HREF 極性),Software/hardware reset,輸出test pattern,....etc。
要作software reset 有一定的sequence , 601 mode和656 mode還不一樣..
要配合 CISRCFMT register作設定...有點囉唆


接下來是frame memory 的設定.. CODEC Path 的 YCbCr Frame Memory.
  • CICOYSA1.2.3.4
  • CICOCBSA1.2.3.4
  • CICOCRSA1.2.3.4
上面的12個register分成3組 : Y, Cb, Cr,每組有4個區域,就是分別用來設定 Y, Cb, Cr的pin-pong frame memory 的start address。
camif 的DMA會自動將image的內容依照各個frame,依序送到這些register指定的位置。

CICOTRGFMT : 設定Codec path 的 target image (就是 camif 轉換後,放到frame memory的格式..)
  • Codec path 水平/垂直 pixel 數 (Horizontal/Vertical Size)
  • mirror / rotation
又有限制:水平/垂直pixel數一定要比 source 小 (因為crop關係 ?)
水平pixel數必需要是16的倍數
在RGB Mode,垂直pixel數比需要是8的倍數

CICOCTRL : 設定DMA每次要搬的byte(word?)數
  • DMA是一行一行 (一條一條水平線)的搬video 信號到 frame memory中,所以要告訴DMA 每一行要搬幾個byte(word)。
  • DMA的一次搬移動作分為兩個階段 : main burst, remained burst。

Preview Path 的registers

CIPRCLRSA1.2.3.4: ping-pong frame memory 的設定register。

CIPRTRGFMT : 設定 target (轉換後的) image format
  • Horizontal pixel number (16bpp時,4的倍數。 24bpp時,2的倍數)
  • Vertical pixel number (8的倍數)
  • mirror / rotate
一樣,target size不可以比source 大
CIPRCTRL : preview path 的DMA 控制。
DMA是一行(水平線)一行的搬,以 VGA ( 水平640 pixel),16 bpp 為例:
一個word可以放兩個pixel 。
所以一行 640/2 = 320 word。
320 % 16 = 0 (整除),所以 main brust = 16, remained brust = 16。


CIPRSCPRERATIO : pre-scaler ratio
  • 這部份要參考CODEC path 的說明 (設法一樣)。

camera interface 的重點好像就是在選擇 codec path 和camera interface上,這兩個path 是獨立的。

功能好像也一樣 (將codec path 的output設為 RGB的話,就和preview path 一樣了)。

preview path 有 水平處理數不得超過640的限制,Codec path 則沒有說明。
另外就是 preview path 還有一路 MSDMA可以選擇,但是...不知道要怎模用...