Changes

Jump to navigation Jump to search
1,890 bytes added ,  19:16, 27 September 2017
Line 1: Line 1:  
[[Category:Services]]
 
[[Category:Services]]
 
= I2C Service Names =
 
= I2C Service Names =
* "i2c::MCU"
+
{| class="wikitable" border="1"
* "i2c::CAM"
+
|-
* "i2c::LCD"
+
!  Service names
* "i2c::DEB"
+
!  Notes
* "i2c::HID"
+
!  Accessible [[I2C_Registers|deviceIDs]]
* "i2c::IR"
+
!  Service used by sysmodule
* "i2c::EEP"
+
|-
* "i2c::NFC" (Only available via the New3DS i2c sysmodule)
+
| "i2c::MCU"
* "i2c::QTM" (Only available via the New3DS i2c sysmodule)
+
|
 +
| 0, 3
 +
| [[MCU_Services|MCU]]
 +
|-
 +
| "i2c::CAM"
 +
|
 +
| 1, 2, 4
 +
| [[Camera_Services|Camera]]
 +
|-
 +
| "i2c::LCD"
 +
|
 +
| 5, 6
 +
| [[GSP_Services|GSP]]
 +
|-
 +
| "i2c::DEB"
 +
|
 +
| 7, 8
 +
| Unknown
 +
|-
 +
| "i2c::HID"
 +
|
 +
| 9, 10, 11, 12
 +
| [[HID_Services|HID]]
 +
|-
 +
| "i2c::IR"
 +
|
 +
| 13, and additionally for New3DS i2c module: 17
 +
| [[IR_Services|IR]]
 +
|-
 +
| "i2c::EEP"
 +
|
 +
| 14
 +
| [[Config_Services|Cfg]]
 +
|-
 +
| "i2c::NFC"
 +
| Only available via the New3DS i2c sysmodule.
 +
| 15
 +
| New3DS [[NFC_Services|NFC]]
 +
|-
 +
| "i2c::QTM"
 +
| Only available via the New3DS i2c sysmodule.
 +
| 16
 +
| New3DS [[QTM_Services|QTM]]
 +
|}
 +
 
 +
Each I2C service can only access certain I2C [[I2C_Registers|device(s)]]. When the specified deviceid isn't accessible, error 0xE0A02FEA is returned.
    
= I2C Service =
 
= I2C Service =
Line 15: Line 60:  
|-
 
|-
 
!  Command Header
 
!  Command Header
 +
!  Available since system-version
 
!  Description
 
!  Description
 
|-
 
|-
 
| 0x00010100
 
| 0x00010100
 +
|
 
| SetRegisterBits8 (u8 devid, u8 regid, u8 regdata, u8 mask)
 
| SetRegisterBits8 (u8 devid, u8 regid, u8 regdata, u8 mask)
 
|-
 
|-
| 0x0002....
+
| 0x000200C0
 +
|
 
| EnableRegisterBits8 (u8 devid, u8 regid, u8 enablemask)
 
| EnableRegisterBits8 (u8 devid, u8 regid, u8 enablemask)
 
|-
 
|-
 
| 0x000300C0
 
| 0x000300C0
 +
|
 
| DisableRegisterBits8 (u8 devid, u8 regid, u8 disablemask)
 
| DisableRegisterBits8 (u8 devid, u8 regid, u8 disablemask)
 
|-
 
|-
 
| 0x00040102
 
| 0x00040102
 +
|
 
| MultiSetRegisterBits16 (u16 regid, u16 regdata, u16 mask, devcount, u8* devidlistptr)
 
| MultiSetRegisterBits16 (u16 regid, u16 regdata, u16 mask, devcount, u8* devidlistptr)
 
|-
 
|-
| 0x0005....
+
| 0x000500C0
 +
|
 
| WriteRegister8 (u8 devid, u8 regid, u8 regdata)
 
| WriteRegister8 (u8 devid, u8 regid, u8 regdata)
 
|-
 
|-
| 0x0006....
+
| 0x00060080
 +
|
 
| WriteCommand8 (u8 devid, u8 cmdid)
 
| WriteCommand8 (u8 devid, u8 cmdid)
 
|-
 
|-
| 0x0007....
+
| 0x000700C0
| WriteRegister16 (u8 devid, u16 regid, u16 regdata)
+
|
 +
| WriteRegister16 (u8 devid, u8 regid, u16 regdata)
 
|-
 
|-
 
| 0x000800C2
 
| 0x000800C2
 +
|
 
| MultiWriteRegister16 (u16 regid, u16 regdata, devcount, u8* devidlistptr)
 
| MultiWriteRegister16 (u16 regid, u16 regdata, devcount, u8* devidlistptr)
 
|-
 
