Changes

Jump to navigation Jump to search
1,535 bytes added ,  19:16, 27 September 2017
[[Category:Services]]
= I2C Service Names =
* {| class="wikitable" border="1"|-! Service names! Notes! Accessible [[I2C_Registers|deviceIDs]]! Service used by sysmodule|-| "i2c::MCU"* | | 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 =
| SetRegisterBits8 (u8 devid, u8 regid, u8 regdata, u8 mask)
|-
| 0x0002....0x000200C0
|
| EnableRegisterBits8 (u8 devid, u8 regid, u8 enablemask)
| MultiSetRegisterBits16 (u16 regid, u16 regdata, u16 mask, devcount, u8* devidlistptr)
|-
| 0x0005....0x000500C0
|
| WriteRegister8 (u8 devid, u8 regid, u8 regdata)
|-
| 0x0006....0x00060080
|
| WriteCommand8 (u8 devid, u8 cmdid)
|-
| 0x0007....0x000700C0
|
| WriteRegister16 (u8 devid, u16 u8 regid, u16 regdata)
|-
| 0x000800C2
| MultiWriteRegister16 (u16 regid, u16 regdata, devcount, u8* devidlistptr)
|-
| 0x0009....0x00090080
|
| u8 ReadRegister8 (u8 devid, u8 regid)
|-
| 0x000A....0x000A0080
|
| u16 ReadRegister16 (u8 devid, u16 u8 regid)
|-
| 0x000B00C2
| 0x000E00C2
|
| WriteRegisterBuffer8_again? WriteRegisterBuffer (u8 devid, u8 regid, buffersizeunused (bufsize?), (bufsize << 14) <nowiki>|</nowiki> 0x402, u8void* bufferptrbuffer)
|-
| 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
|
| ReadRegisterBufferWriteRegisterBuffer(u8 devid, u16 u8 regid, buffersize, u8 *buff)
|-
| 0x001200C2
|
| WriteRegisterBufferReadRegisterBuffer(u8 devid, u16 u8 regid, buffersize, u8 *buff)
|-
| 0x00130040
| [[8.0.0-18]]
| ReadDeviceRaw8(u8 invaldevid) Writes an 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
| [[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.
|-
| 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.
182

edits

Navigation menu