20170523_jeffrey - silenceuncrio/diary GitHub Wiki

0845

來準備一下待會做 M300 低溫開機的指令

預計調整的參數如下

  • SPEED[7:6] - Speed Field
    • 00 SPEED_0_low_50MHz_
    • 01 SPEED_1_medium_100MHz_
    • 10 SPEED_2_medium_100MHz_
    • 11 SPEED_3_max_200MHz_
  • DSE[5:3] - Drive Strength Field
    • 000 DSE_0_output_driver_disabled_
    • 001 DSE_1_R0_260_Ohm___3_3V__150_Ohm_1_8V__240_Ohm_for_DDR_
    • 010 DSE_2_R0_2
    • 011 DSE_3_R0_3
    • 100 DSE_4_R0_4
    • 101 DSE_5_R0_5
    • 110 DSE_6_R0_6
    • 111 DSE_7_R0_7
  • SRE[0] - Slew Rate Field
    • 0 SRE_0_Slow_Slew_Rate
    • 1 SRE_1_Fast_Slew_Rate

目前的設定是

  • SPEED[7:6] - Speed Field
    • 10 SPEED_2_medium_100MHz_
  • DSE[5:3] - Drive Strength Field
    • 110 DSE_6_R0_6
  • SRE[0] - Slew Rate Field
    • 1 SRE_1_Fast_Slew_Rate

先調整 DSE[5:3] - Drive Strength Field - 111 DSE_7_R0_7

0000 0000 0000 0000 1011 0000 1011 0001
---- ---- ---- ---- ---- ---- --++ +---
                                11 1
0000 0000 0000 0000 1011 0000 1011 1001
0    0    0    0    b    0    b    9

全部相關的暫存器一起設定的指令如下

mw 020e0404 0000b0b9 1
mw 020e0408 0000b0b9 1
mw 020e040c 0000b0b9 1

mw 020e0410 0000b0b9 1
mw 020e0414 0000b0b9 1
mw 020e0418 0000b0b9 1
mw 020e041c 0000b0b9 1

mw 020e0420 0000b0b9 1
mw 020e0424 0000b0b9 1
mw 020e0428 0000b0b9 1
mw 020e042c 0000b0b9 1

mw 020e0430 0000b0b9 1
mw 020e0434 0000b0b9 1
mw 020e0438 0000b0b9 1
mw 020e043c 0000b0b9 1

mw 020e0440 0000b0b9 1
mw 020e0444 0000b0b9 1

再來的嘗試是把速度調慢

  • SPEED[7:6] - Speed Field
    • 00 SPEED_0_low_50MHz_
  • DSE[5:3] - Drive Strength Field
    • 111 DSE_7_R0_7
  • SRE[0] - Slew Rate Field
    • 0 SRE_0_Slow_Slew_Rate
0000 0000 0000 0000 1011 0000 1011 0001
---- ---- ---- ---- ---- ---- ++++ +--+
                              0011 1  0
0000 0000 0000 0000 1011 0000 0011 1000
0    0    0    0    b    0    3    8

全部相關的暫存器一起設定的指令如下

mw 020e0404 0000b038 1
mw 020e0408 0000b038 1
mw 020e040c 0000b038 1

mw 020e0410 0000b038 1
mw 020e0414 0000b038 1
mw 020e0418 0000b038 1
mw 020e041c 0000b038 1

mw 020e0420 0000b038 1
mw 020e0424 0000b038 1
mw 020e0428 0000b038 1
mw 020e042c 0000b038 1

mw 020e0430 0000b038 1
mw 020e0434 0000b038 1
mw 020e0438 0000b038 1
mw 020e043c 0000b038 1

mw 020e0440 0000b038 1
mw 020e0444 0000b038 1

再開不起來的話就把 DSE[5:3] 調低成 001 DSE_1_R0_260_Ohm___3_3V__150_Ohm_1_8V__240_Ohm_for_DDR_

0000 0000 0000 0000 1011 0000 1011 0001
---- ---- ---- ---- ---- ---- ++++ +--+
                              0000 1  0
0000 0000 0000 0000 1011 0000 0000 1000
0    0    0    0    b    0    0    8

全部相關的暫存器一起設定的指令如下

