2013年4月8日 星期一

i.MX51 u-boot splash screen supported

其實我是下載這包 code 後才發現現在 u-boot (2013.04.rc2) 有支援 i.MX51, 53 的 splash screen (boot-screen), 而且也支援 console stdout 轉向.

http://www.eewiki.net/display/linuxonarm/i.MX51+EVK

附帶一提, USB EHCI 也支援了, 而且傳輸速度相當的快 (實測有 34MiB/s, 不知道是我眼花還是怎樣..)

只是目前有兩個東西還沒打通, 還在試. 一個是 SPI NOR flash, 一個是 NAND flash (有人有出 patch, 我有照著改, 但還是不會動).

擺在這筆記一下.

ps. 2013/04/10 在 denx u-boot 官方的 mxc-spi.c code 裡, 它操作 SS0/SS1 這些 chip-select 動作都是用 gpio_set_value 的方式達成. 這樣的做法有好有壞, 以下就以不更動 denx 的 driver code 前提下修改板子的定義 header ( include/configs/%board%.h )

我是修改自 vision2, 還有 mx51_efikamx 的設定而來.
-------------------------------------------------

/*
 * SPI Configs
 */
#define CONFIG_CMD_SPI
#define CONFIG_MXC_SPI

#define CONFIG_FSL_SF
#define CONFIG_CMD_SF

#define CONFIG_SPI_FLASH
#define CONFIG_SPI_FLASH_ATMEL   //看需要更改.

/*
 * Use gpio 4 pin 25 as chip select for SPI flash
 * This corresponds to gpio 121
 */
#define CONFIG_SF_DEFAULT_CS     ( 1 | (121 << 8 ) )
#define CONFIG_SF_DEFAULT_MODE   (SPI_MODE_0)
#define CONFIG_SF_DEFAULT_SPEED  25000000

#define CONFIG_ENV_SPI_CS        ( 1 | (121 << 8 ) )
#define CONFIG_ENV_SPI_BUS       0
#define CONFIG_ENV_SPI_MAX_HZ    25000000
#define CONFIG_ENV_SPI_MODE      (SPI_MODE_0)

//384KiB
#define CONFIG_ENV_OFFSET       (6 * 64 * 1024)
#define CONFIG_ENV_SECT_SIZE    (1 * 64 * 1024)
#define CONFIG_ENV_SIZE         (4 * 1024)

//這邊的設定要注意擺在哪裡.
#define CONFIG_FSL_ENV_IN_SF
#define CONFIG_ENV_IS_IN_SPI_FLASH

// 這個定義建議一起改掉.
#define CONFIG_FSL_PMIC_CS      ( 0 | (120 << 8 ) )
-------------------------------------------------

以上還不是最主要的, 最主要的在 board init 的 code 裡. 以下翻改自 mx51evk.c, 紅色是刪除, 藍色是新增:
-------------------------------------------------

#ifdef CONFIG_MXC_SPI
static void setup_iomux_spi(void)
{
        /* 000: Select mux mode: ALT0 mux port: MOSI of instance: ecspi1 */
        mxc_request_iomux(MX51_PIN_CSPI1_MOSI, IOMUX_CONFIG_ALT0);
        mxc_iomux_set_pad(MX51_PIN_CSPI1_MOSI, 0x105);

        /* 000: Select mux mode: ALT0 mux port: MISO of instance: ecspi1. */
        mxc_request_iomux(MX51_PIN_CSPI1_MISO, IOMUX_CONFIG_ALT0);
        mxc_iomux_set_pad(MX51_PIN_CSPI1_MISO, 0x105);

        /* de-select SS1 of instance: ecspi1. */
        mxc_request_iomux(MX51_PIN_CSPI1_SS1, IOMUX_CONFIG_ALT3);
        mxc_iomux_set_pad(MX51_PIN_CSPI1_SS1, 0x85);

        /* 000: Select mux mode: ALT0 mux port: SS0 ecspi1 */
        //mxc_request_iomux(MX51_PIN_CSPI1_SS0, IOMUX_CONFIG_ALT0);
        //mxc_iomux_set_pad(MX51_PIN_CSPI1_SS0, 0x185);
        mxc_request_iomux(MX51_PIN_CSPI1_SS0, IOMUX_CONFIG_ALT3);
        mxc_iomux_set_pad(MX51_PIN_CSPI1_SS0, 0x85);

        /* 000: Select mux mode: ALT0 mux port: RDY of instance: ecspi1. */
        mxc_request_iomux(MX51_PIN_CSPI1_RDY, IOMUX_CONFIG_ALT0);
        mxc_iomux_set_pad(MX51_PIN_CSPI1_RDY, 0x180);

        /* 000: Select mux mode: ALT0 mux port: SCLK of instance: ecspi1. */
        mxc_request_iomux(MX51_PIN_CSPI1_SCLK, IOMUX_CONFIG_ALT0);
        mxc_iomux_set_pad(MX51_PIN_CSPI1_SCLK, 0x105);
        
        gpio_direction_output(IMX_GPIO_NR(4, 24), 0);   //SS0 active
        gpio_direction_output(IMX_GPIO_NR(4, 25), 1);   //SS1 active
        // IMX_GPIO_NR(4, 24) 可以用 120 取代, IMX_GPIO_NR(4, 25) 可以用 121 取代.
}
#endif