|-
| 0x0009....
+
| 0x00090080
 +
|
 
| u8 ReadRegister8 (u8 devid, u8 regid)
 
| u8 ReadRegister8 (u8 devid, u8 regid)
 
|-
 
|-
| 0x000A....
+
| 0x000A0080
| u16 ReadRegister16 (u8 devid, u16 regid)
+
|
 +
| u16 ReadRegister16 (u8 devid, u8 regid)
 
|-
 
|-
 
| 0x000B00C2
 
| 0x000B00C2
 +
|
 
| WriteRegisterBuffer8 (u8 devid, u8 regid, buffersize, (buffersize << 14) <nowiki>|</nowiki> 0x402, u8* bufferptr)
 
| WriteRegisterBuffer8 (u8 devid, u8 regid, buffersize, (buffersize << 14) <nowiki>|</nowiki> 0x402, u8* bufferptr)
 
|-
 
|-
 
| 0x000C00C2
 
| 0x000C00C2
 +
|
 
| WriteRegisterBuffer16 (u8 devid, u16 regid, buffersize, (buffersize << 15) <nowiki>|</nowiki> 0x402, u16* bufferptr)
 
| WriteRegisterBuffer16 (u8 devid, u16 regid, buffersize, (buffersize << 15) <nowiki>|</nowiki> 0x402, u16* bufferptr)
 
|-
 
|-
 
| 0x000D00C0
 
| 0x000D00C0
 +
|
 
| ReadRegisterBuffer8 (u8 devid, u8 regid, buffersize, +0x180: (buffersize << 14) <nowiki>|</nowiki> 2, +0x184: u8 bufferptr)
 
| ReadRegisterBuffer8 (u8 devid, u8 regid, buffersize, +0x180: (buffersize << 14) <nowiki>|</nowiki> 2, +0x184: u8 bufferptr)
 
|-
 
|-
 
| 0x000E00C2
 
| 0x000E00C2
| WriteRegisterBuffer8_again? (u8 devid, u8 regid, buffersize, u8* bufferptr)
+
|  
 +
| WriteRegisterBuffer (u8 devid, u8 regid, unused (bufsize?), (bufsize << 14) <nowiki>|</nowiki> 0x402, void* buffer)
 
|-
 
|-
| 0x000F....
+
| 0x000F00C0
 
|  
 
|  
 +
| ReadRegisterBuffer (u8 devid, u8 regid, min(bufsize, 0x20)), +0x180: (bufsize << 14) <nowiki>|</nowiki> 2, void* buffer
 
|-
 
|-
| 0x0010....
+
| 0x001000C0
 
|  
 
|  
 +
| ReadEEPROM (u8 devid = 14, u16 blockid, min(bufsize >> 1, 0x10)), +0x180: (bufsize << 15) <nowiki>|</nowiki> 2, u16* buffer
 
|-
 
|-
 
| 0x001100C2
 
| 0x001100C2
| ReadRegisterBuffer(u8 devid, u16 regid, buffersize, u8 *buff)
+
|  
 +
| WriteRegisterBuffer(u8 devid, u8 regid, buffersize, u8 *buff)
 
|-
 
|-
 
| 0x001200C2
 
| 0x001200C2
| WriteRegisterBuffer(u8 devid, u16 regid, buffersize, u8 *buff)
+
|  
 +
| ReadRegisterBuffer(u8 devid, u8 regid, buffersize, u8 *buff)
 
|-
 
|-
| 0x0013....
+
| 0x00130040
|
+
| [[8.0.0-18]]
 +
| ReadDeviceRaw8(u8 devid) Writes the output read u8 I2C data to cmdreply[2]. After successfully selecting the I2C device, it writes 0xE1 to CNT then loads the output u8 I2C data from the DATA register.
 
|-
 
|-
 
| 0x00140082
 
| 0x00140082
|  
+
| [[8.0.0-18]]
 +
| WriteDeviceRaw(u8 devid, u32 buffersize, (buffersize << 14) <nowiki>|</nowiki> 0x402, bufferptr) This is basically the write-data version of command 0x00150080.
 
|-
 
|-
| 0x0015....
+
| 0x00150080
|  
+
| [[8.0.0-18]]
 +
| ReadDeviceRaw(u8 devid, u32 buffersize, +0x180: (buffersize << 14) <nowiki>|</nowiki> 2, +0x184: bufferptr) This is the >1-byte version of command 0x00130040, except value 0xF0 is used for CNT instead of 0xE1.
 
|}
 
|}
 +
 +
Commands 0x00130040..0x00150080 are only usable with the New3DS i2c module: on Old3DS the actual command-handler function for each of these commands just return an error. Commands 0x00140082 and 0x00150080 are used by [[NFC_Services|NFC]] module.
215

edits

Navigation menu