mw 020e0404 0000b008 1
mw 020e0408 0000b008 1
mw 020e040c 0000b008 1

mw 020e0410 0000b008 1
mw 020e0414 0000b008 1
mw 020e0418 0000b008 1
mw 020e041c 0000b008 1

mw 020e0420 0000b008 1
mw 020e0424 0000b008 1
mw 020e0428 0000b008 1
mw 020e042c 0000b008 1

mw 020e0430 0000b008 1
mw 020e0434 0000b008 1
mw 020e0438 0000b008 1
mw 020e043c 0000b008 1

mw 020e0440 0000b008 1
mw 020e0444 0000b008 1

0935

直接調整 DSE[5:3]001 DSE_1_R0_260_Ohm___3_3V__150_Ohm_1_8V__240_Ohm_for_DDR_

0000 0000 0000 0000 1011 0000 1011 0001
---- ---- ---- ---- ---- ---- --++ +---
                                00 1   
0000 0000 0000 0000 1011 0000 1000 1001
0    0    0    0    b    0    8    9

全部相關的暫存器一起設定的指令如下

mw 020e0404 0000b089 1
mw 020e0408 0000b089 1
mw 020e040c 0000b089 1

mw 020e0410 0000b089 1
mw 020e0414 0000b089 1
mw 020e0418 0000b089 1
mw 020e041c 0000b089 1

mw 020e0420 0000b089 1
mw 020e0424 0000b089 1
mw 020e0428 0000b089 1
mw 020e042c 0000b089 1

mw 020e0430 0000b089 1
mw 020e0434 0000b089 1
mw 020e0438 0000b089 1
mw 020e043c 0000b089 1

mw 020e0440 0000b089 1
mw 020e0444 0000b089 1

1015

目前發現這些相關的暫存器改了 DSE[5:3] 之後就能開機的值如下

  • DSE[5:3] - 001 DSE_1_R0_260_Ohm___3_3V__150_Ohm_1_8V__240_Ohm_for_DDR_
    • 0000b089
  • DSE[5:3] - 111 DSE_7_R0_7
    • 0000b0b9
  • DSE[5:3] - 110 DSE_6_R0_6
    • 0000b0b1

奇怪的是預設獨到的值為 0000b0b1

為什麼再寫入預設值一次就能開起來

先把所有可能的 DSE[5:3] 都掃一次

  • DSE[5:3] - Drive Strength Field
    • 000 DSE_0_output_driver_disabled_
0000 0000 0000 0000 1011 0000 1011 0001
---- ---- ---- ---- ---- ---- --++ +---
                                00 0   
0000 0000 0000 0000 1011 0000 1000 0001
0    0    0    0    b    0    8    1

全部相關的暫存器一起設定的指令如下

mw 020e0404 0000b081 1
mw 020e0408 0000b081 1
mw 020e040c 0000b081 1

mw 020e0410 0000b081 1
mw 020e0414 0000b081 1
mw 020e0418 0000b081 1
mw 020e041c 0000b081 1

mw 020e0420 0000b081 1
mw 020e0424 0000b081 1
mw 020e0428 0000b081 1
mw 020e042c 0000b081 1

mw 020e0430 0000b081 1
mw 020e0434 0000b081 1
mw 020e0438 0000b081 1
mw 020e043c 0000b081 1

mw 020e0440 0000b081 1
mw 020e0444 0000b081 1

不能一口氣把 指令貼完

這一組 指令開不起來

1025

  • DSE[5:3] - Drive Strength Field
    • 010 DSE_2_R0_2
0000 0000 0000 0000 1011 0000 1011 0001
---- ---- ---- ---- ---- ---- --++ +---
                                01 0   
0000 0000 0000 0000 1011 0000 1001 0001
0    0    0    0    b    0    9    1

全部相關的暫存器一起設定的指令如下

mw 020e0404 0000b091 1
mw 020e0408 0000b091 1
mw 020e040c 0000b091 1

mw 020e0410 0000b091 1
mw 020e0414 0000b091 1
mw 020e0418 0000b091 1
mw 020e041c 0000b091 1

mw 020e0420 0000b091 1
mw 020e0424 0000b091 1
mw 020e0428 0000b091 1
mw 020e042c 0000b091 1