-------------------------------------------------

前面提到 SPI 的 chip-select 是用 GPIO 的方式操作, 所以
1. 只要找好 GPIO 編號拉好線, 理論上就可以再擴充 SPI NOR flash.
2. 操作是單一 pin 單一 chip-select 沒有二進位編碼, 需要更複雜的編碼制可能要自行修改 mxc_spi.c

後記 2013/04/14
SPI ROM 開機有幾點要注意:

1. ROM imae 起始點在 0x400
2. 起始點 0 ~ 0x3FF 這 1024 個 byte 最好全 erase 掉, 否則怪怪的.


後記 2013/09/01:

1. 有的 SPI 會這樣設:
#define CONFIG_SF_DEFAULT_MODE   (SPI_MODE_0 | SPI_CS_HIGH)
SPI_CS_HIGH 的用意是這個裝置 CS 為 high-active, 所以如果是 low-active 的, 千萬不要設...

2. SS0 跟 SS1 一開始不但要改成 GPIO, 還要注意這兩個分別是 hi 還 lo active, 記得預設要讓 bus 空著.


3. 這個設定在 SPI bus 同時有一個裝置以上時, 一定要設定:
#define CONFIG_FSL_PMIC_CS              (0 | 120 << 8) 
否則 gpio_set_value 會無法設定到正確的 GPIO pin.

前面文章是參考 mx51_efikamx 的設定, 卻沒有注意到 SST 跟 ATMEL 的 CS 是相反的..

2013年4月6日 星期六

所謂景深

其實在這之前就有人寫過一篇專文專門講景深:
寫給新手:景深概論
這裡只是再貼幾張實拍圖佐證而已.

理論在那篇文裡已經提了很多, 總之淺景深決定在

  1. 距離. 特別是前景離的有多遠
  2. 焦段. 焦段越長其實效果越明顯.
  3. 焦距. 越貼近最近對焦距, 效果會越明顯.
  4. 光圈. 這個是很多論譚大大最愛提的
  5. 片幅. 老實講這是最不重要的.

這是用 50mm, 光圈 F4.0 下拍的:

這是 50mm, 也是光圈 F4.0 下拍的. 不一樣的是離的比較近.

這是 50mm, 但光圈更小, F5.6. 不一樣的是距離靠的非常近, 用最近焦距在拍.
主體物靠最近對焦距離越近, 效果越明顯.


再來就是焦段. 實際上, 實體焦段越長的, 越容易拍出淺景深:
這是 Tamron A005 300mm 焦段拍的. 這個光圈更小, F 9.0






















長焦段其實意味另一個物理意義, 就是影像的光學放大比例, 焦段越長, 光學放大倍率越高, 所以沒有被合焦到的地方, 影像會因為散焦的關係, 成像會更加的柔和.

這張就是一個例子, 這張照片是拿 Nikon D600 + Nikon 16-35 拍的, 左邊看起來景深很深, 右邊看起來景深很淺. 但這兩張其實是同一張圖. 左邊是原圖 6106x4016 縮 640x480, 右邊是原圖切割出其中的 640x480, 相當於 300.8mm 的焦段. 所以, 這邊只是要簡單的說明, 柔焦是另一種影像被放大, 但不合焦後的成像.

























