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) (→VIC (PL192)) |
m (→VIC (PL192): Fixed a tag that I accidentally copy pasted over in the previous edit.) |
||
(14 intermediate revisions by 5 users not shown) | |||
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. |
||
+ | |||
+ | ==SHA1== |
||
+ | <table border=1 width=100%> |
||
+ | <tr> |
||
+ | <td colspan=2><center><b>Base</b>: 0x38000000</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>0x00</center></td> |
||
+ | <td width=50%><center>Configuration</center></td> |
||
+ | </tr> |
||
+ | <tr> |
||
+ | <td width=50%><center>0x04</center></td> |
||
+ | <td width=50%><center>Setup</center></td> |
||
+ | </tr> |
||
+ | <tr> |
||
+ | <td width=50%><center>0x20 through 0x30</center></td> |
||
+ | <td width=50%><center>Output SHA1 hash</center></td> |
||
+ | </tr> |
||
+ | <tr> |
||
+ | <td width=50%><center>0x40 through 0x7C</center></td> |
||
+ | <td width=50%><center>Data Input (64 Bytes)</center></td> |
||
+ | </tr> |
||
+ | </table> |
||
+ | See [[S5L8720 (Hardware) SHA1|S5L8720 SHA1]] for a more detailed description |
||
==DMA (PL080)== |
==DMA (PL080)== |
||
Line 79: | Line 107: | ||
==VIC (PL192)== |
==VIC (PL192)== |
||
− | This appears to use an ARM PrimeCell PL192. You can read the technical reference manual [http:// |
+ | This appears to use an ARM PrimeCell PL192. You can read the technical reference manual [http://infocenter.arm.com/help/topic/com.arm.doc.ddi0273a/DDI0273.pdf here]. |
<table border=1 width=100%> |
<table border=1 width=100%> |
||
<tr> |
<tr> |
||
− | <td colspan=2><center |
+ | <td colspan=2><center> |
+ | <b>Base (vic0)</b>: 0x38E00000<br> |
||
+ | <b>Base (vic1)</b>: 0x38E01000</center></td> |
||
</tr> |
</tr> |
||
<tr> |
<tr> |
||
Line 183: | Line 213: | ||
<td width=50%><center>Chip Info<br><br> |
<td width=50%><center>Chip Info<br><br> |
||
<b>Chip ID</b>: Bits 31 through 16 (0x8720, meaning it is an [[S5L8720]])<br> |
<b>Chip ID</b>: Bits 31 through 16 (0x8720, meaning it is an [[S5L8720]])<br> |
||
− | <b> |
+ | <b>Security Epoch</b>: Bits 15 through 1 (0x01)<br> |
</center></td> |
</center></td> |
||
</tr> |
</tr> |
||
Line 212: | Line 242: | ||
</table> |
</table> |
||
+ | |||
+ | |||
+ | ==Timers== |
||
+ | See separate article [[S5L8720 Timers (Hardware)]] |
||
==ARM7 (Second CPU)== |
==ARM7 (Second CPU)== |
||
− | All information here was gathered by looking at the code for the [[ARM7 Go]] command, as well as |
+ | All information here was gathered by looking at the code for the [[ARM7 Go]] command, as well as noting that although 2.1.1 iBoots reference this as 0xB8600000, 0x80000000 through 0xFFFFFFFF is mapped to 0x0 through 0x7FFFFFFF when the MMU does it's stuff. |
<table border=1 width=100%> |
<table border=1 width=100%> |
||
Line 228: | Line 262: | ||
<td width=50%><center>0x100</center></td> |
<td width=50%><center>0x100</center></td> |
||
<td width=50%><center>Running Status<br><br> |
<td width=50%><center>Running Status<br><br> |
||
− | <b>To halt the ARM7</b>: |
+ | <b>To halt the ARM7</b>: Clear all bits then set bit t 2<br> |
− | <b>To make it resume</b>: |
+ | <b>To make it resume</b>: Set bit 1</center></td> |
</tr> |
</tr> |
||
<tr> |
<tr> |
||
Line 246: | Line 280: | ||
<table border=1 width=100%> |
<table border=1 width=100%> |
||
<tr> |
<tr> |
||
+ | <td colspan=2><center> |
||
− | <td colspan=2><center><b>Base (uart0)</b>: 0x3CC00000<br><b>Base (uart1)</b>: 0x3DB00000<br><b>Base (uart2)</b>: 0x3DC00000<br><b>Base (uart3)</b>: 0x3DD00000<br></center></td> |
||
+ | <b>Base (uart0 - Serial)</b>: 0x3CC00000<br> |
||
+ | <b>Base (uart1 - Bluetooth)</b>: 0x3DB00000<br> |
||
+ | <b>Base (uart2)</b>: 0x3DC00000<br> |
||
+ | <b>Base (uart3)</b>: 0x3DD00000<br></center></td> |
||
+ | </tr> |
||
+ | <tr> |
||
+ | <td width=50%><center><b>Register</b></center></td> |
||
+ | <td width=50%><center><b>Description</b></center></td> |
||
+ | </tr> |
||
+ | </table> |
||
+ | |||
+ | ==SPI== |
||
+ | <table border=1 width=100%> |
||
+ | <tr> |
||
+ | <td colspan=2><center> |
||
+ | <b>Base (spi0 - NOR Flash)</b>: 0x3C300000<br> |
||
+ | <b>Base (spi1 - NOR Flash)</b>: 0x3CE00000<br> |
||
+ | <b>Base (spi2)</b>: 0x3D200000<br> |
||
+ | <b>Base (spi3)</b>: 0x3DA00000<br> |
||
+ | <b>Base (spi4 - Multi Touch)</b>: 0x3E100000</center></td> |
||
</tr> |
</tr> |
||
<tr> |
<tr> |
Latest revision as of 07:49, 20 April 2010
This should help people reversing iBoot and friends. It is a work in progress.
Contents
SHA1
See S5L8720 SHA1 for a more detailed description
DMA (PL080)
This appears to use an ARM PrimeCell PL080. You can read the technical reference manual here.
Base (dmac1): 0x39900000 |
|
VIC (PL192)
This appears to use an ARM PrimeCell PL192. You can read the technical reference manual here.
Base (vic0): 0x38E00000 |
|
Part Number |
|
Register 0xFF0: Should read as 0x0D |
CHIPID
All information here was gathered by reversing iBoot and friends.
Chip ID: Bits 31 through 16 (0x8720, meaning it is an S5L8720) |
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 |
|
Timers
See separate article S5L8720 Timers (Hardware)
ARM7 (Second CPU)
All information here was gathered by looking at the code for the ARM7 Go command, as well as noting that although 2.1.1 iBoots reference this as 0xB8600000, 0x80000000 through 0xFFFFFFFF is mapped to 0x0 through 0x7FFFFFFF when the MMU does it's stuff.
To halt the ARM7: Clear all bits then set bit t 2 |
|
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 (uart0 - Serial): 0x3CC00000 |
|
SPI
Base (spi0 - NOR Flash): 0x3C300000 |
|