mw 020e0430 0000b091 1
mw 020e0434 0000b091 1
mw 020e0438 0000b091 1
mw 020e043c 0000b091 1

mw 020e0440 0000b091 1
mw 020e0444 0000b091 1

不能一口氣把 指令貼完

這一組 指令 開機成功

1030

  • DSE[5:3] - Drive Strength Field
    • 011 DSE_3_R0_3
0000 0000 0000 0000 1011 0000 1011 0001
---- ---- ---- ---- ---- ---- --++ +---
                                01 1   
0000 0000 0000 0000 1011 0000 1001 1001
0    0    0    0    b    0    9    9

全部相關的暫存器一起設定的指令如下

mw 020e0404 0000b099 1
mw 020e0408 0000b099 1
mw 020e040c 0000b099 1

mw 020e0410 0000b099 1
mw 020e0414 0000b099 1
mw 020e0418 0000b099 1
mw 020e041c 0000b099 1

mw 020e0420 0000b099 1
mw 020e0424 0000b099 1
mw 020e0428 0000b099 1
mw 020e042c 0000b099 1

mw 020e0430 0000b099 1
mw 020e0434 0000b099 1
mw 020e0438 0000b099 1
mw 020e043c 0000b099 1

mw 020e0440 0000b099 1
mw 020e0444 0000b099 1

不能一口氣把 指令貼完

這一組 指令 開機成功

繼續

  • DSE[5:3] - Drive Strength Field
    • 100 DSE_4_R0_4
0000 0000 0000 0000 1011 0000 1011 0001
---- ---- ---- ---- ---- ---- --++ +---
                                10 0   
0000 0000 0000 0000 1011 0000 1010 0001
0    0    0    0    b    0    a    1

全部相關的暫存器一起設定的指令如下

mw 020e0404 0000b0a1 1
mw 020e0408 0000b0a1 1
mw 020e040c 0000b0a1 1

mw 020e0410 0000b0a1 1
mw 020e0414 0000b0a1 1
mw 020e0418 0000b0a1 1
mw 020e041c 0000b0a1 1

mw 020e0420 0000b0a1 1
mw 020e0424 0000b0a1 1
mw 020e0428 0000b0a1 1
mw 020e042c 0000b0a1 1

mw 020e0430 0000b0a1 1
mw 020e0434 0000b0a1 1
mw 020e0438 0000b0a1 1
mw 020e043c 0000b0a1 1

mw 020e0440 0000b0a1 1
mw 020e0444 0000b0a1 1

不能一口氣把 指令貼完

這一組 指令 開機成功

1035

  • DSE[5:3] - Drive Strength Field
    • 101 DSE_5_R0_5
0000 0000 0000 0000 1011 0000 1011 0001
---- ---- ---- ---- ---- ---- --++ +---
                                10 1   
0000 0000 0000 0000 1011 0000 1010 1001
0    0    0    0    b    0    a    9

全部相關的暫存器一起設定的指令如下

mw 020e0404 0000b0a9 1
mw 020e0408 0000b0a9 1
mw 020e040c 0000b0a9 1

mw 020e0410 0000b0a9 1
mw 020e0414 0000b0a9 1
mw 020e0418 0000b0a9 1
mw 020e041c 0000b0a9 1

mw 020e0420 0000b0a9 1
mw 020e0424 0000b0a9 1
mw 020e0428 0000b0a9 1
mw 020e042c 0000b0a9 1

mw 020e0430 0000b0a9 1
mw 020e0434 0000b0a9 1
mw 020e0438 0000b0a9 1
mw 020e043c 0000b0a9 1

mw 020e0440 0000b0a9 1
mw 020e0444 0000b0a9 1

不能一口氣把 指令貼完

這一組 指令 開機成功

1045