再來要講的就是焦距, 特別是最近對焦距. 最近對焦距通常要透過查詢 (通常會標在鏡頭上) 或實測來得到這個值, 基本上越長的焦段, 但越短的最近對焦距, 會擁有更深的景深效果. 如下面這張, 這張拍照時使用的光圈也不大, F5.6, 但因為這顆鏡頭最近對焦距離只有 0.28m (即使是在 70mm 焦段), 前景和背景分離的效果變的很出色:























但因為最近對焦距離已經算是被鏡頭訂死的限制, 所以除非鏡頭本身就可以對焦對很近, 否則不要把這個因素擺在平常會考慮的項目裡.

再來才是光圈和片幅. 光圈和片幅一個被訂死在鏡頭, 一個被訂死在機身, 鏡頭的光圈值有時會因為實拍環境下的亮度, 還有畫面清析程度, 甚至是對焦的易難考量下, 除非是夜間, 否則基本上很少會去用極大光圈去拍,
當然不可否認的, 大光圈有它的效果在. 只是我會建議先滿足前面的距離比條件後, 再去開大光圈才會有用, 像這張 (50mm F1.4D F2.8):
並不是即使離很遠, 狂開光圈也會有淺景深, 絕對不會是這個樣子.

我不把大光圈寫在前面是因為, 把光圈開大其實有很多壞處, 畫質下降和對焦失焦率大增是很嚴重的影響. 像這張我就拍了五六張才準焦兩張, 挑其中的一張出來 (50mm F1.4D F2.8):






















夜間拍攝時, 大光圈絕對是必要之惡... (AiS 55mm F1.2, F1.2)






















景深的確很淺, 沒錯.
但很柔的背景中卻沒有清楚的前景, 這跟直接失焦有什麼差別? :P



最後最後, 講到片幅嘛... 這是相機裡根本不可能變動的因子, 基本上討論它沒有太大意義, 不過還是拿來講一下...

試想, 底片上所產生的成像, 這個影像就是你在觀景窗或 lifeview 裡看到的影像, 所以這個影像裡的相對距離分離的有多遠, 就相對於在底片上的相對距離有多遠.

這張是拿 Panasonic GF2 拍的, GF2 的片幅只有多小, 我想不需要我再提..

























其實會有這個效果是因為它裝的是 50mm 焦段的鏡頭. (canon FL 50mm F1.8 S.C.)

這張是 Panasonic FS-12, 片幅是 1/2.33 吋, 這時鏡頭焦段只有 5.5mm, 所以不用期待它會有什麼景深...

























這是後來 (20130521) 做的測試, 跟上一張不一樣的地方在, 這次有開微距. 在足夠近的對焦距離下, 就可以構成分離度夠好的前景與背景:
可以確定的是只有 5.5mm 這種極短焦距的鏡頭也可以做的到散景, 但必需要靠的很近就是它先天 (廣角焦段) 的限制.

以下是手機 Sony ericsson Xperia ARC.

這張是 Sony ericsson Xperia ARC 照的. 片幅有多大我忘了, 總之不會有 DC 那麼 "巨大". 這個鏡頭焦段只有多少我不清楚, 我是猜比 DC 還要短. 所以跟 DC 一樣光學放大率都不高, 基本上也不要期待有太好的景深...



















片幅, 也就是底片有效範圍的影響, 其實也是另外一種距離因素, 只是它是橫寬, 不是縱深. 但是相機裡的空間不管再怎麼寬, 也不會比外在要拍的環境縱深來的深, 換言之, 用片幅的橫寬來換取外在景物的縱深, 是完全的捨本逐末.

總之, 片幅有影響, 但都遠遠不如前面四個因素 (距離, 焦長, 對焦距離, 光圈) 的影響來的大, 幾乎是可以被忽略的因素.



ok. 最後!! 希望大家都能只用手機, 就可以拍的出想要的淺景深.


2013年4月4日 星期四

Sigma 8-16mm F4.5-5.6 DC 小小測試

