I2C Bus: Difference between revisions

No edit summary
Nocash (talk | contribs)
 
(24 intermediate revisions by 2 users not shown)
Line 23: Line 23:
|-
|-
| 1
| 1
| Start/device select bit?
| Start/device select bit? [guess from old [[I2C]] page: More data coming?]
|-
|-
| 2
| 2
Line 38: Line 38:
|-
|-
| 6
| 6
| Unknown, always set when writing to CNT?
| Unknown, always set when writing to CNT? [guess from old [[I2C]] page: Interrupt Enable?]
|-
|-
| 7
| 7
Line 62: Line 62:
!  Device description
!  Device description
|-
|-
| 0x00
| 0x7A
| 0x00
| 0x00
| No
| No
| Camera0?
| Camera0(internal?)
|-
|-
| 0x80
| 0x78
| 0x00
| 0x00
| No
| No
| Camera1?
| Camera1(external?)
|-
|-
| 0x00
| 0xA0
| 0x00
| 0x00
| No
| No
| ?
| Camera0 config
|-
|-
| 0x00
| 0xE0
| 0x00
| 0x00
| No
| No
| ?
| Camera1 config
|-
| 0x7A
| 0x180
| No
| Power management
|-
| 0x78
| 0x00
| No
| ?
|-
| 0xA0
| 0x00
| No
| ?
|-
|-
| 0x4A
| 0x4A
| 0x180
| 0x180
| Yes
| Yes
| Power related?
| Power management
|-
|-
| 0x40
| 0x40
Line 113: Line 98:
|}
|}


=== Power management ===
=== Cameras ===
When registers 0x70 and 0x11 are set to 1 in that order, a power cycle is done.
 
{| class="wikitable" border="1"
!  REGISTER
!  WIDTH
!  DESCRIPTION
|-
|  0x18
|  2
|  Unknown
|-
|  0x98c
|  2
|  Unknown
|-
|  0x990
|  2
|  Unknown
|}
 
=== Cameras Config ===


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 121: Line 125:
!  DESCRIPTION
!  DESCRIPTION
|-
|-
| 0x11
| 0xc1
|  8
|  Data from the below camconf_c1 structure is written here.
|}
 
==== camconf_c1 ====
Data is retrieved from this struct via this byte-offset: (conf_type*0x30) + (conf_index*8). Max number of conf types and conf indexes are 2 and 6.
{| class="wikitable" border="1"
!  CONF TYPE
!  CONF INDEX
!  DATA
!  DESCRIPTION
|-
| 0
| 0
| 38 30 1F 1F 2C 30 1F 1F
| ?
|-
| 0
| 1
| 38 30 1F 1F 38 30 1F 1F
| ?
|-
| 0
| 2
| 2C 30 1F 1F 2C 30 1F 1F
| ?
|-
| 0
| 3
| 2C 30 1F 1F 2C 30 1F 1F
| ?
|-
| 0
| 4
| 2C 30 1F 1F 2C 30 1F 1F
| ?
|-
| 0
| 5
| 2C 30 1F 1F 2C 30 1F 1F
| ?
|-
| 1
| 0
| 30 28 18 18 34 28 08 18
| ?
|-
| 1
| 1
| 1
| System reset register 2.
| 30 28 18 18 30 28 08 18
| ?
|-
| 1
| 2
| 28 28 18 18 28 28 08 18
| ?
|-
|-
| 0x12
| 1
| 1
| Might be MMC bus power related, unknown.
| 3
| 28 28 18 18 28 28 08 18
| ?
|-
|-
| 0x31
| 1
| 1
| Cameras' power? Value 0 turns off power to cameras? Values 1/2 activates a camera's power?
| 4
| 28 28 18 18 28 28 08 18
| ?
|-
|-
| 0x70
| 1
| 1
| System reset register 1.
| 5
| 28 28 18 18 28 28 08 18
| ?
|}
|}


=== Device 0x4A ===
=== Power management ===
 
When register 0x11 has value one written to, a power cycle is done. When reg 0x70 val 1 is written before reg 0x11, sysmenu/launcher doesn't display the heath screen, otherwise when not written with the register value left at zero the health screen is displayed. Reg 0x70 would be zero on hard boot, when any twlsdk app does a system reset it writes value 1 to reg 0x70.
When battery is nearly empty on boot, Arm7 reads I2C device 0x4a registers 0x0, 0x10, and 0x20. After poking other registers, it reads 0x20 again. After that it does shutdown, clears gfx and NDMA. Then it reads register 0x20 again. Last it writes value 2 to register 0x11, then SPI shutdown.


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 149: Line 209:
|  0x0
|  0x0
|  1
|  1
Might be battery level?
Unknown, battery related? Usually this reg val is 0x33?
|-
|-
|  0x10
|  0x10
|  1
|  1
|  Power related?
|  Power flags. When bit0 is set, arm7 does a system reset. When bit1 or bit3 are set, arm7 does a shutdown. Bits 0-2 are used for DSi [[Interrupts|IRQ6]] IF flags.
|-
|-
0x11
| 0x11
| 1
| Power reg? Writing value 1 here does a system reset. Writing value 2 powers off all DSi-only hw.
|-
| 0x12
| 1
| Might be MMC bus power related, unknown.
|-
|  0x20
|  1
|  Battery flags. When zero the battery is at critical level, arm7 does a shutdown. Bit7 is set when the battery is charging. Battery levels in the low 4-bits: battery icon bars full 0xF, 3 bars 0xB, 2 bars 0x7, one solid red bar 0x3, and one blinking red bar 0x1. When plugging in or removing recharge cord, this value increases/decreases between the real battery level and 0xF, thus the battery level while bit7 is set is useless.
|-
0x21
|  1
|  ?
|-
| 0x31
| 1
| External camera LED control, valid values are 0-2. Value 0 disables the LED, value 1 activates the LED, value 2 activates the LED with the LED blinking.
|-
| 0x40
| 1
| Volume level: 0x00 - 0x1F.
|-
| 0x70
| 1
| BOOTFLG
|}
 
=== Device 0x90 ===
{| class="wikitable" border="1"
!  REGISTER
!  WIDTH
!  DESCRIPTION
|-
|  0x2
|  1
|  1
Writing value 2 here might power off all twl hw?
Used for DSi [[Interrupts|IRQ6]] IF flags.
|-
|-
0x20
0x4
|  1
|  1
Shutdown related?
Unknown (bit0 toggled)
|}
|}