Friday, October 9, 2015

U-boot porting JZ2440 - support NAND FLAHS

3.6 修改UBOOT支持NAND FLASH
3.6.1 修改:include/configs/smdk2440.h: #define CONFIG_CMD_NAND   
3.6.2 drivers/mtd/nand/s3c2410_nand.c複製為s3c2440_nand.c

U-boot porting JZ2440 - support DM9000

3.7 修改UBOOT支持DM9000網卡
3.7.1 搜尋DM9000關鍵字, 發現/driver/net/Makefile中,
 ======================================================
Makefile
......

Character Bitmap display - 3. use Freetype lib.

2.3 Use Freetype libraury

  • 可變大小字體
之前在LCD上顯示的字體為固定大小,無法調整大小,這邊利用 Freetype libra. 來讓字體可以旋轉、改變大小。


  • 原理簡述
Freetype 將一個文字,分解成關鍵點、貝塞爾曲線,利用文字關鍵點、透過貝塞爾曲線連接關鍵點,形成若干個閉合曲線所構成的文字,再填充文字內部,即可形成一個向量圖型文字,好處是只需要儲存少量資訊,且顯示字體的大小,不受解析度影響,既放大字體不會降低繪製的精度。

Wednesday, October 7, 2015

Character Bitmap display - 2

2.2 LCD上顯示固定大小中英字體
需先安裝 LCD Driver,接著撰寫應用程式,導入HZK16漢字庫,將要顯示的字元,透過漢字庫,尋找到相應字元,輸出到 LCD 螢幕上。

  • HZK16重點摘要:

Character Bitmap display - 1

2.1 字元編碼觀念

  • 文字編碼方式

原始檔案用不同的編碼方式編寫,會導致執行結果不一樣
怎麼解決?編譯器時,要指定字元集
查詢: man gcc , /charset
-finput-charset=charset  表示原始檔案的編碼方式, 預設以UTF-8來解析
-fexec-charset=charset   表示可執行程式裡的字時候以什麼編碼方式來表示,預設是UTF-8
gcc -finput-charset=GBK -fexec-charset=UTF-8 -o utf-8_2 ansi.c

實驗:將兩種不同編碼方式的文件(ansi.c and utf-8.c),字元"abc中"輸出16進制數值

Friday, September 25, 2015

Char Device Driver - 2_led on/off

實作 3:  led 燈號控制驅動程式,針對開發版上個別led燈號做 on/off 控制
加入次設備號,次設備號給自己的驅動程式內部使用,並了解如何撰寫驅動程式的硬體控制,與裸機程式相同,但需先利用ioremap 將 i/o 物理記憶體位置,映射到kernel虛擬地址,此後才可以使用。

Thursday, September 24, 2015

Char Device Driver - 1_Architecture


驅動程式框架:
User space 的 APP 透過 open, read, write, close, ioctl, llseek, fsync 等函數來對應 Kernel space 裡的 Device driver: open, read,  write, close, ioctl, llseek, fsync 。
以 LED 驅動程式為例,架構如下,
----------------------------------------APP:  open, write
----------------------------------------system call
----------------------------------------VFS
----------------------------------------Device Driver:  led_open,  led_write
----------------------------------------Hardware

Monday, September 21, 2015

U-boot Porting JZ2440 - Reduce Code Size && Set User Value

3.8 U-boot 縮小code size,易用性修改

3.8.1 打造自己的環境參數,在燒寫uboot時,常需要手動設定一些環境參數,如set ipaddr、set ethaddr、....,在使用上不方便
首先規劃參數在 nand flash 存放區塊如下圖

Tuesday, September 8, 2015

Bootloader

Bootloader概念
關於S3C2440的啟動方式有兩種Nor Flash 啟動和Nand Flash 啟動
Nor Flash Nand Flash 都是非易失性記憶體,Nor Flash 的特點是晶片內執行和不能直接寫操作,程式可以直接在其中運行,而不必將程式讀取到RAM 中運行。Nor Flash 雖然具有這個優點,但是它的性價比遠低於Nand Flash,因而很多系統採用Nand Flash 啟動。Nand Flash 的特點是採用非線性存儲模式,程式無法在其中運行,它只能作為程式或資料的存儲載體,存儲在其中的程式只能先拷貝到RAM 中才能運行。

Monday, August 31, 2015

UART

UART(Universal Asynchronous Receiver/Transmitter)通用異步收發器,它就是個設備而已,要完成一個特定的功能的硬體,它本身並不是協定。那麼它要完成什麼功能呢?它的最基本功能,是串列資料和並行資料之間的轉換,將一個Byte轉換成8bit按照時間先後順序發送。
UART採非同步的全雙工傳輸方式,傳輸串列資料,非同步在傳送資料時需插入額外資訊,表示資料起始、結束,非同步的好處是設定時間短、硬體成本低、機器時脈不同也能傳資料,缺點是單次傳輸的資料量較少。

Sunday, August 30, 2015

System Clock

System Clock硬體操作流程較簡單,重點在於知道如何設定PLLs(Phase Locked Loops),來符合周邊硬體(peripheral block) 時脈需求。

Interrupt Controller

ARM中斷控制器使用方式,首先需了解CPU的7種工作模式,接著從外圍設備開始,需要設定PIN腳為中斷功能,使得PIN腳能接收中斷訊號,中斷訊號進來後,中斷控制器需設定相關暫存器來判斷中段訊號源,從哪一個外圍設備發出中斷訊號,多個中斷訊號來源,設定優先順序,得知中斷訊號源時,CPU會切換到相應的工作模式(異常模式中一種),並跳去相應的異常向量位置(ex. 0x00, 0x04,...),去執行中斷程序(ex. reset, HandleIRQ,...),執行完畢,退出中斷程序,再返回原本的工作模式。

Sunday, August 23, 2015

學習筆記 - NAND FLASH

FLASH 特性:

  1. NOR FLASH 支持XIP,既程式可以直接在NOR FLASH執行,無需複製到內存中,這是因為NOR FLASH的接口與RAM相同,可以隨機訪問任意地址數據。
  2. FLASH 儲存單元由擦除單元組成,也稱為塊(block),要寫入數據時,需要確保這個block已被擦除。
  3. 擦/寫 一個NOR FLASH 塊需要4s,擦/寫 一個NAND FLASH僅需2ms。
  4. NOR FLASH用於儲存程式,NAND FLASH用儲存數據。
  5. FLASH 可靠性依據:(1)位反轉(2)壞軌(3)可擦除次數

Wednesday, August 19, 2015

Memory Management Unit

學習筆記 - Memory Management Unit

MMU特性:


  1. 虛擬地址與物理地址轉換
  2. MMU內存訪問機制
電腦在處理資料時,當應用程式很大,應用程式所要求的內存空間,超過內存的總容量。電腦所採取的作法是分批處理,當前運行程式部分先裝入內存處理,其餘部分程式在用到時,再從硬碟或FLASH等儲存裝置調入,當內存滿時,則將暫時不運行程式部分調入硬碟或FLASH等儲存裝置。如此使得大程式可以在小的內存空間中運行。

Wednesday, August 12, 2015

Memory Controller

學習筆記 - Memory Controller

實驗:
從 NAND Flash 啟動 CPU 時,CPU 藉由硬體,自動複製 NAND Flash 前 4KB 數據到稱作 Steppingstone 的內部 RAM 中(起始地址為 0),然後跳到地址0開始執行,實驗先透過組語設置好 memory controller,使外接 SDRAM 可用,然後把程式從 Steppingstone 的內部 RAM 位置,複製到 SDRAM 處,最後在 SDRAM 中執行。