26. Power On Sequence - Proposed SW
VCC
Reset
Interface 0x10=2 0x12=4
Data
>50ms >200ms >10ms>1ms >50ms
1
2
3
4
5
6 8
7 9
10
問 Vendor
27. Power On Sequence – Case 1
問題描述:機器開機使用幾個小時後,發生 kernel panic. 而且問題只會發生在少數的機器 .
分析:從 log 看到, Sensor 使用 I2C bus 讀取資料,但 I2C driver 顯示 fail message(I2C timeout or
NAK).
更後面有 Sensor driver 造成 kernel panic 的 message.
大家開始怪 I2C driver大家開始怪 I2C driver
要求 Sensor driver 在 I2C fail 時,加入 retry 機制要求 Sensor driver 在 I2C fail 時,加入 retry 機制
要求 Sensor driver 注意 I2C fail 也不能造成 kernel
panic
要求 Sensor driver 注意 I2C fail 也不能造成 kernel
panic
問題發生的機率變低許多,但有時 Sensor driver 還是無法透過 I2C 要到資料問題發生的機率變低許多,但有時 Sensor driver 還是無法透過 I2C 要到資料
大家又開始怪 I2C driver大家又開始怪 I2C driver
I2C owner 花了幾天在複製問題且架環境來量測 HW 訊號,最後發覺是 Sensor Chip 沒有回
應
I2C owner 花了幾天在複製問題且架環境來量測 HW 訊號,最後發覺是 Sensor Chip 沒有回
應
Sensor owner 最後查到 Power on sequence 不符合 Sensor data sheet 的要求Sensor owner 最後查到 Power on sequence 不符合 Sensor data sheet 的要求
Sensor 的 Power on sequence 符合 data sheet 的要求後,問題再也沒出現Sensor 的 Power on sequence 符合 data sheet 的要求後,問題再也沒出現
不是每顆 chip 都會發生問題不是每顆 chip 都會發生問題偶爾會出問題偶爾會出問題
合理, Error handle 要做
好
合理, Error handle 要做
好
可以思考及討論可以思考及討論
28. Power On Sequence – Case 2
問題描述:有些機器,有時 Sensor 不能正常 work.
分析:從 log 看到, Sensor 使用 I2C bus 讀取資料,但 I2C driver 顯示 fail message(I2C timeout or
NAK).
大家又開始怪 I2C driver 了大家又開始怪 I2C driver 了
Sensor owner 確定 SW 控制的 Power on sequence 符合 Sensor data sheetSensor owner 確定 SW 控制的 Power on sequence 符合 Sensor data sheet
應主管要求,去量測發生問題時的 Sensor Power on 的 sequence ,
結果發現沒有符合 Sensor data sheet 的要求
應主管要求,去量測發生問題時的 Sensor Power on 的 sequence ,
結果發現沒有符合 Sensor data sheet 的要求Why?
29. Power On Sequence – Case 2
3V3
1V8
0~20ms
Data Sheet
3V3
1V8
1.3ms
Real HW
int Sensor_init()
{
SensorEnable_3V3();
SensorEnable_1V8();
…
}
int Sensor_init()
{
SensorEnable_3V3();
SensorEnable_1V8();
…
} SW
tegra_gpio_enable();
gpio_request();
gpio_direction_output()
;
tegra_gpio_enable();
gpio_request();
gpio_direction_output()
;
Why?
30. Power On Sequence – Case 2
1.8
0
0
3.3
0
3.3
放
電
放電
2.6
3.3
2.39ms 後 , 變成 2.6V
t = 2.39ms
-
3V3
3V3
32. Power On Sequence – Case 2
3V3
1V8
Real HW
int Sensor_init()
{
SensorEnable_3V3();
SensorEnable_1V8();
…
}
int Sensor_init()
{
SensorEnable_3V3();
SensorEnable_1V8();
…
} SW
2.39ms
1.3ms1ms
tegra_gpio_enable();
gpio_request();
gpio_direction_output();
tegra_gpio_enable();
gpio_request();
gpio_direction_output();
tegra_gpio_enable();
gpio_request();
gpio_direction_output();
tegra_gpio_enable();
gpio_request();
gpio_direction_output();
33. Check Power On/Off Sequence of Component
1. Check power on sequence of component when device power on
2. Check power off sequence of component when device power off
3. Check power off sequence of component when system suspend
4. Check power on sequence of component when system resume
5. Check power on sequence of component when SW and HW reset
系統 suspend/resume 時, component 有 power on/off 才需要做 check
43. Component Power Mode
• Normal Mode
• Standby Mode
• Sleep Mode
• Deep Sleep Mode
• Auto Sleep Mode
• Power off Mode
44. OS Power State
OS
SoC
Processor
Most
Controller
Most
Component
Normal / Run
Mode
Normal Mode
Power on/off
Enable/Disable
PLL
Normal Mode
Auto Sleep Mode
Power off Mode
Idle Mode
Idle Mode
Standby Mode
Power on/off
Enable/Disable
PLL
Normal Mode
Auto Sleep Mode
Power off Mode
Suspend Mode
Sleep Mode
Deep Sleep
Mode
Power on/off
Enable/Disable
PLL
Auto Sleep Mode
Standby Mode
Sleep Mode
Deep Sleep Mode
Power off Mode
Power off Mode Power off Mode Power off Mode Power off Mode
46. Power Management – OS Suspend Mode
Component Processor Controller
Power Off /
Clock Off
(Power Off
Mode)
1. Check power consumption
2. Check the time of power on/off
sequence
3. Affect other components/function
- Share the power with other
parts/component
4. Need initialize registers again when
power on
(follow "Power On/Off Sequence")
5. The pin keep low level
1. Check power consumption
2. Check the time of power on/off
sequence
3. Affect other function/pin
- Share the power with other
parts/controller
- Check power domain (may be pin
floating)
4. Need initialize registers again when
power on (follow "Power On/Off
Sequence")
5. The pin keep low level
Power On / Clock
Off
(Standby/Sleep
Mode)
1. Check power consumption
2. Check the time of turn on/off sequence
3. Check wake up source
4. Don't affect the function when modify
the bus/GPIO configuration of the
1. Check power consumption
2. Check the time of turn on/off sequence
3. Don't affect the function when modify
the bus/GPIO configuration of the
47. 提昇 / 下拉 電阻 (Pull-Up/ Pull-Down
Resistor)
SoC
Processor
Component
VCC
Pull up
Resistor
Pull down
Resistor
51. 通用輸入輸出 (General Purpose I/O)
• PIN 腳可以由程式控制自由使用。 PIN 腳依現實考量可作為通用輸入 (GPI)
或通用輸出 (GPO) 。
• 不是每根 PIN 腳都能設成 GPIO 。
Pin
Function
Function 1
Function 2
…
GPIO
Output
High
Low
Input
Pull Up
Pull Down
No Pull
Hi-Z or
High Impedance
Pull Up
Pull Down
No Pull
By Processor
56. GPIO - Input
xxx
Controller
SD Detect
GPIO
Controller
SoC Processor
Pull up?
Pull down?
No pull?
1. Function work
2. Power consumption
SDLow
Low active
57. GPIO - Input
xxx
Controller
SD Detect
GPIO
Controller
SoC Processor
Pull up?
Pull down?
No pull?
1. Function work
2. Power consumption
SDHigh
High active
58. GPIO - Input
xxx
Controller
Gyro interrupt
GPIO
Controller
SoC Processor
Pull up?
Pull down?
No pull?
1. Function work
2. Power consumption
Gyro
Sensor
High active
60. Case 1 - Component Power off mode
xxx
Controller
GPIO
Controller
SoC Processor
Component
I2C
VCC
?
Functio
n
Function
1
I2C
Function
2
…
GPIO
Output
High
Low
Input
Pull Up
Pull
61. Case 2 - Component Sleep mode
xxx
Controller
GPIO
Controller
SoC Processor
Component
I2C
VCC
?
Functio
n
Function
1
I2C
Function
2
…
GPIO
Output
High
Low
Pull Up
Enter/Exit sleep mode through I2C command
63. Case 3 – I2C discussion
I2C
Controller
GPIO
Controller
SoC Processor
Camera VCC
I2C
Output Low
64. Case 4 – Power Domain Off
SD
Controller
GPIO
Controller
SoC Processor
LCD
Reset
VCC
VCC_SD
SD VCC
LED
High active VCC
High activeHi-Z
Hi-Z
VCC_SD
Recommend
65. Case 5 – GPIO of Tegra 3
Tegra3_TRM_DP05644001v01_sec.pdf
P.414 SFIO/GPIO Pin Multiplexing Architecture
P.285 Structure of Pinmux Controller
Tegra3_Datasheet_DS05160001_v3.0_sec.pdf
P.84 POR (Power On Reset)
P.85 After Wake, pin State
87.
Linux API
Interrupt
Process
Affect OS
Schedule
enable_irq() disable_irq() Interrupt Controller No
enable_fiq() disable_fiq() Interrupt Controller No
spin_lock() spin_unlock() X No
spin_lock_irq() spin_unlock_irq()
IRQ mode of ARM
core
Yes
spin_lock_irqsav
e()
spin_unlock_irqresto
re()
IRQ mode of ARM
core
Yes
Device Power on seq.
Suspend後Reset會被拉成low, power on sequence會不對
這case在Device power on/off不一定有問題. 在suspend/resume就會有問題.
SW reset或電路的改變都可能影響Reset的預設準位, 有潛在的風險