The iPhone Wiki is no longer updated. Visit this article on The Apple Wiki for current information. |
Difference between revisions of "S5L8720 (Hardware)"
ChronicDev (talk | contribs) |
ChronicDev (talk | contribs) (added DMA stuffs) |
||
Line 1: | Line 1: | ||
This should help people reversing iBoot and friends. It is a work in progress. |
This should help people reversing iBoot and friends. It is a work in progress. |
||
+ | |||
+ | ==DMA (Direct Memory Access)== |
||
+ | <table border=1 width=100%> |
||
+ | <tr> |
||
+ | <td colspan=2><center><b>Base (dmac0)</b>: 0x38200000<br><b>Base (dmac1)</b>: 0x39900000</center></td> |
||
+ | </tr> |
||
+ | <tr> |
||
+ | <td width=50%><center><b>Register</b></center></td> |
||
+ | <td width=50%><center><b>Description</b></center></td> |
||
+ | </tr> |
||
+ | <tr> |
||
+ | <td width=50%><center>0x0</center></td> |
||
+ | <td width=50%><center>Interrupt Status</center></td> |
||
+ | </tr> |
||
+ | <tr> |
||
+ | <td width=50%><center>0x4</center></td> |
||
+ | <td width=50%><center>TC Status (If HIGH, transaction complete)</center></td> |
||
+ | </tr> |
||
+ | <tr> |
||
+ | <td width=50%><center>0x8</center></td> |
||
+ | <td width=50%><center>Interrupt Clear</center></td> |
||
+ | </tr> |
||
+ | <tr> |
||
+ | <td width=50%><center>0xC</center></td> |
||
+ | <td width=50%><center>Error Interrupt Status</center></td> |
||
+ | </tr> |
||
+ | <tr> |
||
+ | <td width=50%><center>0x10</center></td> |
||
+ | <td width=50%><center>Error Interrupt Clear</center></td> |
||
+ | </tr> |
||
+ | <tr> |
||
+ | <td width=50%><center>0x14</center></td> |
||
+ | <td width=50%><center>Interrupt Status Before Masking</center></td> |
||
+ | </tr> |
||
+ | <tr> |
||
+ | <td width=50%><center>0x18</center></td> |
||
+ | <td width=50%><center>Error Interrupt Status Before Masking</center></td> |
||
+ | </tr> |
||
+ | <tr> |
||
+ | <td width=50%><center>0x1C</center></td> |
||
+ | <td width=50%><center>DMA Channels Enabled</center></td> |
||
+ | </tr> |
||
+ | <tr> |
||
+ | <td width=50%><center>0x30</center></td> |
||
+ | <td width=50%><center>Controller Configuration</center></td> |
||
+ | </tr> |
||
+ | <tr> |
||
+ | <td width=50%><center>0x34</center></td> |
||
+ | <td width=50%><center>Enable / Disable Synchronization</center></td> |
||
+ | </tr> |
||
+ | <tr> |
||
+ | <td width=50%><center>0x100</center></td> |
||
+ | <td width=50%><center>Channel 0 Source Address</center></td> |
||
+ | </tr> |
||
+ | <tr> |
||
+ | <td width=50%><center>0x104</center></td> |
||
+ | <td width=50%><center>Channel 0 Destination Address</center></td> |
||
+ | </tr> |
||
+ | <tr> |
||
+ | <td width=50%><center>0x108</center></td> |
||
+ | <td width=50%><center>Channel 0 Linked List Address</center></td> |
||
+ | </tr> |
||
+ | <tr> |
||
+ | <td width=50%><center>0x10C</center></td> |
||
+ | <td width=50%><center>Channel 0 Control 1</center></td> |
||
+ | </tr> |
||
+ | <tr> |
||
+ | <td width=50%><center>0x110</center></td> |
||
+ | <td width=50%><center>Channel 0 Control 2</center></td> |
||
+ | </tr> |
||
+ | <tr> |
||
+ | <td width=50%><center>0x114</center></td> |
||
+ | <td width=50%><center>Channel 0 Configuration</center></td> |
||
+ | </tr> |
||
+ | </table> |
||
==VIC (Vectored Interrupt Controller)== |
==VIC (Vectored Interrupt Controller)== |
Revision as of 18:07, 15 February 2009
This should help people reversing iBoot and friends. It is a work in progress.
Contents
DMA (Direct Memory Access)
Base (dmac1): 0x39900000 |
|
VIC (Vectored Interrupt Controller)
Base (vic1): 0x38E01000 |
|
WDT (Watchdog Timer)
NOTE: It seems that you can disable Watchdog Timer by rewriting this register to 0x00000000, and you can reboot the device by rewriting it to 0x100000 |
|
USB
OTG-PHYCTRL
OTG
ARM7 (Second CPU)
To halt the ARM7: Write 0x0 then 0x10 to this register |
|
To run code, halt the ARM7, write the load address of the code to this register, write 0x3FF0000 to register 0x114, then resume the ARM7 |
|
I don't know exactly what this register does, but I named it like this because 0x3FF0000 is written to this register when there is a load address of code to be jumped to in register 0x110 |
UART
Base (uart1): 0x3DB00000 Base (uart2): 0x3DC00000 Base (uart3): 0x3DD00000 |
|
Bit 0: If 1, Rx buffer has data, if 0, Rx buffer is empty |
|
Bit 0: If 1, overrun error |
|