Note: Test build Legato Platform of Sierra on Ubuntu 14.04

只需要在Sierra Wireless 上註冊帳號就可以下載他的 Source code
它現在採主流 Embedded Linux 的開發環境 Yocto Project,解開後很簡單只需下 make 就可以完成 喔對了網頁上會寫要裝哪些套件成功 build code

但是如果按照這樣的步驟會發現有兩個 package 會出現問題 原因是他在bb 的function 中呼叫了 bash 的內建函式 而bb是呼叫/bin/sh 在 Ubuntu 上預設的 sh 是dash 所以會不能正確執行, 需要做一個work around 當然你也可以手動砍掉symolically 在重新建立連到 bash 的link 也是可行的

 

  • Check that /bin/sh (ls -l /bin/sh) is not symbolically linked to dash. “dash" is a POSIX compliant shell that is much smaller than “bash" — however some broken shell scripts still make use of bash extensions while calling into /bin/sh. To work around this issue call “sudo dpkg-reconfigure dash" and select No when it asks you to install dash as /bin/sh.

 

廣告

Work note: eMenlow Bring Up

最近終於拿到第一版 Atom Z530 + Poulsbo US15W(SCH, System Control Hub, 即傳統的南北橋合一版) board,但是卻卡關在Power sequence 很久一直進不到BIOS.

該版預計Power Sequence control 最後會由 EC(Embedded controller)實做這部份, 但是一開始同樣使用 intel refernce design 的 CPLD code. 也實際量測各種信號的時序, 皆如同參考設計, 但是一直不會跑完整個流程, 每次都是發出RST_N, 換SCH本身要發 CPU Power Good and CPU Reset 給Atom processor這里發不出來, 跟據Intel 的不齊全文件, 得知當 RST_N 發出來後, SCH 會去ROM/BIOS space 讀 CMC(Chipset Microcode Code), 將SCH本身做正確的初始化.

SCH  透過GPIO 3/0 的狀態去引導, 從那個 address讀 CMC, 這檢查過很多遍, 最後HW連 LA都搬出來, 確認過確實有讀到CMC, Intel 參考設計是 0xFFFD0000

最後發現因為該版是DRAM 直接Mount 在板上, 其SPD 的資料未寫, 導致SCH無法正確初始化, 這個問題有兩個選擇, 透過寫入正確的SPD資料, 或是使用Intel 的 SoftStraps tools 可以去modify 對應的設定!

這是跟傳統平台, 進入BIOS才初始Memory controller 有很大的不同, 導致一開始Debug 方向錯誤, 多花一兩週工作時間.

Intel 主導的 Open NAND Flash Interface & Read Unique ID

Read Unique ID by NAND Flash 結果發現這個是需要NDA license 的指令,真是一整個不懂Device 提供一個Read Unique ID Commnad 就要簽NDA? 檯面上得說法是為了讓透過NAND做安全性的應用時得到更大的安全保証,像是增加被破解難度之類的理由。不過個人深深覺得這是爛理由XD,畢竟真的搞Crack/Hack 的都有其他管道可以得到更多Information ,只是徒增一般人使用困擾而已。(很多Device都需要有Unique ID,尤其在手機上面)

不過也發現了 Intel 主導的 Open NAND Flash Interface 聯盟已經出了ONFI v1.0 的spec. 其中Block Abstracted NAND Specificaiton 中已經制定了一個標準Command 可以讀到 NAND Flash 本身的Unique ID。

目前加入這個聯盟的廠商有

  • Hynix
  • Intel
  • Micron
  • Phison
  • Sony
  • STMicroelelctronics

雖然在NAND 供應商市佔率的角度來看還是遠不及 Toshiba & Samsung 不過也許還是有機會變成Standard Interface of NAND Flash吧?

NAND Unique ID – 128bit Length

(WM6 目前的UniqueID Length要求也從WM5之前的 48bits提升到128bits)