簡單下個結論

  • DSE[5:3] - Drive Strength Field
    • 000 DSE_0_output_driver_disabled_
      • mw 020e04xx 0000b081 1
      • 開機失敗
    • 001 DSE_1_R0_260_Ohm___3_3V__150_Ohm_1_8V__240_Ohm_for_DDR_
      • mw 020e04xx 0000b089 1
      • 開機成功
    • 010 DSE_2_R0_2
      • mw 020e04xx 0000b091 1
      • 開機成功
    • 011 DSE_3_R0_3
      • mw 020e04xx 0000b099 1
      • 開機成功
    • 100 DSE_4_R0_4
      • mw 020e04xx 0000b0a1 1
      • 開機成功
    • 101 DSE_5_R0_5
      • mw 020e04xx 0000b0a9 1
      • 開機成功
    • 110 DSE_6_R0_6
      • mw 020e04xx 0000b0b1 1
      • 開機成功
    • 111 DSE_7_R0_7
      • mw 020e04xx 0000b0b9 1
      • 開機成功

奇怪的現象是一開機後利用 md 去讀取相關暫存器時讀到的值是 0000b0b1

這表示 DSE[5:3] - Drive Strength Field 的預設值為 110 DSE_6_R0_6

但這時候並無法再零下30度的條件下開機

此時若利用 mw 來做寫入的動作

只要 DSE[5:3] - Drive Strength Field 不是設定成 000 DSE_0_output_driver_disabled_ 的話

零下30度的條件下開機都成功

上面說的帶測物用的是 華邦 的 NAND Flash

待會來試一下我們目前正在用的 旺宏電子 的 NAND Flash

1300

目前的溫度條件為零下 40 度

待測物用的是 旺宏電子 的 NAND Flash

先看一下相關的暫存器的值

  • 30.5.253 SW_PAD_CTL_PAD_NAND_RE_B SW PAD Control Register
    • md 020e0404 1 - 0001f019h
  • 30.5.254 SW_PAD_CTL_PAD_NAND_WE_B SW PAD Control Register
    • md 020e0408 1 - 0001f019h
  • 30.5.255 SW_PAD_CTL_PAD_NAND_DATA00 SW PAD Control Register
    • md 020e040c 1 - 0001f019h
  • 30.5.256 SW_PAD_CTL_PAD_NAND_DATA01 SW PAD Control Register
    • md 020e0410 1 - 0001f019h
  • 30.5.257 SW_PAD_CTL_PAD_NAND_DATA02 SW PAD Control Register
    • md 020e0414 1 - 0001f019h
  • 30.5.258 SW_PAD_CTL_PAD_NAND_DATA03 SW PAD Control Register
    • md 020e0418 1 - 00013019h
  • 30.5.259 SW_PAD_CTL_PAD_NAND_DATA04 SW PAD Control Register
    • md 020e041c 1 - 000010b0h
  • 30.5.260 SW_PAD_CTL_PAD_NAND_DATA05 SW PAD Control Register
    • md 020e0420 1 - 000010b0h
  • 30.5.261 SW_PAD_CTL_PAD_NAND_DATA06 SW PAD Control Register
    • md 020e0424 1 - 000010b0h
  • 30.5.262 SW_PAD_CTL_PAD_NAND_DATA07 SW PAD Control Register
    • md 020e0428 1 - 000010b0h
  • 30.5.263 SW_PAD_CTL_PAD_NAND_ALE SW PAD Control Register
    • md 020e042c 1 - 000010b0h
  • 30.5.264 SW_PAD_CTL_PAD_NAND_WP_B SW PAD Control Register
    • md 020e0430 1 - 00007091h
  • 30.5.265 SW_PAD_CTL_PAD_NAND_READY_B SW PAD Control Register
    • md 020e0434 1 - 00007091h
  • 30.5.266 SW_PAD_CTL_PAD_NAND_CE0_B SW PAD Control Register
    • md 020e0438 1 - 00007091h
  • 30.5.267 SW_PAD_CTL_PAD_NAND_CE1_B SW PAD Control Register
    • md 020e043c 1 - 00007091h
  • 30.5.268 SW_PAD_CTL_PAD_NAND_CLE SW PAD Control Register
    • md 020e0440 1 - 00007091h
  • 30.5.269 SW_PAD_CTL_PAD_NAND_DQS SW PAD Control Register
    • md 020e0444 1 - 00007091h

這一台跟我在是溫的位置上的暫存器值不同

試著分析一下


0001f019h

