https://www.3dbrew.org/w/api.php?action=feedcontributions&user=Thog&feedformat=atom
3dbrew - User contributions [en]
2024-03-28T11:20:27Z
User contributions
MediaWiki 1.35.8
https://www.3dbrew.org/w/index.php?title=EMMC_Registers&diff=19328
EMMC Registers
2017-01-20T19:33:14Z
<p>Thog: Fix sample code URL (https://github.com/devkitPro/libnds/commit/ae04ca0e0e682739bb142df3d7c213d07b1e507d)</p>
<hr />
<div>These registers are used to access the system [[Flash_Filesystem|NAND]] and the inserted SD card. Both devices use the same interface.<br />
<br />
=Registers=<br />
<br />
{| class="wikitable" border="1"<br />
! Old3DS<br />
! Name<br />
! Address<br />
! Width<br />
! Used by<br />
|-<br />
| style="background: green" | Yes<br />
| EMMC_CMD<br />
| 0x10006000<br />
| 2<br />
| Boot9, NewKernel9Loader, Process9<br />
|-<br />
| style="background: green" | Yes<br />
| ?<br />
| 0x10006002<br />
| 2<br />
|<br />
|-<br />
| style="background: green" | Yes<br />
| EMMC_CMDARG0<br />
| 0x10006004<br />
| 2<br />
|<br />
|-<br />
| style="background: green" | Yes<br />
| EMMC_CMDARG1<br />
| 0x10006006<br />
| 2<br />
|<br />
|-<br />
| style="background: green" | Yes<br />
| EMMC_STOP<br />
| 0x10006008<br />
| 2<br />
|<br />
|-<br />
| style="background: green" | Yes<br />
| EMMC_BLKCOUNT<br />
| 0x1000600a<br />
| 2<br />
|<br />
|-<br />
| style="background: green" | Yes<br />
| EMMC_RESP0-7<br />
| 0x1000600c<br />
| 2*8<br />
|<br />
|-<br />
| style="background: green" | Yes<br />
| EMMC_STATUS0<br />
| 0x1000601c<br />
| 2<br />
|<br />
|-<br />
| style="background: green" | Yes<br />
| EMMC_STATUS1<br />
| 0x1000601e<br />
| 2<br />
|<br />
|-<br />
| style="background: green" | Yes<br />
| ?<br />
| 0x10006020<br />
| 2<br />
|<br />
|-<br />
| style="background: green" | Yes<br />
| ?<br />
| 0x10006022<br />
| 2<br />
|<br />
|-<br />
| style="background: green" | Yes<br />
| EMMC_CLKCTL<br />
| 0x10006024<br />
| 2<br />
|<br />
|-<br />
| style="background: green" | Yes<br />
| EMMC_BLKLEN<br />
| 0x10006026<br />
| 2<br />
|<br />
|-<br />
| style="background: green" | Yes<br />
| EMMC_OPT<br />
| 0x10006028<br />
| 2<br />
|<br />
|-<br />
| style="background: green" | Yes<br />
| EMMC_FIFO<br />
| 0x10006030<br />
| 2<br />
|<br />
|-<br />
| style="background: green" | Yes<br />
| EMMC_RESET<br />
| 0x100060E0<br />
| 2<br />
|<br />
|-<br />
|}<br />
<br />
The IO interface for SDMC/NAND seems to be very similar to the DSi; see libnds for [https://github.com/devkitPro/libnds/blob/master/source/arm7/sdmmc.twl.c sample code] and [https://github.com/devkitPro/libnds/blob/master/include/nds/arm7/sdmmc.h documentation], and GBATEK for [http://problemkaputt.de/gbatek.htm#dsisdmmcioportscommandparamresponsedata better documentation].<br />
<br />
3DS SDMC/NAND IO registers are located at 0x10006000 and apparently mirrored at 0x10007000. It seems the 0x10007000 mirror is never used on retail units.<br />
<br />
==EMMC_STATUS0==<br />
<br />
{| class="wikitable" border="1"<br />
! Bit<br />
! Description<br />
|-<br />
| 3<br />
| SD card removal flag (Set to 1 when SD card is removed)<br />
|-<br />
| 4<br />
| SD card insertion flag (Set to 1 when SD card is inserted)<br />
|-<br />
| 5<br />
| SD card insertion status (0 = missing, 1 = inserted)<br />
|-<br />
|}<br />
<br />
===SD card insertion status===<br />
Assertion happens around 250 ms after SD card insertion and/or enabling the EMMC hardware (delay could possibly be due to an SD bus timeout?).</div>
Thog
https://www.3dbrew.org/w/index.php?title=TIMER/FR&diff=18059
TIMER/FR
2016-09-09T11:20:15Z
<p>Thog: Sync with EN version</p>
<hr />
<div>Il y a 4 timers. Ces timers fonctionnent à une fréquence d'environ 67027.964kHz.<br />
<br />
== Registres ==<br />
{| class="wikitable" border="1"<br />
! Old3DS<br />
! Nom<br />
! Adresse physique<br />
! Taille<br />
! Utilisé par<br />
|-<br />
| style="background: green" | Yes<br />
| [[#TIMER_VAL|TIMER_VAL]](n)<br />
| 0x10003000 + 4*n<br />
| 2<br />
|<br />
|-<br />
| style="background: green" | Yes<br />
| [[#TIMER_CNT|TIMER_CNT]](n)<br />
| 0x10003002 + 4*n<br />
| 2<br />
|<br />
|}<br />
<br />
== TIMER_VAL ==<br />
Ecrire à REG_TMxVAL charge une valeur de départ pour un des 4 timers, alors que le lire donne la valeur courante du timer.<br />
<br />
== TIMER_CNT ==<br />
{| class="wikitable" border="1"<br />
|+ REG_TMxCNT<br />
! BIT<br />
! DESCRIPTION<br />
|-<br />
| 0-1<br />
| Sélection du Prescaler (0=F/1, 1=F/64, 2=F/256, 3=F/1024)<br />
|-<br />
| 2<br />
| Count-up (0=Désactivé, 1=Activé)<br />
|-<br />
| 3-5<br />
| Non utilisés<br />
|-<br />
| 6<br />
| IRQ activé (0=Désactivé, 1=IRQ lors de l'overflow de la valeur du timer)<br />
|-<br />
| 7<br />
| Démarrer/Arrêter (0=Démarrer, 1=Arrêter)<br />
|}<br />
<br />
= Count-up =<br />
Quand count-up est activé, la valeur du timer est incrémenté chaque fois que le précédent overflow.</div>
Thog
https://www.3dbrew.org/w/index.php?title=RSA/FR&diff=18038
RSA/FR
2016-09-06T17:52:38Z
<p>Thog: Create redirection to the correct page</p>
<hr />
<div>#REDIRECT [[Registres_RSA]]</div>
Thog
https://www.3dbrew.org/w/index.php?title=Registres_RSA&diff=18031
Registres RSA
2016-09-05T16:32:06Z
<p>Thog: Created page with "= Registres = {| class="wikitable" border="1" ! Old3DS ! Nom ! Addresse physique ! Taille ! Utilisé par |- | style="background: green" | Oui | RSA_CNT | 0x1..."</p>
<hr />
<div>= Registres =<br />
{| class="wikitable" border="1"<br />
! Old3DS<br />
! Nom<br />
! Addresse physique<br />
! Taille<br />
! Utilisé par<br />
|-<br />
| style="background: green" | Oui<br />
| [[#RSA_CNT|RSA_CNT]]<br />
| 0x1000B000<br />
| 0x04<br />
|<br />
|-<br />
| style="background: green" | Oui<br />
| RSA_?<br />
| 0x1000B0F0<br />
| 0x04<br />
|<br />
|-<br />
| style="background: green" | Oui<br />
| [[#RSA_SLOT|RSA_SLOT]]0<br />
| 0x1000B100<br />
| 0x10<br />
|<br />
|-<br />
| style="background: green" | Oui<br />
| [[#RSA_SLOT|RSA_SLOT]]1<br />
| 0x1000B110<br />
| 0x10<br />
|<br />
|-<br />
| style="background: green" | Oui<br />
| [[#RSA_SLOT|RSA_SLOT]]2<br />
| 0x1000B120<br />
| 0x10<br />
|<br />
|-<br />
| style="background: green" | Oui<br />
| [[#RSA_SLOT|RSA_SLOT]]3<br />
| 0x1000B130<br />
| 0x10<br />
|<br />
|-<br />
| style="background: green" | Oui<br />
| [[#RSA_EXPFIFO|RSA_EXPFIFO]]<br />
| 0x1000B200<br />
| 0x04<br />
|<br />
|-<br />
| style="background: green" | Oui<br />
| [[#RSA_MOD|RSA_MOD]]<br />
| 0x1000B400<br />
| 0x100<br />
|<br />
|-<br />
| style="background: green" | Oui<br />
| [[#RSA_TXT|RSA_TXT]]<br />
| 0x1000B800<br />
| 0x100<br />
|<br />
|}<br />
<br />
== RSA_CNT ==<br />
{| class="wikitable" border="1"<br />
! Bit<br />
! Description<br />
|-<br />
| 0<br />
| Début (1=Actif/Occupé, 0=Inactif)<br />
|-<br />
| 1<br />
| ?<br />
|-<br />
| 4-7<br />
| Emplacement de la clef (Bit6-7 don't actually affect the keyslot)<br />
|-<br />
| 8<br />
| Endianness (1=Little endian, 0=Big endian)<br />
|-<br />
| 9<br />
| Ordre des mots (1=Ordre normal, 0=Ordre renversé)<br />
|}<br />
<br />
== RSA_SLOT ==<br />
{| class="wikitable" border="1"<br />
! Nom<br />
! Décalage<br />
! Taille<br />
|-<br />
| [[#RSA_SLOTCNT|RSA_SLOTCNT]]<br />
| 0x0<br />
| 0x4<br />
|-<br />
| [[#RSA_SLOTSIZE|RSA_SLOTSIZE]]<br />
| 0x4<br />
| 0x4<br />
|-<br />
| ?<br />
| 0x8<br />
| 0x4<br />
|-<br />
| ?<br />
| 0xC<br />
| 0x4<br />
|}<br />
<br />
== RSA_SLOTCNT ==<br />
{| class="wikitable" border="1"<br />
! Bits<br />
! Description<br />
|-<br />
| 0<br />
| Statut de la clef (1=Clef définie, 0=Clef non définie pour le moment)<br />
|-<br />
| 1<br />
| Protection en écriture de la clef, ce bit est RW. (0 = non protégé, 1 = protégé)<br />
|-<br />
| 30-2<br />
| ?<br />
|-<br />
| 31<br />
| ?<br />
|}<br />
<br />
Avant d'écrire RSA_EXPFIFO/RSA_MOD, le bit 0 doit ici être mit à zéro si le bit 31 est déjà à zéro. Autrement, l'ARM9 se bloquera lorsque vous essayerez d'écrire en RSA_EXPFIFO.<br />
<br />
== RSA_SLOTSIZE ==<br />
Ceci contient la taille du RSA pour cet emplacement défini en mots. Normalement, la valeur est 0x40 pour un chiffrement RSA-2048.<br />
<br />
== RSA_EXPFIFO ==<br />
L'exposent de l'octet situé en 0x100 (privé ou publique) est écrit dans cet emplacement en écriture seul- PEPS.<br />
<br />
== RSA_MOD ==<br />
Le modulo de la clef RSA pour l'emplacement sélectionné peut être écrit ici. Au moment de l'écriture, le modulo doit être aligné avec la fin de la zone du registre.<br />
<br />
== RSA_TXT ==<br />
La signature RSA peut être écrit ici. Les données lues provenant d'ici sont le message. Au moment de l'écriture de la signature RSA, la signature doit être préfixé par des zéros jusqu'à atteindre un multiple de 8 octets et la fin de la signature doit être aligné avec la fin de la zone du registre.<br />
<br />
Le préfixe du message PKCS doit être vérifié manuellement par le logiciel étant donné que l'hardware ne fait que des opérations RSA brutes.<br />
<br />
== Utilisation des emplacements de clef ==<br />
{| class="wikitable" border="1"<br />
! Emplacement de clef<br />
! Description<br />
|-<br />
| 0<br />
| Arbitraire<br />
|-<br />
| 1<br />
| Description d'accès au [[NCCH/FR#CXI|CXI]] (suivant l'exheader)<br />
|-<br />
| 2-3<br />
| Initialisé par la bootrom du processeur ARM9 mais non utilisé par aucun des [[FIRM/FR|FIRM]]s. L'utilisation de ces emplacements par la bootrom ARM9 est inconnu. (si ils ont une quelconque utilité)<br />
|}</div>
Thog
https://www.3dbrew.org/w/index.php?title=IRQ/FR&diff=18030
IRQ/FR
2016-09-05T15:10:36Z
<p>Thog: Update IRQ/FR basing it on the original page</p>
<hr />
<div>= Registres =<br />
{| class="wikitable" border="1"<br />
! Old3DS<br />
! Nom<br />
! Addresse physique<br />
! Taille<br />
! Utilisé par<br />
|-<br />
| style="background: green" | Oui<br />
| [[#IRQ_IE|IRQ_IE]]<br />
| 0x10001000<br />
| 4<br />
|<br />
|-<br />
| style="background: green" | Oui<br />
| [[#IRQ_IF|IRQ_IF]]<br />
| 0x10001004<br />
| 4<br />
|<br />
|}<br />
<br />
==IRQ_IE==<br />
Champ de bits avec les interruptions activées. Voir ci-dessous pour le mappage IRQ <-> bit.<br />
<br />
==IRQ_IF==<br />
Champ de bits avec les interruptions en attente. Voir ci-dessous pour le mappage IRQ <-> bit.<br />
== Interruptions ==<br />
{| class="wikitable" border="1"<br />
! IRQ bit<br />
! Description<br />
|-<br />
| 0<br />
| DMAC_1_0<br />
|-<br />
| 1<br />
| DMAC_1_1<br />
|-<br />
| 2<br />
| DMAC_1_2<br />
|-<br />
| 3<br />
| DMAC_1_3<br />
|-<br />
| 4<br />
| DMAC_1_4<br />
|-<br />
| 5<br />
| DMAC_1_5<br />
|-<br />
| 6<br />
| DMAC_1_6<br />
|-<br />
| 7<br />
| DMAC_1_7<br />
|-<br />
| 8<br />
| TIMER_0<br />
|-<br />
| 9<br />
| TIMER_1<br />
|-<br />
| 10<br />
| TIMER_2<br />
|-<br />
| 11<br />
| TIMER_3<br />
|-<br />
| 12<br />
| PXI_SYNC<br />
|-<br />
| 13<br />
| PXI_NOT_FULL<br />
|-<br />
| 14<br />
| PXI_NOT_EMPTY<br />
|-<br />
| 15<br />
| AES<br />
|-<br />
| 16<br />
| SDIO_1<br />
|-<br />
| 17<br />
| SDIO_1_ASYNC<br />
|-<br />
| 18<br />
| SDIO_3<br />
|-<br />
| 19<br />
| SDIO_3_ASYNC<br />
|-<br />
| 20<br />
| DEBUG_RECV<br />
|-<br />
| 21<br />
| DEBUG_SEND<br />
|-<br />
| 22<br />
| [[RSA/FR|RSA]]<br />
|-<br />
| 23<br />
| CTR_CARD_1<br />
|-<br />
| 24<br />
| CTR_CARD_2<br />
|-<br />
| 25<br />
| CGC<br />
|-<br />
| 26<br />
| CGC_DET<br />
|-<br />
| 27<br />
| DS_CARD<br />
|-<br />
| 28<br />
| DMAC_2<br />
|-<br />
| 29<br />
| DMAC_2_ABORT<br />
|}</div>
Thog