48bits 同Ethernet MAC address length

東芝、三星將聯抗英特爾 LBA陣營崛起 ONFI陣營拉警報

這則新聞提到 Toshiba 自訂 LBA 規格,目前跟ONFI 2.0要競爭,不知道最後誰勝誰負,不過 ONFI v2.0 目前好像還在草案階段。不過NAND Flash 導入45nm 以下製程是2008年勢在必行的吧。這樣看來沒有規格依循還真是大問題。

難怪MDOC 一直改版 😥

並聯 AC to DC Bridge 的方法

上圖是將兩個 Bridge 並聯成一個大電流的Bridge使用

要是兩個還是不夠 依然可以一此方法並聯成為一個 4, 8, …顆 的大型Bridge這樣設計的優點是不需要特別去找大容量的 Bridge,而且比較容易不會受到大電流的Bridge的體積限制 可以比較有彈性的擺置在電路板上。

這是昨天看到 交換式電源供應器設計與最佳化中譯版,書中的一圖。


原書

Switching Power Supply Design & Optimization

NVidia GoForce 4800 and GFSDK API

GoForce 4800 有提供一個 GFSDK Api for Software Development

但是 有些東西 GFSDK 並未提供 Hardware controller mapping

例如 下列的程式是將 Flat plan 的的幾隻接腳(FGP2/Reset, FGP3/PWDN) 設成程式可以控制 , 用來產生OmniVision 2640 的 Initial signal

const UINT32 G4800_BASE_ADDR = 0x14000000;
const UINT32 G4800_FPGPIO_OFFSET = 0xB40;
const UINT32 G4800_FPGPIO_PA_ADDR = G4800_BASE_ADDR + G4800_FPGPIO_OFFSET;

typedef struct {
UINT32 FP10;
UINT32 FP11;
UINT32 FP12;
UINT32 FP13;
UINT32 FP14; // Read Only
UINT32 FP15;
UINT32 FP16;
} G4800_FPGPIO, *P_G4800_FPGPIO;

PHYSICAL_ADDRESS liAddr;
P_G4800_FPGPIO pFPGPIO = NULL;
liAddr.QuadPart = G4800_FPGPIO_PA_ADDR;

pFPGPIO = (P_G4800_FPGPIO) MmMapIoSpace(liAddr, sizeof(G4800_FPGPIO), FALSE);

// Configuration FP_GPIO
pFPGPIO->FP11 &= (~((1<<3) | (1<<2))); // active-high
pFPGPIO->FP15 &= (~((1<<6) | (1<<7)));
// setting FGP2 and FGP3 using FP13 output, FP12 is output select
pFPGPIO->FP12 &= ( ~((1<<4) | (1<<5) | (1<<6) | (1<<7)) );
// setting PWDN to Low““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““““
pFPGPIO->FP13 &= (~(1<<3)); // output data

//setting Reset to High
pFPGPIO->FP13 |= (1<<2); // output data
Sleep(100);
//setting Reset to low
pFPGPIO->FP13 &= (~(1<<2)); // output data
Sleep(100);
//setting Reset to High
pFPGPIO->FP13 |= (1<<2); // output data

 

OmniVision OV2640 Check list and App Note.

1. Get a laster datasheet from Module Vendor or OmniVision, Currently v1.8

2. Get a Power On/Off sequence, from OmniVision

3. Check Volatage level (Core VDD, great than 1.32V is prefect)

4. Generation a correct waveform by PWDN(Power Down) and Reset 

    PWDN  HHH  (50ms)HHHLLLLLLLLLLLLLLLLLLLLLL……..

    RESET  HHHH(50ms + 10ms)HHHHHHLLLL(20ms)LLLLHHHHHHHHH…..

5. Initial OV2640 parameters and reading ID thought SCCB(I2C) bus.

 

OV2640 and OV2630 control signal is difference, so PWDN and RESET using  GPIO is prefect.

 

Technorati tags: , , ,