這裡只是做一點小比較, photozone 做的測試較精準且量化的多, 當然我絕對不是因為這顆拿到 Highly Recommend 才買它的.. 會買這顆是考慮幾個理由:
  1. 10mm 的焦段加上 APS-C 的 crop-size 約等於 135片幅下 15mm 焦段的裁切範圍, 而 135 片幅用的鏡頭也有 16mm 廣角. 而且我自己有一顆 16-35, 我會覺的買 10-24 等於再買一顆 16-35 一樣..
  2. 有人很喜歡呱呱呱的說啥等效焦段, 但實際上 10mm 焦段下的所有光學特性 (焦距, 放大比例, 廣角的峽狀變形, 遠近物的分離感, ...) 跟 15mm 根本不一樣. 有興趣深究的人可以找找 sigma 8-16 和 12-24 這兩顆鏡頭拍出來的感覺, 12-24 的 12 端再怎樣都不會有 8-16 的 8 端那麼誇張的峽狀變形效果. 簡單的說, 焦段本身是無法被取代的一樣參數, 也不會是被等於的東西, 它最多只能被稱為 等效.
  3. 8-16 這種焦段, APS-C 底片用, 而且還是非魚眼, 以我所知除了 sigma 以外沒有第二家有做這種產品, 而 10mm 以下的非魚眼變焦, 另一顆更有名的是 Olympus 7-14mm F4 這顆 (4/3 mount), Panasonic 的版本應該也是拿這顆再改成 M4/3 mount, Panasonic 這顆在 photozone 的測試裡, 解析力也蠻強的, 也同樣拿到四顆星的推薦獎. 可是這顆市價比 Sigma 貴, Olympus 那顆的價格是 Panasonic 大約再乘以二, 相較之下這顆就算只能 MF 都比較超值, 但是, 它是 4/3 (M4/3) mount, 別的機種 (ex. NEX, samsung NX, ...) 沒有用它的機會, 對我是沒有吸引力的 :P (這顆有機械光圈)
  4. 光圈葉片數比較多, 這顆是七片, 12-24 和 12-24II 是六片, 夜拍的效果會好上一點點. 而且其實這顆跟 12-24II 之間我比較過很久, 有部份是因為畫質的因素選了這顆.
  5. Nikon 家的 135 DSLR 都可以吃 DX 鏡頭, 就算換 135 DSLR 也沒什麼差別..
  6. 因為它焦距短, 景深深, 所以手動對焦非常好對.


缺點唷.... 目前的感想:

  1. 可用光圈不夠大. 不過這是它的缺點同時也是優點.
  2. 沒防手震. 有防手振的話可能就不會那麼利了吧... 
  3. 手動對焦環阻力頗大. 但我覺的這同時也是它的優點.
  4. 花瓣罩是死的, 也無法上保護鏡. 個人覺的不很適合當旅遊鏡.
  5. 花瓣罩用的鋁外框並沒有扣住鏡頭, 而鏡頭蓋是扣在鋁外框上的.


先來幾張外觀照:

打開的樣子. 花瓣照是死的, 不能上保護鏡


外蓋. 72mm口徑. 鏡頭在裝上這東西時, 只有 16mm 焦段不會被擋到... XD
請小心, 它的帽子並沒有扣到鏡頭...


以下是測試照片, 都以 16mm 焦段, 全開放光圈為主. 機身 Panasonic GF2, 有外接閃光燈, 手動模式觸發, AWB為閃光燈,  4000x3000 大小, 100% 裁切 1024x768 大小 (相對座標為 x:1310, y:1250) 圖塊做比較:

Nikon 16-35mm F/4G ED VR 16mm段, F4.0

Panasonic 14-42 F3.5-5.6 (kit 鏡), 16mm 段, F5.6

Sigma 8-16 16mm段, F5.6

老實講如果不論發色, 這裡面 Panasonic 的 kit 鏡解析力較 Sigma 稍優....
而且 16mm 其實對 Sigma 這顆是最不利的焦段, 解析力都可以拼成這樣.

update 20130615: 新增 12, 14, 16 端在 full-frame (135) 機器上的成像範圍供參考:

12mm:
 14mm (這時勉強算可用範圍):
 16mm (可用範圍):
老實講比起 nikon 16-35 F/4G 這個變形王起來好太多了 =_=

其它的原始測試照片 (縮圖) 可以來這裡

其它一些零散的測試照.







2014/05/14追加...
廣角星芒的一個共通點, 就是小... 沒辦法, 畫面收太廣, 單一個光源的折射光範圍一定會變小..