0000 0000 0000 0001 1111 0001 1001b

  • HYS[16] = 1b
    • HYS_1_Hysteresis_Enabled — Hysteresis Enabled
  • PUS[15:14] = 11b
    • PUS_3_22K_Ohm_Pull_Up — 22K Ohm Pull Up
  • PUE[13] = 1b
    • PUE_1_Pull — Pull
  • PKE[12] = 1b
    • PKE_1_Pull_Keeper_Enabled — Pull/Keeper Enabled
  • ODE[11] = 0b
    • ODE_0_Open_Drain_Disabled — Open Drain Disabled
  • SPEED[7:6] = 00b
    • SPEED_0_low_50MHz_ — low(50MHz)
  • DSE[5:3] = 011b
    • DSE_3_R0_3 — R0/3
  • SRE[0] = 1b
    • SRE_1_Fast_Slew_Rate — Fast Slew Rate

000010b0h

0000 0000 0000 0000 0001 0000 1011 0000b

  • HYS[16] = 0b
    • HYS_0_Hysteresis_Disabled
  • PUS[15:14] = 00b
    • PUS_0_100K_Ohm_Pull_Down
  • PUE[13] = 0b
    • PUE_0_Keeper
  • PKE[12] = 1b
    • PKE_1_Pull_Keeper_Enabled
  • ODE[11] = 0b
    • ODE_0_Open_Drain_Disabled
  • SPEED[7:6] = 10b
    • SPEED_2_medium_100MHz_
  • DSE[5:3] = 110b
    • DSE_6_R0_6
  • SRE[0] = 0b
    • SRE_0_Slow_Slew_Rate

00007091h

0000 0000 0000 0000 0111 0000 1001 0001b

  • HYS[16] = 0b
    • HYS_0_Hysteresis_Disabled
  • PUS[15:14] = 01b
    • PUS_1_47K_Ohm_Pull_Up
  • PUE[13] = 1b
    • PUE_1_Pull
  • PKE[12] = 1b
    • PKE_1_Pull_Keeper_Enabled
  • ODE[11] = 0b
    • ODE_0_Open_Drain_Disabled
  • SPEED[7:6] = 10b
    • SPEED_2_medium_100MHz_
  • DSE[5:3] = 010b
    • DSE_2_R0_2
  • SRE[0] = 1b
    • SRE_1_Fast_Slew_Rate

從上面三種值看來

這 17 個暫存器為何是這三種值目前看不出甚麼結論

從 datasheet 上看到 從 30.5.25330.5.269 這 17 個 rigester 的 reset value 都是 000010b0h

不管目前這 17 個暫存器其值為何

就用這所謂的 reset value 直接對這 17 個 NAND 相關的暫存器全部都寫一次

mw 020e0404 000010b0 1
mw 020e0408 000010b0 1
mw 020e040c 000010b0 1
mw 020e0410 000010b0 1
mw 020e0414 000010b0 1
mw 020e0418 000010b0 1
mw 020e041c 000010b0 1
mw 020e0420 000010b0 1

mw 020e0424 000010b0 1
mw 020e0428 000010b0 1
mw 020e042c 000010b0 1
mw 020e0430 000010b0 1
mw 020e0434 000010b0 1
mw 020e0438 000010b0 1
mw 020e043c 000010b0 1
mw 020e0440 000010b0 1
mw 020e0444 000010b0 1

使用 旺宏電子 的 NAND Flash 的 M300 在 零下 40 度開機成功

使用 華邦 NAND Flash 的 M300 在 零下 40 度開機成功

1430

試著改變 DSE[5:3]

其餘的和 reset value 一樣

把全部的值都掃一次

1605

結論

在 零下40度 時

只要去設定 DSE[5:3] 的值並且不要是 000 DSE_0_output_driver_disabled_ 便可以讓 M300 順利啟動

目前把 恆溫恆濕機 設定成 80 度再來做實驗

這樣便能決定一組值然後讓 uboot 去寫

1730

80 度的實驗得到一樣的結論

只要去設定 DSE[5:3] 的值並且不要是 000 DSE_0_output_driver_disabled_ 便可以讓 M300 順利啟動

那就決定用 datasheet 上從 30.5.25330.5.269 這 17 個 rigester 的 reset value

都是 000010b0h

1755

修改後先 commit 到 local

build image 準備明天測試用