<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.3dbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Socram8888</id>
	<title>3dbrew - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.3dbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Socram8888"/>
	<link rel="alternate" type="text/html" href="https://www.3dbrew.org/wiki/Special:Contributions/Socram8888"/>
	<updated>2026-04-14T16:50:56Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Homebrew_Libraries_and_Tools&amp;diff=13279</id>
		<title>Homebrew Libraries and Tools</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Homebrew_Libraries_and_Tools&amp;diff=13279"/>
		<updated>2015-09-14T06:17:09Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: /* Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of libraries and tools that can be used to develop 3DS Homebrew.&lt;br /&gt;
&lt;br /&gt;
==List==&lt;br /&gt;
&lt;br /&gt;
===Libraries===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!  width=&amp;quot;20%&amp;quot; | Name&lt;br /&gt;
!  width=&amp;quot;50%&amp;quot; | Description&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Author&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Download&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Open-Source&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/smealum/ctrulib ctrulib]&lt;br /&gt;
| C library for writing user mode ARM11 code for the 3DS (CTR) &lt;br /&gt;
| [https://twitter.com/smealum smea] et al.&lt;br /&gt;
| [[Setting_up_Development_Environment|See here]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/xerpi/sf2dlib sf2dlib]&lt;br /&gt;
| Simple and Fast 2D library for the Nintendo 3DS (using ctrulib)&lt;br /&gt;
| [https://github.com/xerpi xerpi]&lt;br /&gt;
| [https://github.com/xerpi/sf2dlib/archive/master.zip Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/cpp3ds/gl3ds gl3ds]&lt;br /&gt;
| OpenGL implementation for Nintendo 3DS using ctrulib&lt;br /&gt;
| [https://github.com/Cruel Cruel] et al.&lt;br /&gt;
| [https://github.com/cpp3ds/gl3ds/archive/master.zip Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/machinamentum/Caelina Caelina]&lt;br /&gt;
| An OpenGL implementation for (N)3DS&lt;br /&gt;
| [https://github.com/machinamentum machinamentum]&lt;br /&gt;
| [https://github.com/machinamentum/Caelina/archive/master.zip Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Myriachan/libkhax libkhax]&lt;br /&gt;
| Library for modifying kernel memory on a certain handheld game console.&lt;br /&gt;
| [https://github.com/Myriachan Myria] et al.&lt;br /&gt;
| [https://github.com/Myriachan/libkhax/archive/master.zip Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Tools===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!  width=&amp;quot;20%&amp;quot; | Name&lt;br /&gt;
!  width=&amp;quot;50%&amp;quot; | Description&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Author&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Download&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Open-Source&lt;br /&gt;
|-&lt;br /&gt;
| [http://devkitpro.org/ devkitARM]&lt;br /&gt;
| GCC-based toolchain tuned for homebrew development for ARM-based consoles.&lt;br /&gt;
| [https://github.com/WinterMute WinterMute] et al.&lt;br /&gt;
| [[Setting_up_Development_Environment|See here]]&lt;br /&gt;
| [https://github.com/devkitPro Yes]&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/smealum/aemstro aemstro]&lt;br /&gt;
| Set of tools used to disassemble and assemble shader code for DMP&#039;s MAESTRO shader extension used in the 3DS&#039;s PICA200 GPU&lt;br /&gt;
| [https://twitter.com/smealum smea]&lt;br /&gt;
| [https://github.com/smealum/aemstro/archive/master.zip Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/fincs/picasso picasso]&lt;br /&gt;
| Homebrew PICA200 shader assembler&lt;br /&gt;
| [https://github.com/fincs fincs]&lt;br /&gt;
| [https://github.com/fincs/picasso/releases Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://4dsdev.org/thread.php?id=14 nihstro]&lt;br /&gt;
| 3DS shader assembler and disassembler &lt;br /&gt;
| [https://github.com/neobrain neobrain]&lt;br /&gt;
| [http://4dsdev.org/thread.php?id=14 Here]&lt;br /&gt;
| [https://github.com/neobrain/nihstro Yes]&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Lectem/3ds-cmake 3ds-cmake]&lt;br /&gt;
| CMake files for devkitARM and 3DS homebrew development&lt;br /&gt;
| [https://github.com/Lectem Lectem]&lt;br /&gt;
| [https://github.com/Lectem/3ds-cmake/archive/master.zip Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/profi200/Project_CTR/archive/master.zip makerom]&lt;br /&gt;
|  Tool which can be used to create NCCH, CCI, and CIA files. &lt;br /&gt;
| [http://3dbrew.org/wiki/User:3dsguy 3dsguy] maintained by [https://github.com/profi200 profi200]&lt;br /&gt;
| [https://github.com/profi200/Project_CTR/archive/master.zip Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Steveice10/bannertool bannertool]&lt;br /&gt;
| Tool to create NCCH banners&lt;br /&gt;
| [https://github.com/Steveice10 Steveice10]&lt;br /&gt;
| [https://github.com/Steveice10/bannertool/archive/master.zip Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/socram8888/amiitool amiitool]&lt;br /&gt;
| Tool to decrypt, encrypt and sign amiibo dumps&lt;br /&gt;
| [https://github.com/socram8888 socram8888]&lt;br /&gt;
| [https://github.com/socram8888/amiitool/archive/master.zip Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Homebrew_Libraries_and_Tools&amp;diff=13278</id>
		<title>Homebrew Libraries and Tools</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Homebrew_Libraries_and_Tools&amp;diff=13278"/>
		<updated>2015-09-14T06:16:28Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: /* Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a list of libraries and tools that can be used to develop 3DS Homebrew.&lt;br /&gt;
&lt;br /&gt;
==List==&lt;br /&gt;
&lt;br /&gt;
===Libraries===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!  width=&amp;quot;20%&amp;quot; | Name&lt;br /&gt;
!  width=&amp;quot;50%&amp;quot; | Description&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Author&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Download&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Open-Source&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/smealum/ctrulib ctrulib]&lt;br /&gt;
| C library for writing user mode ARM11 code for the 3DS (CTR) &lt;br /&gt;
| [https://twitter.com/smealum smea] et al.&lt;br /&gt;
| [[Setting_up_Development_Environment|See here]]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/xerpi/sf2dlib sf2dlib]&lt;br /&gt;
| Simple and Fast 2D library for the Nintendo 3DS (using ctrulib)&lt;br /&gt;
| [https://github.com/xerpi xerpi]&lt;br /&gt;
| [https://github.com/xerpi/sf2dlib/archive/master.zip Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/cpp3ds/gl3ds gl3ds]&lt;br /&gt;
| OpenGL implementation for Nintendo 3DS using ctrulib&lt;br /&gt;
| [https://github.com/Cruel Cruel] et al.&lt;br /&gt;
| [https://github.com/cpp3ds/gl3ds/archive/master.zip Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/machinamentum/Caelina Caelina]&lt;br /&gt;
| An OpenGL implementation for (N)3DS&lt;br /&gt;
| [https://github.com/machinamentum machinamentum]&lt;br /&gt;
| [https://github.com/machinamentum/Caelina/archive/master.zip Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Myriachan/libkhax libkhax]&lt;br /&gt;
| Library for modifying kernel memory on a certain handheld game console.&lt;br /&gt;
| [https://github.com/Myriachan Myria] et al.&lt;br /&gt;
| [https://github.com/Myriachan/libkhax/archive/master.zip Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Tools===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
!  width=&amp;quot;20%&amp;quot; | Name&lt;br /&gt;
!  width=&amp;quot;50%&amp;quot; | Description&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Author&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Download&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Open-Source&lt;br /&gt;
|-&lt;br /&gt;
| [http://devkitpro.org/ devkitARM]&lt;br /&gt;
| GCC-based toolchain tuned for homebrew development for ARM-based consoles.&lt;br /&gt;
| [https://github.com/WinterMute WinterMute] et al.&lt;br /&gt;
| [[Setting_up_Development_Environment|See here]]&lt;br /&gt;
| [https://github.com/devkitPro Yes]&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/smealum/aemstro aemstro]&lt;br /&gt;
| Set of tools used to disassemble and assemble shader code for DMP&#039;s MAESTRO shader extension used in the 3DS&#039;s PICA200 GPU&lt;br /&gt;
| [https://twitter.com/smealum smea]&lt;br /&gt;
| [https://github.com/smealum/aemstro/archive/master.zip Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/fincs/picasso picasso]&lt;br /&gt;
| Homebrew PICA200 shader assembler&lt;br /&gt;
| [https://github.com/fincs fincs]&lt;br /&gt;
| [https://github.com/fincs/picasso/releases Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [http://4dsdev.org/thread.php?id=14 nihstro]&lt;br /&gt;
| 3DS shader assembler and disassembler &lt;br /&gt;
| [https://github.com/neobrain neobrain]&lt;br /&gt;
| [http://4dsdev.org/thread.php?id=14 Here]&lt;br /&gt;
| [https://github.com/neobrain/nihstro Yes]&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Lectem/3ds-cmake 3ds-cmake]&lt;br /&gt;
| CMake files for devkitARM and 3DS homebrew development&lt;br /&gt;
| [https://github.com/Lectem Lectem]&lt;br /&gt;
| [https://github.com/Lectem/3ds-cmake/archive/master.zip Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/profi200/Project_CTR/archive/master.zip makerom]&lt;br /&gt;
|  Tool which can be used to create NCCH, CCI, and CIA files. &lt;br /&gt;
| [http://3dbrew.org/wiki/User:3dsguy 3dsguy] maintained by [https://github.com/profi200 profi200]&lt;br /&gt;
| [https://github.com/profi200/Project_CTR/archive/master.zip Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Steveice10/bannertool bannertool]&lt;br /&gt;
| Tool to create NCCH banners&lt;br /&gt;
| [https://github.com/Steveice10 Steveice10]&lt;br /&gt;
| [https://github.com/Steveice10/bannertool/archive/master.zip Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Steveice10/bannertool bannertool]&lt;br /&gt;
| Tool to decrypt, encrypt and sign amiibo dumps&lt;br /&gt;
| [https://github.com/socram8888 socram8888]&lt;br /&gt;
| [https://github.com/socram8888/amiitool/archive/master.zip Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12550</id>
		<title>NFC adapter</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12550"/>
		<updated>2015-05-04T11:28:16Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: Edited with easier to read code&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo NFC adapter is an upcoming external device which adds NFC capabilities for [[amiibo]]s to old Nintendo 3DS and Nintendo 2DS consoles, using the infrared port on the back of the console.&lt;br /&gt;
&lt;br /&gt;
[[File:150217nfcreader-640x360.jpg|thumb|right|250px|Media preview, as released by Nintendo]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Technical details =&lt;br /&gt;
Based on analysis of the [[fangate_updater.bin]] file, which is part of the old Nintendo 3DS operating system since [[9.3.0-21]] and contains the firmware running on the external adapter; and analysis of the [[NFC Services]] running on old 3DS.&lt;br /&gt;
&lt;br /&gt;
* SOC inside the adapter: Broadcom BCM20791B1&lt;br /&gt;
* CPU: ARM Cortex M0&lt;br /&gt;
* Communications: infrared, with [[ir:USER]] running on the console. Uses obfuscated payloads. Baud rate is 115200 bps.&lt;br /&gt;
&lt;br /&gt;
Memory map:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x08008000&lt;br /&gt;
| 256KB?&lt;br /&gt;
| Firmware ([[fangate_updater.bin]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 128KB?&lt;br /&gt;
| RAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x40023C00&lt;br /&gt;
| 0x1C&lt;br /&gt;
| FLASH ROM control&lt;br /&gt;
|-&lt;br /&gt;
| 0xE000ED00&lt;br /&gt;
| 0x104&lt;br /&gt;
| [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0439b/BABCIIIA.html ARM Cortex system control block]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= IR communications =&lt;br /&gt;
Packets are sent using IrDA-SIR (using [[ir:USER]]), with a 8N1 encoding (eight data bits, one stop bit, without parity). Each one is formed by a 2-byte header, a varint with the payload size, an obfuscated payload, and trailing error detection byte.&lt;br /&gt;
&lt;br /&gt;
== Layer 1 - framing format ==&lt;br /&gt;
Frames are encoded using two different yet very simmilar formats, depending on how large the payload to be transmitted is:&lt;br /&gt;
* For payloads with less than 64 bytes, the third byte represents the payload size.&lt;br /&gt;
* For packets with up to 16383 bytes, the size is split in two bytes, with the third byte being the upper 6 bits of the payload size, OR&#039;d with 0x40, and the fourth being the lower eight bits of the payload size&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0 auto; text-align: center;&amp;quot;&lt;br /&gt;
|+IR framing format - short frame&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-top: none&amp;quot; | Byte&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 7&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 6&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 5&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 4&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 3&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 2&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 1&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 0&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Synchronization byte (&amp;lt;code&amp;gt;0xA5&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Reserved for future use (&amp;lt;code&amp;gt;0x00&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| RFU (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
| Short frame (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot;|Payload size&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte 0&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot;|...&lt;br /&gt;
|-&lt;br /&gt;
! 0x03+n-1&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte n-1&lt;br /&gt;
|-&lt;br /&gt;
! 0x03+n&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|[[CRC-8-CCITT]] computer over whole packet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0 auto; text-align: center;&amp;quot;&lt;br /&gt;
|+IR framing format - long frame&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-top: none&amp;quot; | Byte&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 7&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 6&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 5&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 4&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 3&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 2&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 1&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 0&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Synchronization byte: &amp;lt;code&amp;gt;0xA5&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Reserved for future use&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| RFU (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
| Long frame (&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;)&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot;|Payload size (upper 6 bits)&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload size (lower 8 bits)&lt;br /&gt;
|-&lt;br /&gt;
! 0x04&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte 0&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot;|...&lt;br /&gt;
|-&lt;br /&gt;
! 0x04+n-1&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte n-1&lt;br /&gt;
|-&lt;br /&gt;
! 0x04+n&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|[[CRC-8-CCITT]] computer over whole packet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
The packet header is fixed and consists in a synchronization byte (0xA5), followed by a unused (possibly RFU) zero byte. After these two hardcoded bytes, there&#039;s a varint representing the payload size, which may use one byte or two, depending on the how big the payload is.&lt;br /&gt;
&lt;br /&gt;
In C:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;uint8_t * setPacketHeader(uint8_t * buffer, size_t payloadSize) {&lt;br /&gt;
	assert(payloadSize &amp;lt; 16384);&lt;br /&gt;
&lt;br /&gt;
	buffer[0] = 0xA5;&lt;br /&gt;
	buffer[1] = 0x00;&lt;br /&gt;
&lt;br /&gt;
	if (payloadSize &amp;lt; 64) {&lt;br /&gt;
		buffer[2] = payloadSize;&lt;br /&gt;
		buffer += 3;&lt;br /&gt;
	} else {&lt;br /&gt;
		buffer[2] = 0x40 | (payloadSize &amp;gt;&amp;gt; 8);&lt;br /&gt;
		buffer[3] = payloadSize;&lt;br /&gt;
		buffer += 4;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return buffer;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Payload ===&lt;br /&gt;
The payload is obfuscated using a XOR-based encryption. In C:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;void payloadObfuscate(const void * voidplain, void * voidcipher, size_t size) {&lt;br /&gt;
	uint16_t * plain = (uint16_t *) voidplain;&lt;br /&gt;
	uint16_t * cipher = (uint16_t *) voidcipher;&lt;br /&gt;
	size_t halfCount = size &amp;gt;&amp;gt; 1; // Divide by 2 rounding towards zero&lt;br /&gt;
&lt;br /&gt;
	uint16_t xorval = htobe16(0xE963);&lt;br /&gt;
	size_t i;&lt;br /&gt;
&lt;br /&gt;
	for (i = 0; i &amp;lt; halfCount; i++) {&lt;br /&gt;
		xorval ^= plain[i];&lt;br /&gt;
		cipher[i] = xorval;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void payloadDeobfuscate(const void * voidcipher, void * voidplain, size_t size) {&lt;br /&gt;
	uint16_t * cipher = (uint16_t *) voidcipher;&lt;br /&gt;
	uint16_t * plain = (uint16_t *) voidplain;&lt;br /&gt;
	size_t halfCount = size &amp;gt;&amp;gt; 1; // Divide by 2 rounding towards zero&lt;br /&gt;
&lt;br /&gt;
	uint16_t xorval = htobe16(0xE963);&lt;br /&gt;
	size_t i;&lt;br /&gt;
&lt;br /&gt;
	for (i = 0; i &amp;lt; halfCount; i++) {&lt;br /&gt;
		uint16_t word = plain[i];&lt;br /&gt;
		cipher[i] = xorval ^ word;&lt;br /&gt;
		xorval = word;&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Error detection ===&lt;br /&gt;
The trailing error detection byte is calculated using [[CRC-8-CCITT]] &amp;lt;b&amp;gt;over the whole packet&amp;lt;/b&amp;gt; (both the header and the payload)&lt;br /&gt;
&lt;br /&gt;
== Layer 2 - &amp;quot;ircom&amp;quot; ==&lt;br /&gt;
ircom is a simple stateful point-to-point master-slave communication protocol built on top of IR layer 1.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0 auto; text-align: center;&amp;quot;&lt;br /&gt;
! style=&amp;quot;border-top: none&amp;quot; | Byte&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 7&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 6&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 5&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 4&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 3&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 2&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 1&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 0&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x04&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|RFU?&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|Protocol version: &amp;lt;code&amp;gt;0x1&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x05&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Connection identifier&lt;br /&gt;
|-&lt;br /&gt;
! 0x06&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Reserved for future use?&lt;br /&gt;
|-&lt;br /&gt;
! 0x07&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|???&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|Operation code&lt;br /&gt;
|-&lt;br /&gt;
! 0x08+&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot; style=&amp;quot;background:#ffd0d0;&amp;quot;|Payload (if any)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Random values are generated using a Mersenne Twister whose seed is based off the NFC adapter system tick counter. It is therefore random, and the 3DS won&#039;t attempt to validate them by any means. Its purpose is unknown.&lt;br /&gt;
* NFC adapter will ignore packets whose protocol version is not 1. It will not even reply.&lt;br /&gt;
* Connection identifier is a random byte the 3DS assigns to identify the connection should be several connections in range at once. Slave devices must save this value from the initial handshake packet and use it for replies. It must also ignore packets whose connection ID does not match.&lt;br /&gt;
&lt;br /&gt;
=== Operation codes ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Code&lt;br /&gt;
! Name&lt;br /&gt;
! Has payload&lt;br /&gt;
! Direction&lt;br /&gt;
|-&lt;br /&gt;
! 0x0&lt;br /&gt;
| Layer 3 command?&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| Master to slave&lt;br /&gt;
|-&lt;br /&gt;
! 0x1&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x2&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x3&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x4&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x5&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x6&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x7&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x8&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x9&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0xA&lt;br /&gt;
| Disconnect request&lt;br /&gt;
| style=&amp;quot;background: red&amp;quot; | No&lt;br /&gt;
| Master to slave&lt;br /&gt;
|-&lt;br /&gt;
! 0xB&lt;br /&gt;
| Disconnection acknowledgment&lt;br /&gt;
| style=&amp;quot;background: red&amp;quot; | No&lt;br /&gt;
| Slave to master&lt;br /&gt;
|-&lt;br /&gt;
! 0xC&lt;br /&gt;
| Handshake&lt;br /&gt;
| style=&amp;quot;background: red&amp;quot; | No&lt;br /&gt;
| Master to slave&lt;br /&gt;
|-&lt;br /&gt;
! 0xD&lt;br /&gt;
| Handshake acknowledgement&lt;br /&gt;
| style=&amp;quot;background: red&amp;quot; | No&lt;br /&gt;
| Slave to master&lt;br /&gt;
|-&lt;br /&gt;
! 0xE&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0xF&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Samples ==&lt;br /&gt;
&lt;br /&gt;
NFC handshake beacons:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Layer 1 packet&lt;br /&gt;
! Layer 2 packet&lt;br /&gt;
! Layer 3 packet&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 73 FE A5 C4 A4 2C A4 20 F5&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9A 9D D6 3A 01 E8 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 D1 3E B7 7B B6 91 B6 9D 87&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;38 5D 66 45 01 EA 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 09 58 23 36 22 DA 22 D6 AE&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;E0 3B 2A 6E 01 EC 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 5E DD A4 A0 A5 4E A5 42 A8&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;B7 BE FA 7D 01 EE 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 BC 19 C6 37 C7 C7 C7 CB 8B&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;55 7A 7A 2E 01 F0 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C9 15 F6 63 F7 91 F7 9D B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;20 76 3F 76 01 F2 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 6E 48 47 1A 46 EE 46 E2 C7&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;87 2B 29 52 01 F4 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A2 8C E5 C3 E4 35 E4 39 74&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4B EF 47 4F 01 F6 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 26 1C 07 10 06 E8 06 E4 64&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;CF 7F 21 0C 01 F8 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 7E 73 A2 3F A3 C5 A3 C9 FD&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;97 10 DC 4C 01 FA 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 75 00 F3 B8 F2 44 F2 48 63&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9C 63 86 B8 01 FC 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 8D AC 0F D5 0E 2B 0E 27 72&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;64 CF 82 79 01 FE 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A3 55 7C 53 7D 52 7D 5E B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4A 36 DF 06 01 01 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 15 06 43 C0 42 C3 42 CF 85&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FC 65 56 C6 01 03 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 66 E0 9A 17 9B 12 9B 1E A0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;8F 83 FC F7 01 05 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A4 35 09 97 08 90 08 9C 25&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4D 56 AD A2 01 07 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 73 E2 BD AF BC A6 BC AA 60&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9A 81 CE 4D 01 09 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 02 57 D7 B0 D6 BB D6 B7 28&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;EB 34 D5 E7 01 0B 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 0D 79 01 AA 00 A7 00 AB 22&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;E4 1A 0C D3 01 0D 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 14 91 04 B9 05 B6 05 BA B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FD F2 10 28 01 0F 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 2C 86 B1 49 B0 58 B0 54 C0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;C5 E5 9D CF 01 11 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 D5 1D DE DB DF C8 DF C4 F9&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;3C 7E 0B C6 01 13 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 AF 75 DE 5C DF 49 DF 45 9C&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;46 16 71 29 01 15 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C8 E2 5B C6 5A D1 5A DD B5&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;21 81 93 24 01 17 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 9B 51 68 2D 69 34 69 38 41&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;72 32 F3 7C 01 19 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 13 7B 9F EF 9E F4 9E F8 32&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FA 18 8C 94 01 1B 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A7 62 02 9C 03 81 03 8D BD&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4E 01 A5 FE 01 1D 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 39 06 94 36 95 29 95 25 09&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;D0 65 AD 30 01 1F 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 32 4C D7 C0 D6 E1 D6 ED 92&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;DB 2F E5 8C 01 21 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 83 BE F2 8F F3 AC F3 A0 B1&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;6A DD 71 31 01 23 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 83 5E A0 57 A1 72 A1 7E F0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;6A 3D 23 09 01 25 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 6E C8 AD 69 AC 4E AC 42 D1&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;87 AB C3 A1 01 27 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C7 33 A1 2C A0 05 A0 09 FC&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;2E 50 66 1F 01 29 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
* [https://www.broadcom.com/products/NFC/NFC-Solutions/BCM2079x-Family BCM2079x brief on Broadcom&#039;s website]&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12481</id>
		<title>NFC adapter</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12481"/>
		<updated>2015-04-20T12:34:53Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo NFC adapter is an upcoming external device which adds NFC capabilities for [[amiibo]]s to old Nintendo 3DS and Nintendo 2DS consoles, using the infrared port on the back of the console.&lt;br /&gt;
&lt;br /&gt;
[[File:150217nfcreader-640x360.jpg|thumb|right|250px|Media preview, as released by Nintendo]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Technical details =&lt;br /&gt;
Based on analysis of the [[fangate_updater.bin]] file, which is part of the old Nintendo 3DS operating system since [[9.3.0-21]] and contains the firmware running on the external adapter; and analysis of the [[NFC Services]] running on old 3DS.&lt;br /&gt;
&lt;br /&gt;
* SOC inside the adapter: Broadcom BCM20791B1&lt;br /&gt;
* CPU: ARM Cortex M0&lt;br /&gt;
* Communications: infrared, with [[ir:USER]] running on the console. Uses obfuscated payloads. Baud rate is 115200 bps.&lt;br /&gt;
&lt;br /&gt;
Memory map:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x08008000&lt;br /&gt;
| 256KB?&lt;br /&gt;
| Firmware ([[fangate_updater.bin]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 128KB?&lt;br /&gt;
| RAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x40023C00&lt;br /&gt;
| 0x1C&lt;br /&gt;
| FLASH ROM control&lt;br /&gt;
|-&lt;br /&gt;
| 0xE000ED00&lt;br /&gt;
| 0x104&lt;br /&gt;
| [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0439b/BABCIIIA.html ARM Cortex system control block]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= IR communications =&lt;br /&gt;
Packets are sent using IrDA-SIR (using [[ir:USER]]), with a 8N1 encoding (eight data bits, one stop bit, without parity). Each one is formed by a 2-byte header, a varint with the payload size, an obfuscated payload, and trailing error detection byte.&lt;br /&gt;
&lt;br /&gt;
== Layer 1 - framing format ==&lt;br /&gt;
Frames are encoded using two different yet very simmilar formats, depending on how large the payload to be transmitted is:&lt;br /&gt;
* For payloads with less than 64 bytes, the third byte represents the payload size.&lt;br /&gt;
* For packets with up to 16383 bytes, the size is split in two bytes, with the third byte being the upper 6 bits of the payload size, OR&#039;d with 0x40, and the fourth being the lower eight bits of the payload size&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0 auto; text-align: center;&amp;quot;&lt;br /&gt;
|+IR framing format - short frame&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-top: none&amp;quot; | Byte&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 7&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 6&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 5&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 4&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 3&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 2&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 1&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 0&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Synchronization byte (&amp;lt;code&amp;gt;0xA5&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Reserved for future use (&amp;lt;code&amp;gt;0x00&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| RFU (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
| Short frame (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot;|Payload size&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte 0&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot;|...&lt;br /&gt;
|-&lt;br /&gt;
! 0x03+n-1&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte n-1&lt;br /&gt;
|-&lt;br /&gt;
! 0x03+n&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|[[CRC-8-CCITT]] computer over whole packet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0 auto; text-align: center;&amp;quot;&lt;br /&gt;
|+IR framing format - long frame&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-top: none&amp;quot; | Byte&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 7&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 6&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 5&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 4&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 3&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 2&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 1&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 0&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Synchronization byte: &amp;lt;code&amp;gt;0xA5&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Reserved for future use&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| RFU (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
| Long frame (&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;)&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot;|Payload size (upper 6 bits)&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload size (lower 8 bits)&lt;br /&gt;
|-&lt;br /&gt;
! 0x04&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte 0&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot;|...&lt;br /&gt;
|-&lt;br /&gt;
! 0x04+n-1&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte n-1&lt;br /&gt;
|-&lt;br /&gt;
! 0x04+n&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|[[CRC-8-CCITT]] computer over whole packet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
The packet header is fixed and consists in a synchronization byte (0xA5), followed by a unused (possibly RFU) zero byte. After these two hardcoded bytes, there&#039;s a varint representing the payload size, which may use one byte or two, depending on the how big the payload is.&lt;br /&gt;
&lt;br /&gt;
In C:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;uint8_t * setPacketHeader(uint8_t * buffer, size_t payloadSize) {&lt;br /&gt;
	assert(payloadSize &amp;lt; 16384);&lt;br /&gt;
&lt;br /&gt;
	buffer[0] = 0xA5;&lt;br /&gt;
	buffer[1] = 0x00;&lt;br /&gt;
&lt;br /&gt;
	if (payloadSize &amp;lt; 64) {&lt;br /&gt;
		buffer[2] = payloadSize;&lt;br /&gt;
		buffer += 3;&lt;br /&gt;
	} else {&lt;br /&gt;
		buffer[2] = 0x40 | (payloadSize &amp;gt;&amp;gt; 8);&lt;br /&gt;
		buffer[3] = payloadSize;&lt;br /&gt;
		buffer += 4;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return buffer;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Payload ===&lt;br /&gt;
The payload is obfuscated using a XOR-based encryption. In C:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;void payloadObfuscate(const void * voidplain, void * voidcipher, size_t size) {&lt;br /&gt;
	uint16_t * plain = (uint16_t *) voidplain;&lt;br /&gt;
	uint16_t * cipher = (uint16_t *) voidcipher;&lt;br /&gt;
	size_t halfCount = size / sizeof(uint16_t);&lt;br /&gt;
&lt;br /&gt;
	uint16_t xorval = htobe16(0xE963);&lt;br /&gt;
	size_t i;&lt;br /&gt;
&lt;br /&gt;
	for (i = 0; i &amp;lt; halfCount; i++) {&lt;br /&gt;
		xorval ^= plain[i];&lt;br /&gt;
		cipher[i] = xorval;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void payloadDeobfuscate(const void * voidcipher, void * voidplain, size_t size) {&lt;br /&gt;
	uint16_t * cipher = (uint16_t *) voidcipher;&lt;br /&gt;
	uint16_t * plain = (uint16_t *) voidplain;&lt;br /&gt;
	size_t halfCount = size / sizeof(uint16_t);&lt;br /&gt;
&lt;br /&gt;
	if (halfCount) {&lt;br /&gt;
		size_t i;&lt;br /&gt;
		for (i = halfCount - 1; i &amp;gt; 0; i--) {&lt;br /&gt;
			plain[i] = cipher[i] ^ cipher[i - 1];&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		plain[0] = cipher[0] ^ htobe16(0xE963);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Error detection ===&lt;br /&gt;
The trailing error detection byte is calculated using [[CRC-8-CCITT]] &amp;lt;b&amp;gt;over the whole packet&amp;lt;/b&amp;gt; (both the header and the payload)&lt;br /&gt;
&lt;br /&gt;
== Layer 2 - &amp;quot;ircom&amp;quot; ==&lt;br /&gt;
ircom is a simple stateful point-to-point master-slave communication protocol built on top of IR layer 1.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0 auto; text-align: center;&amp;quot;&lt;br /&gt;
! style=&amp;quot;border-top: none&amp;quot; | Byte&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 7&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 6&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 5&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 4&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 3&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 2&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 1&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 0&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x04&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|RFU?&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|Protocol version: &amp;lt;code&amp;gt;0x1&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x05&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Connection identifier&lt;br /&gt;
|-&lt;br /&gt;
! 0x06&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Reserved for future use?&lt;br /&gt;
|-&lt;br /&gt;
! 0x07&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|???&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|Operation code&lt;br /&gt;
|-&lt;br /&gt;
! 0x08+&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot; style=&amp;quot;background:#ffd0d0;&amp;quot;|Payload (if any)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Random values are generated using a Mersenne Twister whose seed is based off the NFC adapter system tick counter. It is therefore random, and the 3DS won&#039;t attempt to validate them by any means. Its purpose is unknown.&lt;br /&gt;
* NFC adapter will ignore packets whose protocol version is not 1. It will not even reply.&lt;br /&gt;
* Connection identifier is a random byte the 3DS assigns to identify the connection should be several connections in range at once. Slave devices must save this value from the initial handshake packet and use it for replies. It must also ignore packets whose connection ID does not match.&lt;br /&gt;
&lt;br /&gt;
=== Operation codes ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Code&lt;br /&gt;
! Name&lt;br /&gt;
! Has payload&lt;br /&gt;
! Direction&lt;br /&gt;
|-&lt;br /&gt;
! 0x0&lt;br /&gt;
| Layer 3 command?&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| Master to slave&lt;br /&gt;
|-&lt;br /&gt;
! 0x1&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x2&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x3&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x4&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x5&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x6&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x7&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x8&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x9&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0xA&lt;br /&gt;
| Disconnect request&lt;br /&gt;
| style=&amp;quot;background: red&amp;quot; | No&lt;br /&gt;
| Master to slave&lt;br /&gt;
|-&lt;br /&gt;
! 0xB&lt;br /&gt;
| Disconnection acknowledgment&lt;br /&gt;
| style=&amp;quot;background: red&amp;quot; | No&lt;br /&gt;
| Slave to master&lt;br /&gt;
|-&lt;br /&gt;
! 0xC&lt;br /&gt;
| Handshake&lt;br /&gt;
| style=&amp;quot;background: red&amp;quot; | No&lt;br /&gt;
| Master to slave&lt;br /&gt;
|-&lt;br /&gt;
! 0xD&lt;br /&gt;
| Handshake acknowledgement&lt;br /&gt;
| style=&amp;quot;background: red&amp;quot; | No&lt;br /&gt;
| Slave to master&lt;br /&gt;
|-&lt;br /&gt;
! 0xE&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0xF&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Samples ==&lt;br /&gt;
&lt;br /&gt;
NFC handshake beacons:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Layer 1 packet&lt;br /&gt;
! Layer 2 packet&lt;br /&gt;
! Layer 3 packet&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 73 FE A5 C4 A4 2C A4 20 F5&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9A 9D D6 3A 01 E8 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 D1 3E B7 7B B6 91 B6 9D 87&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;38 5D 66 45 01 EA 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 09 58 23 36 22 DA 22 D6 AE&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;E0 3B 2A 6E 01 EC 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 5E DD A4 A0 A5 4E A5 42 A8&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;B7 BE FA 7D 01 EE 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 BC 19 C6 37 C7 C7 C7 CB 8B&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;55 7A 7A 2E 01 F0 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C9 15 F6 63 F7 91 F7 9D B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;20 76 3F 76 01 F2 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 6E 48 47 1A 46 EE 46 E2 C7&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;87 2B 29 52 01 F4 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A2 8C E5 C3 E4 35 E4 39 74&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4B EF 47 4F 01 F6 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 26 1C 07 10 06 E8 06 E4 64&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;CF 7F 21 0C 01 F8 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 7E 73 A2 3F A3 C5 A3 C9 FD&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;97 10 DC 4C 01 FA 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 75 00 F3 B8 F2 44 F2 48 63&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9C 63 86 B8 01 FC 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 8D AC 0F D5 0E 2B 0E 27 72&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;64 CF 82 79 01 FE 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A3 55 7C 53 7D 52 7D 5E B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4A 36 DF 06 01 01 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 15 06 43 C0 42 C3 42 CF 85&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FC 65 56 C6 01 03 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 66 E0 9A 17 9B 12 9B 1E A0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;8F 83 FC F7 01 05 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A4 35 09 97 08 90 08 9C 25&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4D 56 AD A2 01 07 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 73 E2 BD AF BC A6 BC AA 60&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9A 81 CE 4D 01 09 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 02 57 D7 B0 D6 BB D6 B7 28&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;EB 34 D5 E7 01 0B 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 0D 79 01 AA 00 A7 00 AB 22&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;E4 1A 0C D3 01 0D 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 14 91 04 B9 05 B6 05 BA B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FD F2 10 28 01 0F 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 2C 86 B1 49 B0 58 B0 54 C0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;C5 E5 9D CF 01 11 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 D5 1D DE DB DF C8 DF C4 F9&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;3C 7E 0B C6 01 13 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 AF 75 DE 5C DF 49 DF 45 9C&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;46 16 71 29 01 15 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C8 E2 5B C6 5A D1 5A DD B5&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;21 81 93 24 01 17 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 9B 51 68 2D 69 34 69 38 41&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;72 32 F3 7C 01 19 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 13 7B 9F EF 9E F4 9E F8 32&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FA 18 8C 94 01 1B 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A7 62 02 9C 03 81 03 8D BD&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4E 01 A5 FE 01 1D 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 39 06 94 36 95 29 95 25 09&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;D0 65 AD 30 01 1F 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 32 4C D7 C0 D6 E1 D6 ED 92&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;DB 2F E5 8C 01 21 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 83 BE F2 8F F3 AC F3 A0 B1&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;6A DD 71 31 01 23 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 83 5E A0 57 A1 72 A1 7E F0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;6A 3D 23 09 01 25 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 6E C8 AD 69 AC 4E AC 42 D1&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;87 AB C3 A1 01 27 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C7 33 A1 2C A0 05 A0 09 FC&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;2E 50 66 1F 01 29 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
| ␀&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
* [https://www.broadcom.com/products/NFC/NFC-Solutions/BCM2079x-Family BCM2079x brief on Broadcom&#039;s website]&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12480</id>
		<title>NFC adapter</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12480"/>
		<updated>2015-04-20T12:23:42Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: /* Samples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo NFC adapter is an upcoming external device which adds NFC capabilities for [[amiibo]]s to old Nintendo 3DS and Nintendo 2DS consoles, using the infrared port on the back of the console.&lt;br /&gt;
&lt;br /&gt;
[[File:150217nfcreader-640x360.jpg|thumb|right|250px|Media preview, as released by Nintendo]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Technical details =&lt;br /&gt;
Based on analysis of the [[fangate_updater.bin]] file, which is part of the old Nintendo 3DS operating system since [[9.3.0-21]] and contains the firmware running on the external adapter; and analysis of the [[NFC Services]] running on old 3DS.&lt;br /&gt;
&lt;br /&gt;
* SOC inside the adapter: Broadcom BCM20791B1&lt;br /&gt;
* CPU: ARM Cortex M0&lt;br /&gt;
* Communications: infrared, with [[ir:USER]] running on the console. Uses obfuscated payloads. Baud rate is 115200 bps.&lt;br /&gt;
&lt;br /&gt;
Memory map:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x08008000&lt;br /&gt;
| 256KB?&lt;br /&gt;
| Firmware ([[fangate_updater.bin]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 128KB?&lt;br /&gt;
| RAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x40023C00&lt;br /&gt;
| 0x1C&lt;br /&gt;
| FLASH ROM control&lt;br /&gt;
|-&lt;br /&gt;
| 0xE000ED00&lt;br /&gt;
| 0x104&lt;br /&gt;
| [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0439b/BABCIIIA.html ARM Cortex system control block]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= IR communications =&lt;br /&gt;
Packets are sent using IrDA-SIR (using [[ir:USER]]), with a 8N1 encoding (eight data bits, one stop bit, without parity). Each one is formed by a 2-byte header, a varint with the payload size, an obfuscated payload, and trailing error detection byte.&lt;br /&gt;
&lt;br /&gt;
== Layer 1 - framing format ==&lt;br /&gt;
Frames are encoded using two different yet very simmilar formats, depending on how large the payload to be transmitted is:&lt;br /&gt;
* For payloads with less than 64 bytes, the third byte represents the payload size.&lt;br /&gt;
* For packets with up to 16383 bytes, the size is split in two bytes, with the third byte being the upper 6 bits of the payload size, OR&#039;d with 0x40, and the fourth being the lower eight bits of the payload size&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0 auto; text-align: center;&amp;quot;&lt;br /&gt;
|+IR framing format - short frame&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-top: none&amp;quot; | Byte&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 7&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 6&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 5&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 4&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 3&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 2&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 1&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 0&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Synchronization byte (&amp;lt;code&amp;gt;0xA5&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Reserved for future use (&amp;lt;code&amp;gt;0x00&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| RFU (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
| Short frame (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot;|Payload size&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte 0&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot;|...&lt;br /&gt;
|-&lt;br /&gt;
! 0x03+n-1&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte n-1&lt;br /&gt;
|-&lt;br /&gt;
! 0x03+n&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|[[CRC-8-CCITT]] computer over whole packet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0 auto; text-align: center;&amp;quot;&lt;br /&gt;
|+IR framing format - long frame&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-top: none&amp;quot; | Byte&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 7&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 6&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 5&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 4&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 3&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 2&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 1&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 0&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Synchronization byte: &amp;lt;code&amp;gt;0xA5&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Reserved for future use&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| RFU (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
| Long frame (&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;)&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot;|Payload size (upper 6 bits)&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload size (lower 8 bits)&lt;br /&gt;
|-&lt;br /&gt;
! 0x04&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte 0&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot;|...&lt;br /&gt;
|-&lt;br /&gt;
! 0x04+n-1&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte n-1&lt;br /&gt;
|-&lt;br /&gt;
! 0x04+n&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|[[CRC-8-CCITT]] computer over whole packet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
The packet header is fixed and consists in a synchronization byte (0xA5), followed by a unused (possibly RFU) zero byte. After these two hardcoded bytes, there&#039;s a varint representing the payload size, which may use one byte or two, depending on the how big the payload is.&lt;br /&gt;
&lt;br /&gt;
In C:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;uint8_t * setPacketHeader(uint8_t * buffer, size_t payloadSize) {&lt;br /&gt;
	assert(payloadSize &amp;lt; 16384);&lt;br /&gt;
&lt;br /&gt;
	buffer[0] = 0xA5;&lt;br /&gt;
	buffer[1] = 0x00;&lt;br /&gt;
&lt;br /&gt;
	if (payloadSize &amp;lt; 64) {&lt;br /&gt;
		buffer[2] = payloadSize;&lt;br /&gt;
		buffer += 3;&lt;br /&gt;
	} else {&lt;br /&gt;
		buffer[2] = 0x40 | (payloadSize &amp;gt;&amp;gt; 8);&lt;br /&gt;
		buffer[3] = payloadSize;&lt;br /&gt;
		buffer += 4;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return buffer;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Payload ===&lt;br /&gt;
The payload is obfuscated using a XOR-based encryption. In C:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;void payloadObfuscate(const void * voidplain, void * voidcipher, size_t size) {&lt;br /&gt;
	uint16_t * plain = (uint16_t *) voidplain;&lt;br /&gt;
	uint16_t * cipher = (uint16_t *) voidcipher;&lt;br /&gt;
	size_t halfCount = size / sizeof(uint16_t);&lt;br /&gt;
&lt;br /&gt;
	uint16_t xorval = htobe16(0xE963);&lt;br /&gt;
	size_t i;&lt;br /&gt;
&lt;br /&gt;
	for (i = 0; i &amp;lt; halfCount; i++) {&lt;br /&gt;
		xorval ^= plain[i];&lt;br /&gt;
		cipher[i] = xorval;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void payloadDeobfuscate(const void * voidcipher, void * voidplain, size_t size) {&lt;br /&gt;
	uint16_t * cipher = (uint16_t *) voidcipher;&lt;br /&gt;
	uint16_t * plain = (uint16_t *) voidplain;&lt;br /&gt;
	size_t halfCount = size / sizeof(uint16_t);&lt;br /&gt;
&lt;br /&gt;
	if (halfCount) {&lt;br /&gt;
		size_t i;&lt;br /&gt;
		for (i = halfCount - 1; i &amp;gt; 0; i--) {&lt;br /&gt;
			plain[i] = cipher[i] ^ cipher[i - 1];&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		plain[0] = cipher[0] ^ htobe16(0xE963);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Error detection ===&lt;br /&gt;
The trailing error detection byte is calculated using [[CRC-8-CCITT]] &amp;lt;b&amp;gt;over the whole packet&amp;lt;/b&amp;gt; (both the header and the payload)&lt;br /&gt;
&lt;br /&gt;
== Layer 2 - &amp;quot;ircom&amp;quot; ==&lt;br /&gt;
ircom is a simple stateful point-to-point master-slave communication protocol built on top of IR layer 1.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0 auto; text-align: center;&amp;quot;&lt;br /&gt;
! style=&amp;quot;border-top: none&amp;quot; | Byte&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 7&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 6&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 5&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 4&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 3&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 2&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 1&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 0&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x04&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|RFU?&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|Protocol version: &amp;lt;code&amp;gt;0x1&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x05&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Connection identifier&lt;br /&gt;
|-&lt;br /&gt;
! 0x06&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Reserved for future use?&lt;br /&gt;
|-&lt;br /&gt;
! 0x07&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|???&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|Operation code&lt;br /&gt;
|-&lt;br /&gt;
! 0x08+&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot; style=&amp;quot;background:#ffd0d0;&amp;quot;|Payload (if any)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Random values are generated using a Mersenne Twister whose seed is based off the NFC adapter system tick counter. It is therefore random, and the 3DS won&#039;t attempt to validate them by any means. Its purpose is unknown.&lt;br /&gt;
* NFC adapter will ignore packets whose protocol version is not 1. It will not even reply.&lt;br /&gt;
* Connection identifier is a random byte the 3DS assigns to identify the connection should be several connections in range at once. Slave devices must save this value from the initial handshake packet and use it for replies. It must also ignore packets whose connection ID does not match.&lt;br /&gt;
&lt;br /&gt;
=== Operation codes ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+IR framing format - long frame&lt;br /&gt;
|-&lt;br /&gt;
! Code&lt;br /&gt;
! Name&lt;br /&gt;
! Direction&lt;br /&gt;
|-&lt;br /&gt;
! 0x0&lt;br /&gt;
| Layer 3 command?&lt;br /&gt;
| 3DS to NFC&lt;br /&gt;
|-&lt;br /&gt;
! 0x1&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x2&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x3&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x4&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x5&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x6&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x7&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x8&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x9&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0xA&lt;br /&gt;
| Disconnect request&lt;br /&gt;
| 3DS to NFC&lt;br /&gt;
|-&lt;br /&gt;
! 0xB&lt;br /&gt;
| Disconnection acknowledgment&lt;br /&gt;
| NFC to 3DS&lt;br /&gt;
|-&lt;br /&gt;
! 0xC&lt;br /&gt;
| Handshake&lt;br /&gt;
| 3DS to NFC&lt;br /&gt;
|-&lt;br /&gt;
! 0xD&lt;br /&gt;
| Handshake acknowledgement&lt;br /&gt;
| NFC to 3DS&lt;br /&gt;
|-&lt;br /&gt;
! 0xE&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0xF&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Samples ==&lt;br /&gt;
&lt;br /&gt;
NFC handshake beacons:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Layer 1 packet&lt;br /&gt;
! Layer 2 packet&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 73 FE A5 C4 A4 2C A4 20 F5&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9A 9D D6 3A 01 E8 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 D1 3E B7 7B B6 91 B6 9D 87&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;38 5D 66 45 01 EA 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 09 58 23 36 22 DA 22 D6 AE&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;E0 3B 2A 6E 01 EC 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 5E DD A4 A0 A5 4E A5 42 A8&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;B7 BE FA 7D 01 EE 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 BC 19 C6 37 C7 C7 C7 CB 8B&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;55 7A 7A 2E 01 F0 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C9 15 F6 63 F7 91 F7 9D B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;20 76 3F 76 01 F2 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 6E 48 47 1A 46 EE 46 E2 C7&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;87 2B 29 52 01 F4 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A2 8C E5 C3 E4 35 E4 39 74&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4B EF 47 4F 01 F6 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 26 1C 07 10 06 E8 06 E4 64&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;CF 7F 21 0C 01 F8 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 7E 73 A2 3F A3 C5 A3 C9 FD&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;97 10 DC 4C 01 FA 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 75 00 F3 B8 F2 44 F2 48 63&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9C 63 86 B8 01 FC 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 8D AC 0F D5 0E 2B 0E 27 72&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;64 CF 82 79 01 FE 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A3 55 7C 53 7D 52 7D 5E B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4A 36 DF 06 01 01 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 15 06 43 C0 42 C3 42 CF 85&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FC 65 56 C6 01 03 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 66 E0 9A 17 9B 12 9B 1E A0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;8F 83 FC F7 01 05 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A4 35 09 97 08 90 08 9C 25&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4D 56 AD A2 01 07 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 73 E2 BD AF BC A6 BC AA 60&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9A 81 CE 4D 01 09 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 02 57 D7 B0 D6 BB D6 B7 28&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;EB 34 D5 E7 01 0B 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 0D 79 01 AA 00 A7 00 AB 22&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;E4 1A 0C D3 01 0D 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 14 91 04 B9 05 B6 05 BA B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FD F2 10 28 01 0F 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 2C 86 B1 49 B0 58 B0 54 C0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;C5 E5 9D CF 01 11 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 D5 1D DE DB DF C8 DF C4 F9&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;3C 7E 0B C6 01 13 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 AF 75 DE 5C DF 49 DF 45 9C&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;46 16 71 29 01 15 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C8 E2 5B C6 5A D1 5A DD B5&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;21 81 93 24 01 17 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 9B 51 68 2D 69 34 69 38 41&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;72 32 F3 7C 01 19 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 13 7B 9F EF 9E F4 9E F8 32&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FA 18 8C 94 01 1B 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A7 62 02 9C 03 81 03 8D BD&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4E 01 A5 FE 01 1D 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 39 06 94 36 95 29 95 25 09&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;D0 65 AD 30 01 1F 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 32 4C D7 C0 D6 E1 D6 ED 92&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;DB 2F E5 8C 01 21 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 83 BE F2 8F F3 AC F3 A0 B1&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;6A DD 71 31 01 23 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 83 5E A0 57 A1 72 A1 7E F0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;6A 3D 23 09 01 25 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 6E C8 AD 69 AC 4E AC 42 D1&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;87 AB C3 A1 01 27 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C7 33 A1 2C A0 05 A0 09 FC&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;2E 50 66 1F 01 29 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
* [https://www.broadcom.com/products/NFC/NFC-Solutions/BCM2079x-Family BCM2079x brief on Broadcom&#039;s website]&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12479</id>
		<title>NFC adapter</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12479"/>
		<updated>2015-04-20T12:23:11Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: /* Samples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo NFC adapter is an upcoming external device which adds NFC capabilities for [[amiibo]]s to old Nintendo 3DS and Nintendo 2DS consoles, using the infrared port on the back of the console.&lt;br /&gt;
&lt;br /&gt;
[[File:150217nfcreader-640x360.jpg|thumb|right|250px|Media preview, as released by Nintendo]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Technical details =&lt;br /&gt;
Based on analysis of the [[fangate_updater.bin]] file, which is part of the old Nintendo 3DS operating system since [[9.3.0-21]] and contains the firmware running on the external adapter; and analysis of the [[NFC Services]] running on old 3DS.&lt;br /&gt;
&lt;br /&gt;
* SOC inside the adapter: Broadcom BCM20791B1&lt;br /&gt;
* CPU: ARM Cortex M0&lt;br /&gt;
* Communications: infrared, with [[ir:USER]] running on the console. Uses obfuscated payloads. Baud rate is 115200 bps.&lt;br /&gt;
&lt;br /&gt;
Memory map:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x08008000&lt;br /&gt;
| 256KB?&lt;br /&gt;
| Firmware ([[fangate_updater.bin]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 128KB?&lt;br /&gt;
| RAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x40023C00&lt;br /&gt;
| 0x1C&lt;br /&gt;
| FLASH ROM control&lt;br /&gt;
|-&lt;br /&gt;
| 0xE000ED00&lt;br /&gt;
| 0x104&lt;br /&gt;
| [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0439b/BABCIIIA.html ARM Cortex system control block]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= IR communications =&lt;br /&gt;
Packets are sent using IrDA-SIR (using [[ir:USER]]), with a 8N1 encoding (eight data bits, one stop bit, without parity). Each one is formed by a 2-byte header, a varint with the payload size, an obfuscated payload, and trailing error detection byte.&lt;br /&gt;
&lt;br /&gt;
== Layer 1 - framing format ==&lt;br /&gt;
Frames are encoded using two different yet very simmilar formats, depending on how large the payload to be transmitted is:&lt;br /&gt;
* For payloads with less than 64 bytes, the third byte represents the payload size.&lt;br /&gt;
* For packets with up to 16383 bytes, the size is split in two bytes, with the third byte being the upper 6 bits of the payload size, OR&#039;d with 0x40, and the fourth being the lower eight bits of the payload size&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0 auto; text-align: center;&amp;quot;&lt;br /&gt;
|+IR framing format - short frame&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-top: none&amp;quot; | Byte&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 7&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 6&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 5&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 4&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 3&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 2&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 1&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 0&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Synchronization byte (&amp;lt;code&amp;gt;0xA5&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Reserved for future use (&amp;lt;code&amp;gt;0x00&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| RFU (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
| Short frame (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot;|Payload size&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte 0&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot;|...&lt;br /&gt;
|-&lt;br /&gt;
! 0x03+n-1&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte n-1&lt;br /&gt;
|-&lt;br /&gt;
! 0x03+n&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|[[CRC-8-CCITT]] computer over whole packet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0 auto; text-align: center;&amp;quot;&lt;br /&gt;
|+IR framing format - long frame&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-top: none&amp;quot; | Byte&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 7&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 6&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 5&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 4&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 3&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 2&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 1&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 0&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Synchronization byte: &amp;lt;code&amp;gt;0xA5&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Reserved for future use&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| RFU (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
| Long frame (&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;)&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot;|Payload size (upper 6 bits)&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload size (lower 8 bits)&lt;br /&gt;
|-&lt;br /&gt;
! 0x04&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte 0&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot;|...&lt;br /&gt;
|-&lt;br /&gt;
! 0x04+n-1&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte n-1&lt;br /&gt;
|-&lt;br /&gt;
! 0x04+n&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|[[CRC-8-CCITT]] computer over whole packet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
The packet header is fixed and consists in a synchronization byte (0xA5), followed by a unused (possibly RFU) zero byte. After these two hardcoded bytes, there&#039;s a varint representing the payload size, which may use one byte or two, depending on the how big the payload is.&lt;br /&gt;
&lt;br /&gt;
In C:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;uint8_t * setPacketHeader(uint8_t * buffer, size_t payloadSize) {&lt;br /&gt;
	assert(payloadSize &amp;lt; 16384);&lt;br /&gt;
&lt;br /&gt;
	buffer[0] = 0xA5;&lt;br /&gt;
	buffer[1] = 0x00;&lt;br /&gt;
&lt;br /&gt;
	if (payloadSize &amp;lt; 64) {&lt;br /&gt;
		buffer[2] = payloadSize;&lt;br /&gt;
		buffer += 3;&lt;br /&gt;
	} else {&lt;br /&gt;
		buffer[2] = 0x40 | (payloadSize &amp;gt;&amp;gt; 8);&lt;br /&gt;
		buffer[3] = payloadSize;&lt;br /&gt;
		buffer += 4;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return buffer;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Payload ===&lt;br /&gt;
The payload is obfuscated using a XOR-based encryption. In C:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;void payloadObfuscate(const void * voidplain, void * voidcipher, size_t size) {&lt;br /&gt;
	uint16_t * plain = (uint16_t *) voidplain;&lt;br /&gt;
	uint16_t * cipher = (uint16_t *) voidcipher;&lt;br /&gt;
	size_t halfCount = size / sizeof(uint16_t);&lt;br /&gt;
&lt;br /&gt;
	uint16_t xorval = htobe16(0xE963);&lt;br /&gt;
	size_t i;&lt;br /&gt;
&lt;br /&gt;
	for (i = 0; i &amp;lt; halfCount; i++) {&lt;br /&gt;
		xorval ^= plain[i];&lt;br /&gt;
		cipher[i] = xorval;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void payloadDeobfuscate(const void * voidcipher, void * voidplain, size_t size) {&lt;br /&gt;
	uint16_t * cipher = (uint16_t *) voidcipher;&lt;br /&gt;
	uint16_t * plain = (uint16_t *) voidplain;&lt;br /&gt;
	size_t halfCount = size / sizeof(uint16_t);&lt;br /&gt;
&lt;br /&gt;
	if (halfCount) {&lt;br /&gt;
		size_t i;&lt;br /&gt;
		for (i = halfCount - 1; i &amp;gt; 0; i--) {&lt;br /&gt;
			plain[i] = cipher[i] ^ cipher[i - 1];&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		plain[0] = cipher[0] ^ htobe16(0xE963);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Error detection ===&lt;br /&gt;
The trailing error detection byte is calculated using [[CRC-8-CCITT]] &amp;lt;b&amp;gt;over the whole packet&amp;lt;/b&amp;gt; (both the header and the payload)&lt;br /&gt;
&lt;br /&gt;
== Layer 2 - &amp;quot;ircom&amp;quot; ==&lt;br /&gt;
ircom is a simple stateful point-to-point master-slave communication protocol built on top of IR layer 1.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0 auto; text-align: center;&amp;quot;&lt;br /&gt;
! style=&amp;quot;border-top: none&amp;quot; | Byte&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 7&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 6&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 5&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 4&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 3&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 2&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 1&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 0&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x04&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|RFU?&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|Protocol version: &amp;lt;code&amp;gt;0x1&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x05&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Connection identifier&lt;br /&gt;
|-&lt;br /&gt;
! 0x06&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Reserved for future use?&lt;br /&gt;
|-&lt;br /&gt;
! 0x07&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|???&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|Operation code&lt;br /&gt;
|-&lt;br /&gt;
! 0x08+&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot; style=&amp;quot;background:#ffd0d0;&amp;quot;|Payload (if any)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Random values are generated using a Mersenne Twister whose seed is based off the NFC adapter system tick counter. It is therefore random, and the 3DS won&#039;t attempt to validate them by any means. Its purpose is unknown.&lt;br /&gt;
* NFC adapter will ignore packets whose protocol version is not 1. It will not even reply.&lt;br /&gt;
* Connection identifier is a random byte the 3DS assigns to identify the connection should be several connections in range at once. Slave devices must save this value from the initial handshake packet and use it for replies. It must also ignore packets whose connection ID does not match.&lt;br /&gt;
&lt;br /&gt;
=== Operation codes ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+IR framing format - long frame&lt;br /&gt;
|-&lt;br /&gt;
! Code&lt;br /&gt;
! Name&lt;br /&gt;
! Direction&lt;br /&gt;
|-&lt;br /&gt;
! 0x0&lt;br /&gt;
| Layer 3 command?&lt;br /&gt;
| 3DS to NFC&lt;br /&gt;
|-&lt;br /&gt;
! 0x1&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x2&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x3&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x4&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x5&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x6&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x7&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x8&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x9&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0xA&lt;br /&gt;
| Disconnect request&lt;br /&gt;
| 3DS to NFC&lt;br /&gt;
|-&lt;br /&gt;
! 0xB&lt;br /&gt;
| Disconnection acknowledgment&lt;br /&gt;
| NFC to 3DS&lt;br /&gt;
|-&lt;br /&gt;
! 0xC&lt;br /&gt;
| Handshake&lt;br /&gt;
| 3DS to NFC&lt;br /&gt;
|-&lt;br /&gt;
! 0xD&lt;br /&gt;
| Handshake acknowledgement&lt;br /&gt;
| NFC to 3DS&lt;br /&gt;
|-&lt;br /&gt;
! 0xE&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0xF&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Samples ==&lt;br /&gt;
&lt;br /&gt;
NFC handshake beacons:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Raw&lt;br /&gt;
! Deobfuscated&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 73 FE A5 C4 A4 2C A4 20 F5&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9A 9D D6 3A 01 E8 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 D1 3E B7 7B B6 91 B6 9D 87&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;38 5D 66 45 01 EA 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 09 58 23 36 22 DA 22 D6 AE&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;E0 3B 2A 6E 01 EC 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 5E DD A4 A0 A5 4E A5 42 A8&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;B7 BE FA 7D 01 EE 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 BC 19 C6 37 C7 C7 C7 CB 8B&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;55 7A 7A 2E 01 F0 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C9 15 F6 63 F7 91 F7 9D B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;20 76 3F 76 01 F2 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 6E 48 47 1A 46 EE 46 E2 C7&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;87 2B 29 52 01 F4 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A2 8C E5 C3 E4 35 E4 39 74&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4B EF 47 4F 01 F6 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 26 1C 07 10 06 E8 06 E4 64&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;CF 7F 21 0C 01 F8 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 7E 73 A2 3F A3 C5 A3 C9 FD&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;97 10 DC 4C 01 FA 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 75 00 F3 B8 F2 44 F2 48 63&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9C 63 86 B8 01 FC 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 8D AC 0F D5 0E 2B 0E 27 72&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;64 CF 82 79 01 FE 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A3 55 7C 53 7D 52 7D 5E B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4A 36 DF 06 01 01 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 15 06 43 C0 42 C3 42 CF 85&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FC 65 56 C6 01 03 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 66 E0 9A 17 9B 12 9B 1E A0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;8F 83 FC F7 01 05 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A4 35 09 97 08 90 08 9C 25&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4D 56 AD A2 01 07 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 73 E2 BD AF BC A6 BC AA 60&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9A 81 CE 4D 01 09 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 02 57 D7 B0 D6 BB D6 B7 28&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;EB 34 D5 E7 01 0B 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 0D 79 01 AA 00 A7 00 AB 22&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;E4 1A 0C D3 01 0D 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 14 91 04 B9 05 B6 05 BA B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FD F2 10 28 01 0F 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 2C 86 B1 49 B0 58 B0 54 C0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;C5 E5 9D CF 01 11 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 D5 1D DE DB DF C8 DF C4 F9&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;3C 7E 0B C6 01 13 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 AF 75 DE 5C DF 49 DF 45 9C&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;46 16 71 29 01 15 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C8 E2 5B C6 5A D1 5A DD B5&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;21 81 93 24 01 17 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 9B 51 68 2D 69 34 69 38 41&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;72 32 F3 7C 01 19 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 13 7B 9F EF 9E F4 9E F8 32&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FA 18 8C 94 01 1B 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A7 62 02 9C 03 81 03 8D BD&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4E 01 A5 FE 01 1D 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 39 06 94 36 95 29 95 25 09&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;D0 65 AD 30 01 1F 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 32 4C D7 C0 D6 E1 D6 ED 92&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;DB 2F E5 8C 01 21 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 83 BE F2 8F F3 AC F3 A0 B1&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;6A DD 71 31 01 23 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 83 5E A0 57 A1 72 A1 7E F0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;6A 3D 23 09 01 25 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 6E C8 AD 69 AC 4E AC 42 D1&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;87 AB C3 A1 01 27 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C7 33 A1 2C A0 05 A0 09 FC&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;2E 50 66 1F 01 29 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
* [https://www.broadcom.com/products/NFC/NFC-Solutions/BCM2079x-Family BCM2079x brief on Broadcom&#039;s website]&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12478</id>
		<title>NFC adapter</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12478"/>
		<updated>2015-04-20T12:17:21Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: /* Operation codes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo NFC adapter is an upcoming external device which adds NFC capabilities for [[amiibo]]s to old Nintendo 3DS and Nintendo 2DS consoles, using the infrared port on the back of the console.&lt;br /&gt;
&lt;br /&gt;
[[File:150217nfcreader-640x360.jpg|thumb|right|250px|Media preview, as released by Nintendo]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Technical details =&lt;br /&gt;
Based on analysis of the [[fangate_updater.bin]] file, which is part of the old Nintendo 3DS operating system since [[9.3.0-21]] and contains the firmware running on the external adapter; and analysis of the [[NFC Services]] running on old 3DS.&lt;br /&gt;
&lt;br /&gt;
* SOC inside the adapter: Broadcom BCM20791B1&lt;br /&gt;
* CPU: ARM Cortex M0&lt;br /&gt;
* Communications: infrared, with [[ir:USER]] running on the console. Uses obfuscated payloads. Baud rate is 115200 bps.&lt;br /&gt;
&lt;br /&gt;
Memory map:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x08008000&lt;br /&gt;
| 256KB?&lt;br /&gt;
| Firmware ([[fangate_updater.bin]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 128KB?&lt;br /&gt;
| RAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x40023C00&lt;br /&gt;
| 0x1C&lt;br /&gt;
| FLASH ROM control&lt;br /&gt;
|-&lt;br /&gt;
| 0xE000ED00&lt;br /&gt;
| 0x104&lt;br /&gt;
| [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0439b/BABCIIIA.html ARM Cortex system control block]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= IR communications =&lt;br /&gt;
Packets are sent using IrDA-SIR (using [[ir:USER]]), with a 8N1 encoding (eight data bits, one stop bit, without parity). Each one is formed by a 2-byte header, a varint with the payload size, an obfuscated payload, and trailing error detection byte.&lt;br /&gt;
&lt;br /&gt;
== Layer 1 - framing format ==&lt;br /&gt;
Frames are encoded using two different yet very simmilar formats, depending on how large the payload to be transmitted is:&lt;br /&gt;
* For payloads with less than 64 bytes, the third byte represents the payload size.&lt;br /&gt;
* For packets with up to 16383 bytes, the size is split in two bytes, with the third byte being the upper 6 bits of the payload size, OR&#039;d with 0x40, and the fourth being the lower eight bits of the payload size&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0 auto; text-align: center;&amp;quot;&lt;br /&gt;
|+IR framing format - short frame&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-top: none&amp;quot; | Byte&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 7&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 6&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 5&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 4&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 3&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 2&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 1&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 0&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Synchronization byte (&amp;lt;code&amp;gt;0xA5&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Reserved for future use (&amp;lt;code&amp;gt;0x00&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| RFU (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
| Short frame (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot;|Payload size&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte 0&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot;|...&lt;br /&gt;
|-&lt;br /&gt;
! 0x03+n-1&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte n-1&lt;br /&gt;
|-&lt;br /&gt;
! 0x03+n&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|[[CRC-8-CCITT]] computer over whole packet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0 auto; text-align: center;&amp;quot;&lt;br /&gt;
|+IR framing format - long frame&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-top: none&amp;quot; | Byte&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 7&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 6&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 5&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 4&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 3&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 2&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 1&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 0&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Synchronization byte: &amp;lt;code&amp;gt;0xA5&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Reserved for future use&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| RFU (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
| Long frame (&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;)&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot;|Payload size (upper 6 bits)&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload size (lower 8 bits)&lt;br /&gt;
|-&lt;br /&gt;
! 0x04&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte 0&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot;|...&lt;br /&gt;
|-&lt;br /&gt;
! 0x04+n-1&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte n-1&lt;br /&gt;
|-&lt;br /&gt;
! 0x04+n&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|[[CRC-8-CCITT]] computer over whole packet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
The packet header is fixed and consists in a synchronization byte (0xA5), followed by a unused (possibly RFU) zero byte. After these two hardcoded bytes, there&#039;s a varint representing the payload size, which may use one byte or two, depending on the how big the payload is.&lt;br /&gt;
&lt;br /&gt;
In C:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;uint8_t * setPacketHeader(uint8_t * buffer, size_t payloadSize) {&lt;br /&gt;
	assert(payloadSize &amp;lt; 16384);&lt;br /&gt;
&lt;br /&gt;
	buffer[0] = 0xA5;&lt;br /&gt;
	buffer[1] = 0x00;&lt;br /&gt;
&lt;br /&gt;
	if (payloadSize &amp;lt; 64) {&lt;br /&gt;
		buffer[2] = payloadSize;&lt;br /&gt;
		buffer += 3;&lt;br /&gt;
	} else {&lt;br /&gt;
		buffer[2] = 0x40 | (payloadSize &amp;gt;&amp;gt; 8);&lt;br /&gt;
		buffer[3] = payloadSize;&lt;br /&gt;
		buffer += 4;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return buffer;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Payload ===&lt;br /&gt;
The payload is obfuscated using a XOR-based encryption. In C:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;void payloadObfuscate(const void * voidplain, void * voidcipher, size_t size) {&lt;br /&gt;
	uint16_t * plain = (uint16_t *) voidplain;&lt;br /&gt;
	uint16_t * cipher = (uint16_t *) voidcipher;&lt;br /&gt;
	size_t halfCount = size / sizeof(uint16_t);&lt;br /&gt;
&lt;br /&gt;
	uint16_t xorval = htobe16(0xE963);&lt;br /&gt;
	size_t i;&lt;br /&gt;
&lt;br /&gt;
	for (i = 0; i &amp;lt; halfCount; i++) {&lt;br /&gt;
		xorval ^= plain[i];&lt;br /&gt;
		cipher[i] = xorval;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void payloadDeobfuscate(const void * voidcipher, void * voidplain, size_t size) {&lt;br /&gt;
	uint16_t * cipher = (uint16_t *) voidcipher;&lt;br /&gt;
	uint16_t * plain = (uint16_t *) voidplain;&lt;br /&gt;
	size_t halfCount = size / sizeof(uint16_t);&lt;br /&gt;
&lt;br /&gt;
	if (halfCount) {&lt;br /&gt;
		size_t i;&lt;br /&gt;
		for (i = halfCount - 1; i &amp;gt; 0; i--) {&lt;br /&gt;
			plain[i] = cipher[i] ^ cipher[i - 1];&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		plain[0] = cipher[0] ^ htobe16(0xE963);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Error detection ===&lt;br /&gt;
The trailing error detection byte is calculated using [[CRC-8-CCITT]] &amp;lt;b&amp;gt;over the whole packet&amp;lt;/b&amp;gt; (both the header and the payload)&lt;br /&gt;
&lt;br /&gt;
== Layer 2 - &amp;quot;ircom&amp;quot; ==&lt;br /&gt;
ircom is a simple stateful point-to-point master-slave communication protocol built on top of IR layer 1.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0 auto; text-align: center;&amp;quot;&lt;br /&gt;
! style=&amp;quot;border-top: none&amp;quot; | Byte&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 7&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 6&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 5&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 4&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 3&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 2&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 1&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 0&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x04&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|RFU?&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|Protocol version: &amp;lt;code&amp;gt;0x1&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x05&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Connection identifier&lt;br /&gt;
|-&lt;br /&gt;
! 0x06&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Reserved for future use?&lt;br /&gt;
|-&lt;br /&gt;
! 0x07&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|???&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|Operation code&lt;br /&gt;
|-&lt;br /&gt;
! 0x08+&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot; style=&amp;quot;background:#ffd0d0;&amp;quot;|Payload (if any)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Random values are generated using a Mersenne Twister whose seed is based off the NFC adapter system tick counter. It is therefore random, and the 3DS won&#039;t attempt to validate them by any means. Its purpose is unknown.&lt;br /&gt;
* NFC adapter will ignore packets whose protocol version is not 1. It will not even reply.&lt;br /&gt;
* Connection identifier is a random byte the 3DS assigns to identify the connection should be several connections in range at once. Slave devices must save this value from the initial handshake packet and use it for replies. It must also ignore packets whose connection ID does not match.&lt;br /&gt;
&lt;br /&gt;
=== Operation codes ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+IR framing format - long frame&lt;br /&gt;
|-&lt;br /&gt;
! Code&lt;br /&gt;
! Name&lt;br /&gt;
! Direction&lt;br /&gt;
|-&lt;br /&gt;
! 0x0&lt;br /&gt;
| Layer 3 command?&lt;br /&gt;
| 3DS to NFC&lt;br /&gt;
|-&lt;br /&gt;
! 0x1&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x2&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x3&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x4&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x5&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x6&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x7&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x8&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x9&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0xA&lt;br /&gt;
| Disconnect request&lt;br /&gt;
| 3DS to NFC&lt;br /&gt;
|-&lt;br /&gt;
! 0xB&lt;br /&gt;
| Disconnection acknowledgment&lt;br /&gt;
| NFC to 3DS&lt;br /&gt;
|-&lt;br /&gt;
! 0xC&lt;br /&gt;
| Handshake&lt;br /&gt;
| 3DS to NFC&lt;br /&gt;
|-&lt;br /&gt;
! 0xD&lt;br /&gt;
| Handshake acknowledgement&lt;br /&gt;
| NFC to 3DS&lt;br /&gt;
|-&lt;br /&gt;
! 0xE&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0xF&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Samples ==&lt;br /&gt;
&lt;br /&gt;
NFC adapter update beacon, as sent by the console:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Raw&lt;br /&gt;
! Deobfuscated&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 73 FE A5 C4 A4 2C A4 20 F5&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9A 9D D6 3A 01 E8 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 D1 3E B7 7B B6 91 B6 9D 87&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;38 5D 66 45 01 EA 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 09 58 23 36 22 DA 22 D6 AE&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;E0 3B 2A 6E 01 EC 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 5E DD A4 A0 A5 4E A5 42 A8&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;B7 BE FA 7D 01 EE 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 BC 19 C6 37 C7 C7 C7 CB 8B&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;55 7A 7A 2E 01 F0 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C9 15 F6 63 F7 91 F7 9D B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;20 76 3F 76 01 F2 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 6E 48 47 1A 46 EE 46 E2 C7&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;87 2B 29 52 01 F4 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A2 8C E5 C3 E4 35 E4 39 74&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4B EF 47 4F 01 F6 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 26 1C 07 10 06 E8 06 E4 64&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;CF 7F 21 0C 01 F8 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 7E 73 A2 3F A3 C5 A3 C9 FD&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;97 10 DC 4C 01 FA 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 75 00 F3 B8 F2 44 F2 48 63&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9C 63 86 B8 01 FC 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 8D AC 0F D5 0E 2B 0E 27 72&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;64 CF 82 79 01 FE 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A3 55 7C 53 7D 52 7D 5E B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4A 36 DF 06 01 01 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 15 06 43 C0 42 C3 42 CF 85&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FC 65 56 C6 01 03 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 66 E0 9A 17 9B 12 9B 1E A0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;8F 83 FC F7 01 05 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A4 35 09 97 08 90 08 9C 25&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4D 56 AD A2 01 07 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 73 E2 BD AF BC A6 BC AA 60&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9A 81 CE 4D 01 09 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 02 57 D7 B0 D6 BB D6 B7 28&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;EB 34 D5 E7 01 0B 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 0D 79 01 AA 00 A7 00 AB 22&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;E4 1A 0C D3 01 0D 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 14 91 04 B9 05 B6 05 BA B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FD F2 10 28 01 0F 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 2C 86 B1 49 B0 58 B0 54 C0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;C5 E5 9D CF 01 11 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 D5 1D DE DB DF C8 DF C4 F9&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;3C 7E 0B C6 01 13 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 AF 75 DE 5C DF 49 DF 45 9C&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;46 16 71 29 01 15 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C8 E2 5B C6 5A D1 5A DD B5&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;21 81 93 24 01 17 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 9B 51 68 2D 69 34 69 38 41&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;72 32 F3 7C 01 19 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 13 7B 9F EF 9E F4 9E F8 32&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FA 18 8C 94 01 1B 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A7 62 02 9C 03 81 03 8D BD&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4E 01 A5 FE 01 1D 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 39 06 94 36 95 29 95 25 09&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;D0 65 AD 30 01 1F 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 32 4C D7 C0 D6 E1 D6 ED 92&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;DB 2F E5 8C 01 21 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 83 BE F2 8F F3 AC F3 A0 B1&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;6A DD 71 31 01 23 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 83 5E A0 57 A1 72 A1 7E F0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;6A 3D 23 09 01 25 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 6E C8 AD 69 AC 4E AC 42 D1&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;87 AB C3 A1 01 27 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C7 33 A1 2C A0 05 A0 09 FC&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;2E 50 66 1F 01 29 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
* [https://www.broadcom.com/products/NFC/NFC-Solutions/BCM2079x-Family BCM2079x brief on Broadcom&#039;s website]&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12477</id>
		<title>NFC adapter</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12477"/>
		<updated>2015-04-20T12:16:54Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: /* Layer 2 - &amp;quot;ircom&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo NFC adapter is an upcoming external device which adds NFC capabilities for [[amiibo]]s to old Nintendo 3DS and Nintendo 2DS consoles, using the infrared port on the back of the console.&lt;br /&gt;
&lt;br /&gt;
[[File:150217nfcreader-640x360.jpg|thumb|right|250px|Media preview, as released by Nintendo]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Technical details =&lt;br /&gt;
Based on analysis of the [[fangate_updater.bin]] file, which is part of the old Nintendo 3DS operating system since [[9.3.0-21]] and contains the firmware running on the external adapter; and analysis of the [[NFC Services]] running on old 3DS.&lt;br /&gt;
&lt;br /&gt;
* SOC inside the adapter: Broadcom BCM20791B1&lt;br /&gt;
* CPU: ARM Cortex M0&lt;br /&gt;
* Communications: infrared, with [[ir:USER]] running on the console. Uses obfuscated payloads. Baud rate is 115200 bps.&lt;br /&gt;
&lt;br /&gt;
Memory map:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x08008000&lt;br /&gt;
| 256KB?&lt;br /&gt;
| Firmware ([[fangate_updater.bin]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 128KB?&lt;br /&gt;
| RAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x40023C00&lt;br /&gt;
| 0x1C&lt;br /&gt;
| FLASH ROM control&lt;br /&gt;
|-&lt;br /&gt;
| 0xE000ED00&lt;br /&gt;
| 0x104&lt;br /&gt;
| [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0439b/BABCIIIA.html ARM Cortex system control block]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= IR communications =&lt;br /&gt;
Packets are sent using IrDA-SIR (using [[ir:USER]]), with a 8N1 encoding (eight data bits, one stop bit, without parity). Each one is formed by a 2-byte header, a varint with the payload size, an obfuscated payload, and trailing error detection byte.&lt;br /&gt;
&lt;br /&gt;
== Layer 1 - framing format ==&lt;br /&gt;
Frames are encoded using two different yet very simmilar formats, depending on how large the payload to be transmitted is:&lt;br /&gt;
* For payloads with less than 64 bytes, the third byte represents the payload size.&lt;br /&gt;
* For packets with up to 16383 bytes, the size is split in two bytes, with the third byte being the upper 6 bits of the payload size, OR&#039;d with 0x40, and the fourth being the lower eight bits of the payload size&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0 auto; text-align: center;&amp;quot;&lt;br /&gt;
|+IR framing format - short frame&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-top: none&amp;quot; | Byte&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 7&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 6&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 5&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 4&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 3&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 2&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 1&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 0&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Synchronization byte (&amp;lt;code&amp;gt;0xA5&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Reserved for future use (&amp;lt;code&amp;gt;0x00&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| RFU (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
| Short frame (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot;|Payload size&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte 0&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot;|...&lt;br /&gt;
|-&lt;br /&gt;
! 0x03+n-1&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte n-1&lt;br /&gt;
|-&lt;br /&gt;
! 0x03+n&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|[[CRC-8-CCITT]] computer over whole packet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0 auto; text-align: center;&amp;quot;&lt;br /&gt;
|+IR framing format - long frame&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-top: none&amp;quot; | Byte&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 7&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 6&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 5&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 4&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 3&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 2&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 1&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 0&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Synchronization byte: &amp;lt;code&amp;gt;0xA5&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Reserved for future use&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| RFU (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
| Long frame (&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;)&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot;|Payload size (upper 6 bits)&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload size (lower 8 bits)&lt;br /&gt;
|-&lt;br /&gt;
! 0x04&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte 0&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot;|...&lt;br /&gt;
|-&lt;br /&gt;
! 0x04+n-1&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte n-1&lt;br /&gt;
|-&lt;br /&gt;
! 0x04+n&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|[[CRC-8-CCITT]] computer over whole packet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
The packet header is fixed and consists in a synchronization byte (0xA5), followed by a unused (possibly RFU) zero byte. After these two hardcoded bytes, there&#039;s a varint representing the payload size, which may use one byte or two, depending on the how big the payload is.&lt;br /&gt;
&lt;br /&gt;
In C:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;uint8_t * setPacketHeader(uint8_t * buffer, size_t payloadSize) {&lt;br /&gt;
	assert(payloadSize &amp;lt; 16384);&lt;br /&gt;
&lt;br /&gt;
	buffer[0] = 0xA5;&lt;br /&gt;
	buffer[1] = 0x00;&lt;br /&gt;
&lt;br /&gt;
	if (payloadSize &amp;lt; 64) {&lt;br /&gt;
		buffer[2] = payloadSize;&lt;br /&gt;
		buffer += 3;&lt;br /&gt;
	} else {&lt;br /&gt;
		buffer[2] = 0x40 | (payloadSize &amp;gt;&amp;gt; 8);&lt;br /&gt;
		buffer[3] = payloadSize;&lt;br /&gt;
		buffer += 4;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return buffer;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Payload ===&lt;br /&gt;
The payload is obfuscated using a XOR-based encryption. In C:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;void payloadObfuscate(const void * voidplain, void * voidcipher, size_t size) {&lt;br /&gt;
	uint16_t * plain = (uint16_t *) voidplain;&lt;br /&gt;
	uint16_t * cipher = (uint16_t *) voidcipher;&lt;br /&gt;
	size_t halfCount = size / sizeof(uint16_t);&lt;br /&gt;
&lt;br /&gt;
	uint16_t xorval = htobe16(0xE963);&lt;br /&gt;
	size_t i;&lt;br /&gt;
&lt;br /&gt;
	for (i = 0; i &amp;lt; halfCount; i++) {&lt;br /&gt;
		xorval ^= plain[i];&lt;br /&gt;
		cipher[i] = xorval;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void payloadDeobfuscate(const void * voidcipher, void * voidplain, size_t size) {&lt;br /&gt;
	uint16_t * cipher = (uint16_t *) voidcipher;&lt;br /&gt;
	uint16_t * plain = (uint16_t *) voidplain;&lt;br /&gt;
	size_t halfCount = size / sizeof(uint16_t);&lt;br /&gt;
&lt;br /&gt;
	if (halfCount) {&lt;br /&gt;
		size_t i;&lt;br /&gt;
		for (i = halfCount - 1; i &amp;gt; 0; i--) {&lt;br /&gt;
			plain[i] = cipher[i] ^ cipher[i - 1];&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		plain[0] = cipher[0] ^ htobe16(0xE963);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Error detection ===&lt;br /&gt;
The trailing error detection byte is calculated using [[CRC-8-CCITT]] &amp;lt;b&amp;gt;over the whole packet&amp;lt;/b&amp;gt; (both the header and the payload)&lt;br /&gt;
&lt;br /&gt;
== Layer 2 - &amp;quot;ircom&amp;quot; ==&lt;br /&gt;
ircom is a simple stateful point-to-point master-slave communication protocol built on top of IR layer 1.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0 auto; text-align: center;&amp;quot;&lt;br /&gt;
! style=&amp;quot;border-top: none&amp;quot; | Byte&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 7&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 6&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 5&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 4&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 3&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 2&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 1&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 0&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x04&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|RFU?&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|Protocol version: &amp;lt;code&amp;gt;0x1&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x05&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Connection identifier&lt;br /&gt;
|-&lt;br /&gt;
! 0x06&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Reserved for future use?&lt;br /&gt;
|-&lt;br /&gt;
! 0x07&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|???&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|Operation code&lt;br /&gt;
|-&lt;br /&gt;
! 0x08+&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot; style=&amp;quot;background:#ffd0d0;&amp;quot;|Payload (if any)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Random values are generated using a Mersenne Twister whose seed is based off the NFC adapter system tick counter. It is therefore random, and the 3DS won&#039;t attempt to validate them by any means. Its purpose is unknown.&lt;br /&gt;
* NFC adapter will ignore packets whose protocol version is not 1. It will not even reply.&lt;br /&gt;
* Connection identifier is a random byte the 3DS assigns to identify the connection should be several connections in range at once. Slave devices must save this value from the initial handshake packet and use it for replies. It must also ignore packets whose connection ID does not match.&lt;br /&gt;
&lt;br /&gt;
=== Operation codes ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0 auto; text-align: center;&amp;quot;&lt;br /&gt;
|+IR framing format - long frame&lt;br /&gt;
|-&lt;br /&gt;
! Code&lt;br /&gt;
! Name&lt;br /&gt;
! Direction&lt;br /&gt;
|-&lt;br /&gt;
! 0x0&lt;br /&gt;
| Layer 3 command?&lt;br /&gt;
| 3DS to NFC&lt;br /&gt;
|-&lt;br /&gt;
! 0x1&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x2&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x3&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x4&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x5&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x6&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x7&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x8&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0x9&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0xA&lt;br /&gt;
| Disconnect request&lt;br /&gt;
| 3DS to NFC&lt;br /&gt;
|-&lt;br /&gt;
! 0xB&lt;br /&gt;
| Disconnection acknowledgment&lt;br /&gt;
| NFC to 3DS&lt;br /&gt;
|-&lt;br /&gt;
! 0xC&lt;br /&gt;
| Handshake&lt;br /&gt;
| 3DS to NFC&lt;br /&gt;
|-&lt;br /&gt;
! 0xD&lt;br /&gt;
| Handshake acknowledgement&lt;br /&gt;
| NFC to 3DS&lt;br /&gt;
|-&lt;br /&gt;
! 0xE&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|-&lt;br /&gt;
! 0xF&lt;br /&gt;
| ???&lt;br /&gt;
| ???&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Samples ==&lt;br /&gt;
&lt;br /&gt;
NFC adapter update beacon, as sent by the console:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Raw&lt;br /&gt;
! Deobfuscated&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 73 FE A5 C4 A4 2C A4 20 F5&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9A 9D D6 3A 01 E8 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 D1 3E B7 7B B6 91 B6 9D 87&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;38 5D 66 45 01 EA 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 09 58 23 36 22 DA 22 D6 AE&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;E0 3B 2A 6E 01 EC 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 5E DD A4 A0 A5 4E A5 42 A8&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;B7 BE FA 7D 01 EE 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 BC 19 C6 37 C7 C7 C7 CB 8B&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;55 7A 7A 2E 01 F0 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C9 15 F6 63 F7 91 F7 9D B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;20 76 3F 76 01 F2 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 6E 48 47 1A 46 EE 46 E2 C7&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;87 2B 29 52 01 F4 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A2 8C E5 C3 E4 35 E4 39 74&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4B EF 47 4F 01 F6 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 26 1C 07 10 06 E8 06 E4 64&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;CF 7F 21 0C 01 F8 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 7E 73 A2 3F A3 C5 A3 C9 FD&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;97 10 DC 4C 01 FA 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 75 00 F3 B8 F2 44 F2 48 63&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9C 63 86 B8 01 FC 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 8D AC 0F D5 0E 2B 0E 27 72&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;64 CF 82 79 01 FE 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A3 55 7C 53 7D 52 7D 5E B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4A 36 DF 06 01 01 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 15 06 43 C0 42 C3 42 CF 85&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FC 65 56 C6 01 03 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 66 E0 9A 17 9B 12 9B 1E A0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;8F 83 FC F7 01 05 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A4 35 09 97 08 90 08 9C 25&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4D 56 AD A2 01 07 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 73 E2 BD AF BC A6 BC AA 60&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9A 81 CE 4D 01 09 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 02 57 D7 B0 D6 BB D6 B7 28&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;EB 34 D5 E7 01 0B 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 0D 79 01 AA 00 A7 00 AB 22&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;E4 1A 0C D3 01 0D 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 14 91 04 B9 05 B6 05 BA B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FD F2 10 28 01 0F 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 2C 86 B1 49 B0 58 B0 54 C0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;C5 E5 9D CF 01 11 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 D5 1D DE DB DF C8 DF C4 F9&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;3C 7E 0B C6 01 13 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 AF 75 DE 5C DF 49 DF 45 9C&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;46 16 71 29 01 15 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C8 E2 5B C6 5A D1 5A DD B5&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;21 81 93 24 01 17 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 9B 51 68 2D 69 34 69 38 41&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;72 32 F3 7C 01 19 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 13 7B 9F EF 9E F4 9E F8 32&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FA 18 8C 94 01 1B 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A7 62 02 9C 03 81 03 8D BD&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4E 01 A5 FE 01 1D 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 39 06 94 36 95 29 95 25 09&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;D0 65 AD 30 01 1F 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 32 4C D7 C0 D6 E1 D6 ED 92&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;DB 2F E5 8C 01 21 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 83 BE F2 8F F3 AC F3 A0 B1&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;6A DD 71 31 01 23 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 83 5E A0 57 A1 72 A1 7E F0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;6A 3D 23 09 01 25 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 6E C8 AD 69 AC 4E AC 42 D1&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;87 AB C3 A1 01 27 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C7 33 A1 2C A0 05 A0 09 FC&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;2E 50 66 1F 01 29 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
* [https://www.broadcom.com/products/NFC/NFC-Solutions/BCM2079x-Family BCM2079x brief on Broadcom&#039;s website]&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12476</id>
		<title>NFC adapter</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12476"/>
		<updated>2015-04-20T12:11:24Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: /* Layer 2 - &amp;quot;ircom&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo NFC adapter is an upcoming external device which adds NFC capabilities for [[amiibo]]s to old Nintendo 3DS and Nintendo 2DS consoles, using the infrared port on the back of the console.&lt;br /&gt;
&lt;br /&gt;
[[File:150217nfcreader-640x360.jpg|thumb|right|250px|Media preview, as released by Nintendo]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Technical details =&lt;br /&gt;
Based on analysis of the [[fangate_updater.bin]] file, which is part of the old Nintendo 3DS operating system since [[9.3.0-21]] and contains the firmware running on the external adapter; and analysis of the [[NFC Services]] running on old 3DS.&lt;br /&gt;
&lt;br /&gt;
* SOC inside the adapter: Broadcom BCM20791B1&lt;br /&gt;
* CPU: ARM Cortex M0&lt;br /&gt;
* Communications: infrared, with [[ir:USER]] running on the console. Uses obfuscated payloads. Baud rate is 115200 bps.&lt;br /&gt;
&lt;br /&gt;
Memory map:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x08008000&lt;br /&gt;
| 256KB?&lt;br /&gt;
| Firmware ([[fangate_updater.bin]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 128KB?&lt;br /&gt;
| RAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x40023C00&lt;br /&gt;
| 0x1C&lt;br /&gt;
| FLASH ROM control&lt;br /&gt;
|-&lt;br /&gt;
| 0xE000ED00&lt;br /&gt;
| 0x104&lt;br /&gt;
| [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0439b/BABCIIIA.html ARM Cortex system control block]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= IR communications =&lt;br /&gt;
Packets are sent using IrDA-SIR (using [[ir:USER]]), with a 8N1 encoding (eight data bits, one stop bit, without parity). Each one is formed by a 2-byte header, a varint with the payload size, an obfuscated payload, and trailing error detection byte.&lt;br /&gt;
&lt;br /&gt;
== Layer 1 - framing format ==&lt;br /&gt;
Frames are encoded using two different yet very simmilar formats, depending on how large the payload to be transmitted is:&lt;br /&gt;
* For payloads with less than 64 bytes, the third byte represents the payload size.&lt;br /&gt;
* For packets with up to 16383 bytes, the size is split in two bytes, with the third byte being the upper 6 bits of the payload size, OR&#039;d with 0x40, and the fourth being the lower eight bits of the payload size&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0 auto; text-align: center;&amp;quot;&lt;br /&gt;
|+IR framing format - short frame&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-top: none&amp;quot; | Byte&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 7&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 6&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 5&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 4&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 3&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 2&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 1&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 0&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Synchronization byte (&amp;lt;code&amp;gt;0xA5&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Reserved for future use (&amp;lt;code&amp;gt;0x00&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| RFU (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
| Short frame (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot;|Payload size&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte 0&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot;|...&lt;br /&gt;
|-&lt;br /&gt;
! 0x03+n-1&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte n-1&lt;br /&gt;
|-&lt;br /&gt;
! 0x03+n&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|[[CRC-8-CCITT]] computer over whole packet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0 auto; text-align: center;&amp;quot;&lt;br /&gt;
|+IR framing format - long frame&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-top: none&amp;quot; | Byte&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 7&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 6&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 5&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 4&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 3&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 2&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 1&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 0&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Synchronization byte: &amp;lt;code&amp;gt;0xA5&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Reserved for future use&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| RFU (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
| Long frame (&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;)&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot;|Payload size (upper 6 bits)&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload size (lower 8 bits)&lt;br /&gt;
|-&lt;br /&gt;
! 0x04&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte 0&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot;|...&lt;br /&gt;
|-&lt;br /&gt;
! 0x04+n-1&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte n-1&lt;br /&gt;
|-&lt;br /&gt;
! 0x04+n&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|[[CRC-8-CCITT]] computer over whole packet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
The packet header is fixed and consists in a synchronization byte (0xA5), followed by a unused (possibly RFU) zero byte. After these two hardcoded bytes, there&#039;s a varint representing the payload size, which may use one byte or two, depending on the how big the payload is.&lt;br /&gt;
&lt;br /&gt;
In C:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;uint8_t * setPacketHeader(uint8_t * buffer, size_t payloadSize) {&lt;br /&gt;
	assert(payloadSize &amp;lt; 16384);&lt;br /&gt;
&lt;br /&gt;
	buffer[0] = 0xA5;&lt;br /&gt;
	buffer[1] = 0x00;&lt;br /&gt;
&lt;br /&gt;
	if (payloadSize &amp;lt; 64) {&lt;br /&gt;
		buffer[2] = payloadSize;&lt;br /&gt;
		buffer += 3;&lt;br /&gt;
	} else {&lt;br /&gt;
		buffer[2] = 0x40 | (payloadSize &amp;gt;&amp;gt; 8);&lt;br /&gt;
		buffer[3] = payloadSize;&lt;br /&gt;
		buffer += 4;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return buffer;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Payload ===&lt;br /&gt;
The payload is obfuscated using a XOR-based encryption. In C:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;void payloadObfuscate(const void * voidplain, void * voidcipher, size_t size) {&lt;br /&gt;
	uint16_t * plain = (uint16_t *) voidplain;&lt;br /&gt;
	uint16_t * cipher = (uint16_t *) voidcipher;&lt;br /&gt;
	size_t halfCount = size / sizeof(uint16_t);&lt;br /&gt;
&lt;br /&gt;
	uint16_t xorval = htobe16(0xE963);&lt;br /&gt;
	size_t i;&lt;br /&gt;
&lt;br /&gt;
	for (i = 0; i &amp;lt; halfCount; i++) {&lt;br /&gt;
		xorval ^= plain[i];&lt;br /&gt;
		cipher[i] = xorval;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void payloadDeobfuscate(const void * voidcipher, void * voidplain, size_t size) {&lt;br /&gt;
	uint16_t * cipher = (uint16_t *) voidcipher;&lt;br /&gt;
	uint16_t * plain = (uint16_t *) voidplain;&lt;br /&gt;
	size_t halfCount = size / sizeof(uint16_t);&lt;br /&gt;
&lt;br /&gt;
	if (halfCount) {&lt;br /&gt;
		size_t i;&lt;br /&gt;
		for (i = halfCount - 1; i &amp;gt; 0; i--) {&lt;br /&gt;
			plain[i] = cipher[i] ^ cipher[i - 1];&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		plain[0] = cipher[0] ^ htobe16(0xE963);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Error detection ===&lt;br /&gt;
The trailing error detection byte is calculated using [[CRC-8-CCITT]] &amp;lt;b&amp;gt;over the whole packet&amp;lt;/b&amp;gt; (both the header and the payload)&lt;br /&gt;
&lt;br /&gt;
== Layer 2 - &amp;quot;ircom&amp;quot; ==&lt;br /&gt;
ircom is a simple stateful point-to-point master-slave communication protocol built on top of IR layer 1.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0 auto; text-align: center;&amp;quot;&lt;br /&gt;
! style=&amp;quot;border-top: none&amp;quot; | Byte&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 7&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 6&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 5&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 4&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 3&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 2&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 1&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 0&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x04&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|RFU?&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|Protocol version: &amp;lt;code&amp;gt;0x1&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x05&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Connection identifier&lt;br /&gt;
|-&lt;br /&gt;
! 0x06&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Reserved for future use?&lt;br /&gt;
|-&lt;br /&gt;
! 0x07&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|???&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|Operation code&lt;br /&gt;
|-&lt;br /&gt;
! 0x08+&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot; style=&amp;quot;background:#ffd0d0;&amp;quot;|Payload (if any)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Random values are generated using a Mersenne Twister whose seed is based off the NFC adapter system tick counter. It is therefore random, and the 3DS won&#039;t attempt to validate them by any means. Its purpose is unknown.&lt;br /&gt;
* NFC adapter will ignore packets whose protocol version is not 1. It will not even reply.&lt;br /&gt;
* Connection identifier is a random byte the 3DS assigns to identify the connection should be several connections in range at once. Slave devices must save this value from the initial handshake packet and use it for replies. It must also ignore packets whose connection ID does not match.&lt;br /&gt;
&lt;br /&gt;
== Samples ==&lt;br /&gt;
&lt;br /&gt;
NFC adapter update beacon, as sent by the console:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Raw&lt;br /&gt;
! Deobfuscated&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 73 FE A5 C4 A4 2C A4 20 F5&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9A 9D D6 3A 01 E8 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 D1 3E B7 7B B6 91 B6 9D 87&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;38 5D 66 45 01 EA 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 09 58 23 36 22 DA 22 D6 AE&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;E0 3B 2A 6E 01 EC 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 5E DD A4 A0 A5 4E A5 42 A8&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;B7 BE FA 7D 01 EE 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 BC 19 C6 37 C7 C7 C7 CB 8B&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;55 7A 7A 2E 01 F0 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C9 15 F6 63 F7 91 F7 9D B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;20 76 3F 76 01 F2 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 6E 48 47 1A 46 EE 46 E2 C7&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;87 2B 29 52 01 F4 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A2 8C E5 C3 E4 35 E4 39 74&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4B EF 47 4F 01 F6 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 26 1C 07 10 06 E8 06 E4 64&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;CF 7F 21 0C 01 F8 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 7E 73 A2 3F A3 C5 A3 C9 FD&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;97 10 DC 4C 01 FA 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 75 00 F3 B8 F2 44 F2 48 63&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9C 63 86 B8 01 FC 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 8D AC 0F D5 0E 2B 0E 27 72&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;64 CF 82 79 01 FE 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A3 55 7C 53 7D 52 7D 5E B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4A 36 DF 06 01 01 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 15 06 43 C0 42 C3 42 CF 85&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FC 65 56 C6 01 03 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 66 E0 9A 17 9B 12 9B 1E A0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;8F 83 FC F7 01 05 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A4 35 09 97 08 90 08 9C 25&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4D 56 AD A2 01 07 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 73 E2 BD AF BC A6 BC AA 60&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9A 81 CE 4D 01 09 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 02 57 D7 B0 D6 BB D6 B7 28&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;EB 34 D5 E7 01 0B 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 0D 79 01 AA 00 A7 00 AB 22&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;E4 1A 0C D3 01 0D 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 14 91 04 B9 05 B6 05 BA B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FD F2 10 28 01 0F 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 2C 86 B1 49 B0 58 B0 54 C0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;C5 E5 9D CF 01 11 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 D5 1D DE DB DF C8 DF C4 F9&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;3C 7E 0B C6 01 13 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 AF 75 DE 5C DF 49 DF 45 9C&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;46 16 71 29 01 15 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C8 E2 5B C6 5A D1 5A DD B5&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;21 81 93 24 01 17 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 9B 51 68 2D 69 34 69 38 41&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;72 32 F3 7C 01 19 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 13 7B 9F EF 9E F4 9E F8 32&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FA 18 8C 94 01 1B 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A7 62 02 9C 03 81 03 8D BD&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4E 01 A5 FE 01 1D 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 39 06 94 36 95 29 95 25 09&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;D0 65 AD 30 01 1F 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 32 4C D7 C0 D6 E1 D6 ED 92&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;DB 2F E5 8C 01 21 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 83 BE F2 8F F3 AC F3 A0 B1&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;6A DD 71 31 01 23 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 83 5E A0 57 A1 72 A1 7E F0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;6A 3D 23 09 01 25 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 6E C8 AD 69 AC 4E AC 42 D1&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;87 AB C3 A1 01 27 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C7 33 A1 2C A0 05 A0 09 FC&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;2E 50 66 1F 01 29 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
* [https://www.broadcom.com/products/NFC/NFC-Solutions/BCM2079x-Family BCM2079x brief on Broadcom&#039;s website]&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12460</id>
		<title>NFC adapter</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12460"/>
		<updated>2015-04-19T18:21:44Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo NFC adapter is an upcoming external device which adds NFC capabilities for [[amiibo]]s to old Nintendo 3DS and Nintendo 2DS consoles, using the infrared port on the back of the console.&lt;br /&gt;
&lt;br /&gt;
[[File:150217nfcreader-640x360.jpg|thumb|right|250px|Media preview, as released by Nintendo]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Technical details =&lt;br /&gt;
Based on analysis of the [[fangate_updater.bin]] file, which is part of the old Nintendo 3DS operating system since [[9.3.0-21]] and contains the firmware running on the external adapter; and analysis of the [[NFC Services]] running on old 3DS.&lt;br /&gt;
&lt;br /&gt;
* SOC inside the adapter: Broadcom BCM20791B1&lt;br /&gt;
* CPU: ARM Cortex M0&lt;br /&gt;
* Communications: infrared, with [[ir:USER]] running on the console. Uses obfuscated payloads. Baud rate is 115200 bps.&lt;br /&gt;
&lt;br /&gt;
Memory map:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x08008000&lt;br /&gt;
| 256KB?&lt;br /&gt;
| Firmware ([[fangate_updater.bin]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 128KB?&lt;br /&gt;
| RAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x40023C00&lt;br /&gt;
| 0x1C&lt;br /&gt;
| FLASH ROM control&lt;br /&gt;
|-&lt;br /&gt;
| 0xE000ED00&lt;br /&gt;
| 0x104&lt;br /&gt;
| [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0439b/BABCIIIA.html ARM Cortex system control block]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= IR communications =&lt;br /&gt;
Packets are sent using IrDA-SIR (using [[ir:USER]]), with a 8N1 encoding (eight data bits, one stop bit, without parity). Each one is formed by a 2-byte header, a varint with the payload size, an obfuscated payload, and trailing error detection byte.&lt;br /&gt;
&lt;br /&gt;
== Layer 1 - framing format ==&lt;br /&gt;
Frames are encoded using two different yet very simmilar formats, depending on how large the payload to be transmitted is:&lt;br /&gt;
* For payloads with less than 64 bytes, the third byte represents the payload size.&lt;br /&gt;
* For packets with up to 16383 bytes, the size is split in two bytes, with the third byte being the upper 6 bits of the payload size, OR&#039;d with 0x40, and the fourth being the lower eight bits of the payload size&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0 auto; text-align: center;&amp;quot;&lt;br /&gt;
|+IR framing format - short frame&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-top: none&amp;quot; | Byte&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 7&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 6&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 5&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 4&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 3&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 2&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 1&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 0&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Synchronization byte (&amp;lt;code&amp;gt;0xA5&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Reserved for future use (&amp;lt;code&amp;gt;0x00&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| RFU (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
| Short frame (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot;|Payload size&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte 0&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot;|...&lt;br /&gt;
|-&lt;br /&gt;
! 0x03+n-1&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte n-1&lt;br /&gt;
|-&lt;br /&gt;
! 0x03+n&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|[[CRC-8-CCITT]] computer over whole packet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0 auto; text-align: center;&amp;quot;&lt;br /&gt;
|+IR framing format - long frame&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-top: none&amp;quot; | Byte&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 7&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 6&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 5&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 4&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 3&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 2&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 1&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 0&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Synchronization byte: &amp;lt;code&amp;gt;0xA5&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Reserved for future use&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| RFU (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
| Long frame (&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;)&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot;|Payload size (upper 6 bits)&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload size (lower 8 bits)&lt;br /&gt;
|-&lt;br /&gt;
! 0x04&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte 0&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot;|...&lt;br /&gt;
|-&lt;br /&gt;
! 0x04+n-1&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte n-1&lt;br /&gt;
|-&lt;br /&gt;
! 0x04+n&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|[[CRC-8-CCITT]] computer over whole packet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
The packet header is fixed and consists in a synchronization byte (0xA5), followed by a unused (possibly RFU) zero byte. After these two hardcoded bytes, there&#039;s a varint representing the payload size, which may use one byte or two, depending on the how big the payload is.&lt;br /&gt;
&lt;br /&gt;
In C:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;uint8_t * setPacketHeader(uint8_t * buffer, size_t payloadSize) {&lt;br /&gt;
	assert(payloadSize &amp;lt; 16384);&lt;br /&gt;
&lt;br /&gt;
	buffer[0] = 0xA5;&lt;br /&gt;
	buffer[1] = 0x00;&lt;br /&gt;
&lt;br /&gt;
	if (payloadSize &amp;lt; 64) {&lt;br /&gt;
		buffer[2] = payloadSize;&lt;br /&gt;
		buffer += 3;&lt;br /&gt;
	} else {&lt;br /&gt;
		buffer[2] = 0x40 | (payloadSize &amp;gt;&amp;gt; 8);&lt;br /&gt;
		buffer[3] = payloadSize;&lt;br /&gt;
		buffer += 4;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return buffer;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Payload ===&lt;br /&gt;
The payload is obfuscated using a XOR-based encryption. In C:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;void payloadObfuscate(const void * voidplain, void * voidcipher, size_t size) {&lt;br /&gt;
	uint16_t * plain = (uint16_t *) voidplain;&lt;br /&gt;
	uint16_t * cipher = (uint16_t *) voidcipher;&lt;br /&gt;
	size_t halfCount = size / sizeof(uint16_t);&lt;br /&gt;
&lt;br /&gt;
	uint16_t xorval = htobe16(0xE963);&lt;br /&gt;
	size_t i;&lt;br /&gt;
&lt;br /&gt;
	for (i = 0; i &amp;lt; halfCount; i++) {&lt;br /&gt;
		xorval ^= plain[i];&lt;br /&gt;
		cipher[i] = xorval;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void payloadDeobfuscate(const void * voidcipher, void * voidplain, size_t size) {&lt;br /&gt;
	uint16_t * cipher = (uint16_t *) voidcipher;&lt;br /&gt;
	uint16_t * plain = (uint16_t *) voidplain;&lt;br /&gt;
	size_t halfCount = size / sizeof(uint16_t);&lt;br /&gt;
&lt;br /&gt;
	if (halfCount) {&lt;br /&gt;
		size_t i;&lt;br /&gt;
		for (i = halfCount - 1; i &amp;gt; 0; i--) {&lt;br /&gt;
			plain[i] = cipher[i] ^ cipher[i - 1];&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		plain[0] = cipher[0] ^ htobe16(0xE963);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Error detection ===&lt;br /&gt;
The trailing error detection byte is calculated using [[CRC-8-CCITT]] &amp;lt;b&amp;gt;over the whole packet&amp;lt;/b&amp;gt; (both the header and the payload)&lt;br /&gt;
&lt;br /&gt;
== Layer 2 - &amp;quot;ircom&amp;quot; ==&lt;br /&gt;
ircom is a simple stateful point-to-point master-slave communication protocol built on top of IR layer 1.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0 auto; text-align: center;&amp;quot;&lt;br /&gt;
|+IR framing format - long frame&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-top: none&amp;quot; | Byte&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 7&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 6&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 5&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 4&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 3&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 2&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 1&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 0&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Random value in range &amp;lt;code&amp;gt;0x01&amp;lt;/code&amp;gt;~&amp;lt;code&amp;gt;0xFE&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x04&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|RFU?&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|Protocol version: &amp;lt;code&amp;gt;0x1&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 0x05&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Connection identificator&lt;br /&gt;
|-&lt;br /&gt;
! 0x06&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Reserved for future use?&lt;br /&gt;
|-&lt;br /&gt;
! 0x07&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|???&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot;|Operation code&lt;br /&gt;
|-&lt;br /&gt;
! 0x08+&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot; style=&amp;quot;background:#ffd0d0;&amp;quot;|Payload (if any)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Random values are generated using a Mersenne Twister whose seed is based off the NFC adapter system tick counter. It is therefore random, and the 3DS won&#039;t attempt to validate them by any means. Its purpose is unknown.&lt;br /&gt;
* NFC adapter will ignore packets whose protocol version is not 1. It will not even reply.&lt;br /&gt;
* Connection identifier is a random byte the 3DS assigns to identify the connection should be several connections in range at once. Slave devices must save this value from the initial handshake packet and use it for replies. It must also ignore packets whose connection ID does not match.&lt;br /&gt;
&lt;br /&gt;
== Samples ==&lt;br /&gt;
&lt;br /&gt;
NFC adapter update beacon, as sent by the console:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Raw&lt;br /&gt;
! Deobfuscated&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 73 FE A5 C4 A4 2C A4 20 F5&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9A 9D D6 3A 01 E8 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 D1 3E B7 7B B6 91 B6 9D 87&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;38 5D 66 45 01 EA 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 09 58 23 36 22 DA 22 D6 AE&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;E0 3B 2A 6E 01 EC 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 5E DD A4 A0 A5 4E A5 42 A8&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;B7 BE FA 7D 01 EE 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 BC 19 C6 37 C7 C7 C7 CB 8B&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;55 7A 7A 2E 01 F0 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C9 15 F6 63 F7 91 F7 9D B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;20 76 3F 76 01 F2 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 6E 48 47 1A 46 EE 46 E2 C7&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;87 2B 29 52 01 F4 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A2 8C E5 C3 E4 35 E4 39 74&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4B EF 47 4F 01 F6 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 26 1C 07 10 06 E8 06 E4 64&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;CF 7F 21 0C 01 F8 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 7E 73 A2 3F A3 C5 A3 C9 FD&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;97 10 DC 4C 01 FA 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 75 00 F3 B8 F2 44 F2 48 63&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9C 63 86 B8 01 FC 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 8D AC 0F D5 0E 2B 0E 27 72&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;64 CF 82 79 01 FE 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A3 55 7C 53 7D 52 7D 5E B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4A 36 DF 06 01 01 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 15 06 43 C0 42 C3 42 CF 85&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FC 65 56 C6 01 03 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 66 E0 9A 17 9B 12 9B 1E A0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;8F 83 FC F7 01 05 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A4 35 09 97 08 90 08 9C 25&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4D 56 AD A2 01 07 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 73 E2 BD AF BC A6 BC AA 60&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9A 81 CE 4D 01 09 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 02 57 D7 B0 D6 BB D6 B7 28&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;EB 34 D5 E7 01 0B 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 0D 79 01 AA 00 A7 00 AB 22&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;E4 1A 0C D3 01 0D 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 14 91 04 B9 05 B6 05 BA B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FD F2 10 28 01 0F 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 2C 86 B1 49 B0 58 B0 54 C0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;C5 E5 9D CF 01 11 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 D5 1D DE DB DF C8 DF C4 F9&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;3C 7E 0B C6 01 13 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 AF 75 DE 5C DF 49 DF 45 9C&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;46 16 71 29 01 15 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C8 E2 5B C6 5A D1 5A DD B5&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;21 81 93 24 01 17 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 9B 51 68 2D 69 34 69 38 41&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;72 32 F3 7C 01 19 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 13 7B 9F EF 9E F4 9E F8 32&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FA 18 8C 94 01 1B 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A7 62 02 9C 03 81 03 8D BD&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4E 01 A5 FE 01 1D 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 39 06 94 36 95 29 95 25 09&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;D0 65 AD 30 01 1F 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 32 4C D7 C0 D6 E1 D6 ED 92&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;DB 2F E5 8C 01 21 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 83 BE F2 8F F3 AC F3 A0 B1&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;6A DD 71 31 01 23 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 83 5E A0 57 A1 72 A1 7E F0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;6A 3D 23 09 01 25 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 6E C8 AD 69 AC 4E AC 42 D1&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;87 AB C3 A1 01 27 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C7 33 A1 2C A0 05 A0 09 FC&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;2E 50 66 1F 01 29 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
* [https://www.broadcom.com/products/NFC/NFC-Solutions/BCM2079x-Family BCM2079x brief on Broadcom&#039;s website]&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12459</id>
		<title>NFC adapter</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12459"/>
		<updated>2015-04-19T17:57:32Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo NFC adapter is an upcoming external device which adds NFC capabilities for [[amiibo]]s to old Nintendo 3DS and Nintendo 2DS consoles, using the infrared port on the back of the console.&lt;br /&gt;
&lt;br /&gt;
[[File:150217nfcreader-640x360.jpg|thumb|right|250px|Media preview, as released by Nintendo]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Technical details =&lt;br /&gt;
Based on analysis of the [[fangate_updater.bin]] file, which is part of the old Nintendo 3DS operating system since [[9.3.0-21]] and contains the firmware running on the external adapter; and analysis of the [[NFC Services]] running on old 3DS.&lt;br /&gt;
&lt;br /&gt;
* SOC inside the adapter: Broadcom BCM20791B1&lt;br /&gt;
* CPU: ARM Cortex M0&lt;br /&gt;
* Communications: infrared, with [[ir:USER]] running on the console. Uses obfuscated payloads. Baud rate is 115200 bps.&lt;br /&gt;
&lt;br /&gt;
Memory map:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x08008000&lt;br /&gt;
| 256KB?&lt;br /&gt;
| Firmware ([[fangate_updater.bin]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 128KB?&lt;br /&gt;
| RAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x40023C00&lt;br /&gt;
| 0x1C&lt;br /&gt;
| FLASH ROM control&lt;br /&gt;
|-&lt;br /&gt;
| 0xE000ED00&lt;br /&gt;
| 0x104&lt;br /&gt;
| [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0439b/BABCIIIA.html ARM Cortex system control block]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= IR communications =&lt;br /&gt;
Packets are sent using IrDA-SIR (using [[ir:USER]]), with a 8N1 encoding (eight data bits, one stop bit, without parity). Each one is formed by a 2-byte header, a varint with the payload size, an obfuscated payload, and trailing error detection byte.&lt;br /&gt;
&lt;br /&gt;
== Layer 1 - framing format ==&lt;br /&gt;
Frames are encoded using two different yet very simmilar formats, depending on how large the payload to be transmitted is:&lt;br /&gt;
* For payloads with less than 64 bytes, the third byte represents the payload size.&lt;br /&gt;
* For packets with up to 16383 bytes, the size is split in two bytes, with the third byte being the upper 6 bits of the payload size, OR&#039;d with 0x40, and the fourth being the lower eight bits of the payload size&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0 auto; text-align: center;&amp;quot;&lt;br /&gt;
|+IR framing format - short frame&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-top: none&amp;quot; | Byte&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 7&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 6&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 5&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 4&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 3&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 2&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 1&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 0&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Synchronization byte (&amp;lt;code&amp;gt;0xA5&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Reserved for future use (&amp;lt;code&amp;gt;0x00&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| RFU (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
| Short frame (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot;|Payload size&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte 0&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot;|...&lt;br /&gt;
|-&lt;br /&gt;
! 0x03+n-1&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte n-1&lt;br /&gt;
|-&lt;br /&gt;
! 0x03+n&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|[[CRC-8-CCITT]] computer over whole packet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;margin: 0 auto; text-align: center;&amp;quot;&lt;br /&gt;
|+IR framing format - long frame&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border-top: none&amp;quot; | Byte&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 7&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 6&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 5&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 4&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 3&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 2&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 1&lt;br /&gt;
! style=&amp;quot;width:10%;&amp;quot;| 0&lt;br /&gt;
|-&lt;br /&gt;
! 0x00&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Synchronization byte (&amp;lt;code&amp;gt;0xA5&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
! 0x01&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Reserved for future use (&amp;lt;code&amp;gt;0x00&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
! 0x02&lt;br /&gt;
| RFU (&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;)&lt;br /&gt;
| Long frame (&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;)&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot;|Payload size (upper 6 bits)&lt;br /&gt;
|-&lt;br /&gt;
! 0x03&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload size (lower 8 bits)&lt;br /&gt;
|-&lt;br /&gt;
! 0x04&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte 0&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;9&amp;quot;|...&lt;br /&gt;
|-&lt;br /&gt;
! 0x04+n-1&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|Payload byte n-1&lt;br /&gt;
|-&lt;br /&gt;
! 0x04+n&lt;br /&gt;
| colspan=&amp;quot;8&amp;quot;|[[CRC-8-CCITT]] computer over whole packet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
The packet header is fixed and consists in a synchronization byte (0xA5), followed by a unused (possibly RFU) zero byte. After these two hardcoded bytes, there&#039;s a varint representing the payload size, which may use one byte or two, depending on the how big the payload is.&lt;br /&gt;
&lt;br /&gt;
In C:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;uint8_t * setPacketHeader(uint8_t * buffer, size_t payloadSize) {&lt;br /&gt;
	assert(payloadSize &amp;lt; 16384);&lt;br /&gt;
&lt;br /&gt;
	buffer[0] = 0xA5;&lt;br /&gt;
	buffer[1] = 0x00;&lt;br /&gt;
&lt;br /&gt;
	if (payloadSize &amp;lt; 64) {&lt;br /&gt;
		buffer[2] = payloadSize;&lt;br /&gt;
		buffer += 3;&lt;br /&gt;
	} else {&lt;br /&gt;
		buffer[2] = 0x40 | (payloadSize &amp;gt;&amp;gt; 8);&lt;br /&gt;
		buffer[3] = payloadSize;&lt;br /&gt;
		buffer += 4;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return buffer;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Payload ===&lt;br /&gt;
The payload is obfuscated using a XOR-based encryption. In C:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;void payloadObfuscate(const void * voidplain, void * voidcipher, size_t size) {&lt;br /&gt;
	uint16_t * plain = (uint16_t *) voidplain;&lt;br /&gt;
	uint16_t * cipher = (uint16_t *) voidcipher;&lt;br /&gt;
	size_t halfCount = size / sizeof(uint16_t);&lt;br /&gt;
&lt;br /&gt;
	uint16_t xorval = htobe16(0xE963);&lt;br /&gt;
	size_t i;&lt;br /&gt;
&lt;br /&gt;
	for (i = 0; i &amp;lt; halfCount; i++) {&lt;br /&gt;
		xorval ^= plain[i];&lt;br /&gt;
		cipher[i] = xorval;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void payloadDeobfuscate(const void * voidcipher, void * voidplain, size_t size) {&lt;br /&gt;
	uint16_t * cipher = (uint16_t *) voidcipher;&lt;br /&gt;
	uint16_t * plain = (uint16_t *) voidplain;&lt;br /&gt;
	size_t halfCount = size / sizeof(uint16_t);&lt;br /&gt;
&lt;br /&gt;
	if (halfCount) {&lt;br /&gt;
		size_t i;&lt;br /&gt;
		for (i = halfCount - 1; i &amp;gt; 0; i--) {&lt;br /&gt;
			plain[i] = cipher[i] ^ cipher[i - 1];&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		plain[0] = cipher[0] ^ htobe16(0xE963);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Error detection ===&lt;br /&gt;
The trailing error detection byte is calculated using [[CRC-8-CCITT]] &amp;lt;b&amp;gt;over the whole packet&amp;lt;/b&amp;gt; (both the header and the payload)&lt;br /&gt;
&lt;br /&gt;
== Samples ==&lt;br /&gt;
&lt;br /&gt;
NFC adapter update beacon, as sent by the console:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Raw&lt;br /&gt;
! Deobfuscated&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 73 FE A5 C4 A4 2C A4 20 F5&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9A 9D D6 3A 01 E8 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 D1 3E B7 7B B6 91 B6 9D 87&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;38 5D 66 45 01 EA 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 09 58 23 36 22 DA 22 D6 AE&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;E0 3B 2A 6E 01 EC 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 5E DD A4 A0 A5 4E A5 42 A8&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;B7 BE FA 7D 01 EE 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 BC 19 C6 37 C7 C7 C7 CB 8B&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;55 7A 7A 2E 01 F0 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C9 15 F6 63 F7 91 F7 9D B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;20 76 3F 76 01 F2 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 6E 48 47 1A 46 EE 46 E2 C7&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;87 2B 29 52 01 F4 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A2 8C E5 C3 E4 35 E4 39 74&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4B EF 47 4F 01 F6 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 26 1C 07 10 06 E8 06 E4 64&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;CF 7F 21 0C 01 F8 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 7E 73 A2 3F A3 C5 A3 C9 FD&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;97 10 DC 4C 01 FA 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 75 00 F3 B8 F2 44 F2 48 63&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9C 63 86 B8 01 FC 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 8D AC 0F D5 0E 2B 0E 27 72&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;64 CF 82 79 01 FE 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A3 55 7C 53 7D 52 7D 5E B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4A 36 DF 06 01 01 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 15 06 43 C0 42 C3 42 CF 85&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FC 65 56 C6 01 03 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 66 E0 9A 17 9B 12 9B 1E A0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;8F 83 FC F7 01 05 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A4 35 09 97 08 90 08 9C 25&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4D 56 AD A2 01 07 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 73 E2 BD AF BC A6 BC AA 60&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9A 81 CE 4D 01 09 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 02 57 D7 B0 D6 BB D6 B7 28&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;EB 34 D5 E7 01 0B 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 0D 79 01 AA 00 A7 00 AB 22&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;E4 1A 0C D3 01 0D 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 14 91 04 B9 05 B6 05 BA B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FD F2 10 28 01 0F 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 2C 86 B1 49 B0 58 B0 54 C0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;C5 E5 9D CF 01 11 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 D5 1D DE DB DF C8 DF C4 F9&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;3C 7E 0B C6 01 13 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 AF 75 DE 5C DF 49 DF 45 9C&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;46 16 71 29 01 15 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C8 E2 5B C6 5A D1 5A DD B5&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;21 81 93 24 01 17 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 9B 51 68 2D 69 34 69 38 41&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;72 32 F3 7C 01 19 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 13 7B 9F EF 9E F4 9E F8 32&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FA 18 8C 94 01 1B 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A7 62 02 9C 03 81 03 8D BD&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4E 01 A5 FE 01 1D 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 39 06 94 36 95 29 95 25 09&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;D0 65 AD 30 01 1F 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 32 4C D7 C0 D6 E1 D6 ED 92&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;DB 2F E5 8C 01 21 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 83 BE F2 8F F3 AC F3 A0 B1&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;6A DD 71 31 01 23 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 83 5E A0 57 A1 72 A1 7E F0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;6A 3D 23 09 01 25 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 6E C8 AD 69 AC 4E AC 42 D1&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;87 AB C3 A1 01 27 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C7 33 A1 2C A0 05 A0 09 FC&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;2E 50 66 1F 01 29 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
* [https://www.broadcom.com/products/NFC/NFC-Solutions/BCM2079x-Family BCM2079x brief on Broadcom&#039;s website]&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12447</id>
		<title>NFC adapter</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12447"/>
		<updated>2015-04-18T15:36:47Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: /* Technical details */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo NFC adapter is an upcoming external device which adds NFC capabilities for [[amiibo]]s to old Nintendo 3DS and Nintendo 2DS consoles, using the infrared port on the back of the console.&lt;br /&gt;
&lt;br /&gt;
[[File:150217nfcreader-640x360.jpg|thumb|right|250px|Media preview, as released by Nintendo]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Technical details =&lt;br /&gt;
Based on analysis of the [[fangate_updater.bin]] file, which is part of the old Nintendo 3DS operating system since [[9.3.0-21]] and contains the firmware running on the external adapter; and analysis of the [[NFC Services]] running on old 3DS.&lt;br /&gt;
&lt;br /&gt;
* SOC inside the adapter: Broadcom BCM20791B1&lt;br /&gt;
* CPU: ARM Cortex M0&lt;br /&gt;
* Communications: infrared, with [[ir:USER]] running on the console. Uses obfuscated payloads. Baud rate is 115200 bps.&lt;br /&gt;
&lt;br /&gt;
Memory map:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x08008000&lt;br /&gt;
| 256KB?&lt;br /&gt;
| Firmware ([[fangate_updater.bin]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 128KB?&lt;br /&gt;
| RAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x40023C00&lt;br /&gt;
| 0x1C&lt;br /&gt;
| FLASH ROM control&lt;br /&gt;
|-&lt;br /&gt;
| 0xE000ED00&lt;br /&gt;
| 0x104&lt;br /&gt;
| [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0439b/BABCIIIA.html ARM Cortex system control block]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= IR communications =&lt;br /&gt;
Packets are sent using IrDA-SIR (using [[ir:USER]]), with a 8N1 encoding (eight data bits, one stop bit, without parity). Each one is formed by a 2-byte header, a varint with the payload size, an obfuscated payload, and trailing error detection byte.&lt;br /&gt;
&lt;br /&gt;
== Packet header ==&lt;br /&gt;
The packet header is fixed and consists in a synchronization byte (0xA5), followed by a unused (possibly RFU) zero byte. After these two hardcoded bytes, there&#039;s a varint representing the payload size, which may use one byte or two, depending on the how big the payload is.&lt;br /&gt;
&lt;br /&gt;
* For payloads with less than 64 bytes, the third byte represents the payload size.&lt;br /&gt;
* For packets with up to 16383 bytes, the size is split in two bytes, with the third byte being the upper 6 bits of the payload size, OR&#039;d with 0x40, and the fourth being the lower eight bits of the payload size&lt;br /&gt;
&lt;br /&gt;
For packets with less than 64 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Sync&lt;br /&gt;
! RFU&lt;br /&gt;
! Size&lt;br /&gt;
|-&lt;br /&gt;
| 0xA5&lt;br /&gt;
| 0x00&lt;br /&gt;
| size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For packets with up to 16383 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Sync&lt;br /&gt;
! RFU&lt;br /&gt;
! Size (1)&lt;br /&gt;
! Size (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA5&lt;br /&gt;
| 0x00&lt;br /&gt;
| (size &amp;gt;&amp;gt; 8) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x40&lt;br /&gt;
| size &amp;amp; 0xFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In C:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;uint8_t * setPacketHeader(uint8_t * buffer, size_t payloadSize) {&lt;br /&gt;
	assert(payloadSize &amp;lt; 16384);&lt;br /&gt;
&lt;br /&gt;
	buffer[0] = 0xA5;&lt;br /&gt;
	buffer[1] = 0x00;&lt;br /&gt;
&lt;br /&gt;
	if (payloadSize &amp;lt; 64) {&lt;br /&gt;
		buffer[2] = payloadSize;&lt;br /&gt;
		buffer += 3;&lt;br /&gt;
	} else {&lt;br /&gt;
		buffer[2] = 0x40 | (payloadSize &amp;gt;&amp;gt; 8);&lt;br /&gt;
		buffer[3] = payloadSize;&lt;br /&gt;
		buffer += 4;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return buffer;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Payload ==&lt;br /&gt;
The payload is obfuscated using a XOR-based encryption. In C:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;void payloadObfuscate(const void * voidplain, void * voidcipher, size_t size) {&lt;br /&gt;
	uint16_t * plain = (uint16_t *) voidplain;&lt;br /&gt;
	uint16_t * cipher = (uint16_t *) voidcipher;&lt;br /&gt;
	size_t halfCount = size / sizeof(uint16_t);&lt;br /&gt;
&lt;br /&gt;
	uint16_t xorval = htobe16(0xE963);&lt;br /&gt;
	size_t i;&lt;br /&gt;
&lt;br /&gt;
	for (i = 0; i &amp;lt; halfCount; i++) {&lt;br /&gt;
		xorval ^= plain[i];&lt;br /&gt;
		cipher[i] = xorval;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void payloadDeobfuscate(const void * voidcipher, void * voidplain, size_t size) {&lt;br /&gt;
	uint16_t * cipher = (uint16_t *) voidcipher;&lt;br /&gt;
	uint16_t * plain = (uint16_t *) voidplain;&lt;br /&gt;
	size_t halfCount = size / sizeof(uint16_t);&lt;br /&gt;
&lt;br /&gt;
	if (halfCount) {&lt;br /&gt;
		size_t i;&lt;br /&gt;
		for (i = halfCount - 1; i &amp;gt; 0; i--) {&lt;br /&gt;
			plain[i] = cipher[i] ^ cipher[i - 1];&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		plain[0] = cipher[0] ^ htobe16(0xE963);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Error detection ==&lt;br /&gt;
The trailing error detection byte is calculated using [[CRC-8-CCITT]] &amp;lt;b&amp;gt;over the whole packet&amp;lt;/b&amp;gt; (both the header and the payload)&lt;br /&gt;
&lt;br /&gt;
== Samples ==&lt;br /&gt;
&lt;br /&gt;
NFC adapter update beacon, as sent by the console:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Raw&lt;br /&gt;
! Deobfuscated&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 73 FE A5 C4 A4 2C A4 20 F5&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9A 9D D6 3A 01 E8 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 D1 3E B7 7B B6 91 B6 9D 87&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;38 5D 66 45 01 EA 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 09 58 23 36 22 DA 22 D6 AE&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;E0 3B 2A 6E 01 EC 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 5E DD A4 A0 A5 4E A5 42 A8&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;B7 BE FA 7D 01 EE 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 BC 19 C6 37 C7 C7 C7 CB 8B&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;55 7A 7A 2E 01 F0 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C9 15 F6 63 F7 91 F7 9D B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;20 76 3F 76 01 F2 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 6E 48 47 1A 46 EE 46 E2 C7&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;87 2B 29 52 01 F4 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A2 8C E5 C3 E4 35 E4 39 74&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4B EF 47 4F 01 F6 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 26 1C 07 10 06 E8 06 E4 64&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;CF 7F 21 0C 01 F8 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 7E 73 A2 3F A3 C5 A3 C9 FD&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;97 10 DC 4C 01 FA 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 75 00 F3 B8 F2 44 F2 48 63&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9C 63 86 B8 01 FC 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 8D AC 0F D5 0E 2B 0E 27 72&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;64 CF 82 79 01 FE 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A3 55 7C 53 7D 52 7D 5E B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4A 36 DF 06 01 01 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 15 06 43 C0 42 C3 42 CF 85&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FC 65 56 C6 01 03 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 66 E0 9A 17 9B 12 9B 1E A0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;8F 83 FC F7 01 05 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A4 35 09 97 08 90 08 9C 25&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4D 56 AD A2 01 07 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 73 E2 BD AF BC A6 BC AA 60&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9A 81 CE 4D 01 09 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 02 57 D7 B0 D6 BB D6 B7 28&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;EB 34 D5 E7 01 0B 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 0D 79 01 AA 00 A7 00 AB 22&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;E4 1A 0C D3 01 0D 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 14 91 04 B9 05 B6 05 BA B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FD F2 10 28 01 0F 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 2C 86 B1 49 B0 58 B0 54 C0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;C5 E5 9D CF 01 11 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 D5 1D DE DB DF C8 DF C4 F9&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;3C 7E 0B C6 01 13 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 AF 75 DE 5C DF 49 DF 45 9C&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;46 16 71 29 01 15 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C8 E2 5B C6 5A D1 5A DD B5&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;21 81 93 24 01 17 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 9B 51 68 2D 69 34 69 38 41&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;72 32 F3 7C 01 19 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 13 7B 9F EF 9E F4 9E F8 32&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FA 18 8C 94 01 1B 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A7 62 02 9C 03 81 03 8D BD&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4E 01 A5 FE 01 1D 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 39 06 94 36 95 29 95 25 09&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;D0 65 AD 30 01 1F 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 32 4C D7 C0 D6 E1 D6 ED 92&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;DB 2F E5 8C 01 21 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 83 BE F2 8F F3 AC F3 A0 B1&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;6A DD 71 31 01 23 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 83 5E A0 57 A1 72 A1 7E F0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;6A 3D 23 09 01 25 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 6E C8 AD 69 AC 4E AC 42 D1&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;87 AB C3 A1 01 27 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C7 33 A1 2C A0 05 A0 09 FC&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;2E 50 66 1F 01 29 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
* [https://www.broadcom.com/products/NFC/NFC-Solutions/BCM2079x-Family BCM2079x brief on Broadcom&#039;s website]&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Amiibo&amp;diff=12437</id>
		<title>Amiibo</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Amiibo&amp;diff=12437"/>
		<updated>2015-04-17T21:08:15Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Amiibo&#039;&#039;&#039; are [[NFC_Services|NFC]] figures made by Nintendo, used in games in different forms (different in each game). It can be used with the New3DS and the Old3DS with an [[IR_Services|IR]] [[NFC_adapter|peripheral]].&lt;br /&gt;
&lt;br /&gt;
= Tag information =&lt;br /&gt;
* Model: [http://www.nxp.com/products/identification_and_security/smart_label_and_tag_ics/ntag/series/NTAG213_215_216.html NTAG215]&lt;br /&gt;
* Manufacturer: NXP Semiconductor&lt;br /&gt;
* Page size: 4 bytes&lt;br /&gt;
* Page count: 135 pages (540 bytes)&lt;br /&gt;
* Data pages: 126 pages (504 bytes)&lt;br /&gt;
&lt;br /&gt;
= Page layout =&lt;br /&gt;
Excluiding the configuration pages at the end, the structure of the NFC pages is as following:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  NFC page&lt;br /&gt;
!  Total pages&lt;br /&gt;
!  Raw byte offset in EEPROM&lt;br /&gt;
!  Total byte size&lt;br /&gt;
!  Writable&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x10&lt;br /&gt;
| style=&amp;quot;background: red&amp;quot; | No&lt;br /&gt;
| Same as standard NTAG215: 9-byte serial-number, &amp;quot;internal&amp;quot; u8 value, two lock bytes then the &amp;quot;Capability Container (CC)&amp;quot; page.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| Last 3-bytes here are used with the following HMAC where the size is 0x1DF-bytes. The u16 starting at byte1 is used for the first two bytes in the 0x40-byte input buffer for Amiibo [[Process_Services_PXI|crypto]] init. The first byte is normally 0xA5. The remaining bytes are initially(before the Amiibo is written to) all-zero. Byte[2](maybe big-endian u16 starting at byte1?) here is incremented each time the Amiibo is written to.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x20&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| The system crypts 0x1A0-bytes with some data from here, see below.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x34&lt;br /&gt;
| 0x20&lt;br /&gt;
| style=&amp;quot;background: red&amp;quot; | No&lt;br /&gt;
| SHA256-(HMAC?) hash. The first 0x18-bytes of this hash is section3 in the encrypted buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| 0xB&lt;br /&gt;
| 0x54&lt;br /&gt;
| 0x2C&lt;br /&gt;
| style=&amp;quot;background: red&amp;quot; | No&lt;br /&gt;
| This is plaintext data, see below.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x20&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| SHA256-(HMAC?) hash over 0x1DF-bytes: first 3-bytes are from the last 3-bytes of page[4], the rest is over the first 0x1DC-bytes of the plaintext data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x45&lt;br /&gt;
| 0xA0&lt;br /&gt;
| 0x114&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| This is section1 in the encrypted buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6D&lt;br /&gt;
| 0x15&lt;br /&gt;
| 0x1B4&lt;br /&gt;
| 0x54&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| This is section2 in the encrypted buffer.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Specifications can be found on this image, which is a compilation of screenshots made by scanning a Samus amiibo with the Android App &amp;quot;NFC TagInfo&amp;quot;:&lt;br /&gt;
[[File:Amiibonfctaginfo.png|500px]]&lt;br /&gt;
&lt;br /&gt;
See here regarding the Amiibo [[Process_Services_PXI|encryption]].&lt;br /&gt;
&lt;br /&gt;
= Data structures =&lt;br /&gt;
&lt;br /&gt;
== Structure of the data starting at page 0x15 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0xC&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x20&lt;br /&gt;
| Probably a SHA256-HMAC hash.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Encrypted data buffer structure ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Encrypted buffer offset&lt;br /&gt;
!  Raw byte offset in NFC EEPROM&lt;br /&gt;
!  NFC page&lt;br /&gt;
!  Byte size&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x20&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0xA0&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x114&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x134&lt;br /&gt;
| 0x1B4&lt;br /&gt;
| 0x6D&lt;br /&gt;
| 0x54&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x188&lt;br /&gt;
| 0x34&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x18&lt;br /&gt;
| This data is included in the crypto buffer, even though this data isn&#039;t actually encrypted(this is part of a hash).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Structure of the plaintext data ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0xB0&lt;br /&gt;
| Amiibo settings are stored within here.&lt;br /&gt;
|-&lt;br /&gt;
| 0xB0&lt;br /&gt;
| 0xD8&lt;br /&gt;
| AppData, for the user-application specified in the above Amiibo settings. The data stored here is application-specific.&lt;br /&gt;
|-&lt;br /&gt;
| 0x188&lt;br /&gt;
| 0x18&lt;br /&gt;
| Not used in &amp;quot;decrypted&amp;quot; form, since this isn&#039;t encrypted to begin with.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Structure of Amiibo settings ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Flags. The low 4-bits here are copied to the struct used with [[NFC:GetAmiiboSettings]]. The below setup date is only loaded when bit4 and/or bit5 here are set, otherwise value 0 is used instead for the date. Bit4=1 indicates that the Amiibo was setup with [[amiibo Settings]]: [[NFC:GetAmiiboSettings]] will return an all-zero struct when this is not set.&lt;br /&gt;
Bit5=1 indicates that the AppData was [[NFC:InitializeWriteAppData|initialized]]. [[NFC:InitializeWriteAppData]] will return an error if this is value 1, when successful that command will then set this bit to value 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| Unknown. The low 4-bits here are copied to the struct used with [[NFC:GetAmiiboSettings]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| This big-endian u16 counter is incremented each time that the CRC32 at offset 0x8 gets updated by [[NFC:InitializeWriteAppData]], due to that value not matching the calculated one. When this value is already 0xFFFF, this counter won&#039;t be updated anymore.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x2&lt;br /&gt;
| u16 big-endian date value, see below. This is the date for when the Amiibo was initially setup in [[amiibo Settings]]. This is also written by [[NFC:InitializeWriteAppData]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x2&lt;br /&gt;
| u16 big-endian date value, see below. This is the date for when the Amiibo was last written to.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Big-endian CRC32 value with initialval=~0, with the 8-byte output from [[Cfg:GenHashConsoleUnique]]. This is written by [[NFC:InitializeWriteAppData]], when the current value doesn&#039;t match the calculated one.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x14(10*2)&lt;br /&gt;
| UTF-16BE Amiibo nickname. &lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x60&lt;br /&gt;
| Owner [[Mii_Maker|Mii]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| 0x8&lt;br /&gt;
| Big-endian application programID/titleID from the application which [[NFC:InitializeWriteAppData|initialized]] the AppData, zero otherwise. This is only written, not compared with the user application titleID: doing the latter would break games&#039; cross-platform compatibility with 3DS&amp;lt;&amp;gt;Wii U(Super Smash Bros 3DS/Wii U for example).&lt;br /&gt;
|-&lt;br /&gt;
| 0x88&lt;br /&gt;
| 0x2&lt;br /&gt;
| u16 big-endian. This value is incremented each time the Amiibo is written to. When this value is already 0xFFFF, this counter won&#039;t be updated anymore.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A&lt;br /&gt;
| 0x4&lt;br /&gt;
| Big-endian u32 Amiibo AppID.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E&lt;br /&gt;
| 0x2&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x90&lt;br /&gt;
| 0x20&lt;br /&gt;
| Probably a SHA256-HMAC hash.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Format of the big-endian date values:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4&lt;br /&gt;
| Day&lt;br /&gt;
|-&lt;br /&gt;
| 5-8&lt;br /&gt;
| Month&lt;br /&gt;
|-&lt;br /&gt;
| 9-15&lt;br /&gt;
| Year, relative to 2000.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= 3DS read/write procedure =&lt;br /&gt;
Note this is the procedure used by the console, but isn&#039;t the only way of reading them.&lt;br /&gt;
&lt;br /&gt;
== Read procedure ==&lt;br /&gt;
* GET_VERSION&lt;br /&gt;
* READ, startpage=0x03. The read page data for page[0x3] must match little-endian 0xEEFF10F1.&lt;br /&gt;
* PWD_AUTH. Key is based on UID.&lt;br /&gt;
* FAST_READ: startpage=0x00, endpage=0x3B&lt;br /&gt;
* FAST_READ: startpage=0x3C, endpage=0x77&lt;br /&gt;
* FAST_READ: startpage=0x78, endpage=0x86&lt;br /&gt;
&lt;br /&gt;
Therefore, *all* pages from the Amiibo NFC tag are read, including the configuration pages at the end.&lt;br /&gt;
&lt;br /&gt;
== Write procedure ==&lt;br /&gt;
* GET_VERSION&lt;br /&gt;
* READ, startpage=0x03. The read page data for page[0x3] must match little-endian 0xEEFF10F1.&lt;br /&gt;
* PWD_AUTH. Key is based on UID.&lt;br /&gt;
* Multiple WRITE commands for writing to pages 0x04..0x0C. The first byte for page[4] is zero here.&lt;br /&gt;
* Multiple WRITE commands for writing to pages 0x20..0x81.&lt;br /&gt;
* Use the last 3 commands from the above reading section.&lt;br /&gt;
* WRITE: page=0x04, same data as before except first byte is 0xA5 this time.&lt;br /&gt;
* FAST_READ: startpage=0x04, endpage=0x04&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
* [http://wiiubrew.org/wiki/Wii_U_GamePad Wii U Gamepad and Amiibo information on WiiUBrew].&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12426</id>
		<title>NFC adapter</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12426"/>
		<updated>2015-04-17T12:22:24Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo NFC adapter is an upcoming external device which adds NFC capabilities for [[amiibo]]s to old Nintendo 3DS and Nintendo 2DS consoles, using the infrared port on the back of the console.&lt;br /&gt;
&lt;br /&gt;
[[File:150217nfcreader-640x360.jpg|thumb|right|250px|Media preview, as released by Nintendo]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Technical details =&lt;br /&gt;
Based on analysis of the [[fangate_updater.bin]] file, which is part of the old Nintendo 3DS operating system since [[9.3.0-21]] and contains the firmware running on the external adapter; and analysis of the [[NFC Services]] running on old 3DS.&lt;br /&gt;
&lt;br /&gt;
* SOC inside the adapter: Broadcom BCM20791B1&lt;br /&gt;
* CPU: ARM Cortex M0&lt;br /&gt;
* Communications: infrared, with [[ir:USER]] running on the console. Uses obfuscated payloads. Baud rate is 115200 bps.&lt;br /&gt;
&lt;br /&gt;
Memory map:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x08008000&lt;br /&gt;
| 256KB?&lt;br /&gt;
| Firmware ([[fangate_updater.bin]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 128KB?&lt;br /&gt;
| RAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x40023C00&lt;br /&gt;
| 0x0000001C&lt;br /&gt;
| FLASH ROM control&lt;br /&gt;
|-&lt;br /&gt;
| 0xE000ED00&lt;br /&gt;
| ?&lt;br /&gt;
| System control block &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= IR communications =&lt;br /&gt;
Packets are sent using IrDA-SIR (using [[ir:USER]]), with a 8N1 encoding (eight data bits, one stop bit, without parity). Each one is formed by a 2-byte header, a varint with the payload size, an obfuscated payload, and trailing error detection byte.&lt;br /&gt;
&lt;br /&gt;
== Packet header ==&lt;br /&gt;
The packet header is fixed and consists in a synchronization byte (0xA5), followed by a unused (possibly RFU) zero byte. After these two hardcoded bytes, there&#039;s a varint representing the payload size, which may use one byte or two, depending on the how big the payload is.&lt;br /&gt;
&lt;br /&gt;
* For payloads with less than 64 bytes, the third byte represents the payload size.&lt;br /&gt;
* For packets with up to 16383 bytes, the size is split in two bytes, with the third byte being the upper 6 bits of the payload size, OR&#039;d with 0x40, and the fourth being the lower eight bits of the payload size&lt;br /&gt;
&lt;br /&gt;
For packets with less than 64 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Sync&lt;br /&gt;
! RFU&lt;br /&gt;
! Size&lt;br /&gt;
|-&lt;br /&gt;
| 0xA5&lt;br /&gt;
| 0x00&lt;br /&gt;
| size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For packets with up to 16383 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Sync&lt;br /&gt;
! RFU&lt;br /&gt;
! Size (1)&lt;br /&gt;
! Size (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA5&lt;br /&gt;
| 0x00&lt;br /&gt;
| (size &amp;gt;&amp;gt; 8) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x40&lt;br /&gt;
| size &amp;amp; 0xFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In C:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;uint8_t * setPacketHeader(uint8_t * buffer, size_t payloadSize) {&lt;br /&gt;
	assert(payloadSize &amp;lt; 16384);&lt;br /&gt;
&lt;br /&gt;
	buffer[0] = 0xA5;&lt;br /&gt;
	buffer[1] = 0x00;&lt;br /&gt;
&lt;br /&gt;
	if (payloadSize &amp;lt; 64) {&lt;br /&gt;
		buffer[2] = payloadSize;&lt;br /&gt;
		buffer += 3;&lt;br /&gt;
	} else {&lt;br /&gt;
		buffer[2] = 0x40 | (payloadSize &amp;gt;&amp;gt; 8);&lt;br /&gt;
		buffer[3] = payloadSize;&lt;br /&gt;
		buffer += 4;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return buffer;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Payload ==&lt;br /&gt;
The payload is obfuscated using a XOR-based encryption. In C:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;void payloadObfuscate(const void * voidplain, void * voidcipher, size_t size) {&lt;br /&gt;
	uint16_t * plain = (uint16_t *) voidplain;&lt;br /&gt;
	uint16_t * cipher = (uint16_t *) voidcipher;&lt;br /&gt;
	size_t halfCount = size / sizeof(uint16_t);&lt;br /&gt;
&lt;br /&gt;
	uint16_t xorval = htobe16(0xE963);&lt;br /&gt;
	size_t i;&lt;br /&gt;
&lt;br /&gt;
	for (i = 0; i &amp;lt; halfCount; i++) {&lt;br /&gt;
		xorval ^= plain[i];&lt;br /&gt;
		cipher[i] = xorval;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void payloadDeobfuscate(const void * voidcipher, void * voidplain, size_t size) {&lt;br /&gt;
	uint16_t * cipher = (uint16_t *) voidcipher;&lt;br /&gt;
	uint16_t * plain = (uint16_t *) voidplain;&lt;br /&gt;
	size_t halfCount = size / sizeof(uint16_t);&lt;br /&gt;
&lt;br /&gt;
	if (halfCount) {&lt;br /&gt;
		size_t i;&lt;br /&gt;
		for (i = halfCount - 1; i &amp;gt; 0; i--) {&lt;br /&gt;
			plain[i] = cipher[i] ^ cipher[i - 1];&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		plain[0] = cipher[0] ^ htobe16(0xE963);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Error detection ==&lt;br /&gt;
The trailing error detection byte is calculated using [[CRC-8-CCITT]] &amp;lt;b&amp;gt;over the whole packet&amp;lt;/b&amp;gt; (both the header and the payload)&lt;br /&gt;
&lt;br /&gt;
== Samples ==&lt;br /&gt;
&lt;br /&gt;
NFC adapter update beacon, as sent by the console:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Raw&lt;br /&gt;
! Deobfuscated&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 73 FE A5 C4 A4 2C A4 20 F5&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9A 9D D6 3A 01 E8 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 D1 3E B7 7B B6 91 B6 9D 87&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;38 5D 66 45 01 EA 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 09 58 23 36 22 DA 22 D6 AE&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;E0 3B 2A 6E 01 EC 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 5E DD A4 A0 A5 4E A5 42 A8&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;B7 BE FA 7D 01 EE 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 BC 19 C6 37 C7 C7 C7 CB 8B&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;55 7A 7A 2E 01 F0 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C9 15 F6 63 F7 91 F7 9D B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;20 76 3F 76 01 F2 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 6E 48 47 1A 46 EE 46 E2 C7&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;87 2B 29 52 01 F4 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A2 8C E5 C3 E4 35 E4 39 74&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4B EF 47 4F 01 F6 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 26 1C 07 10 06 E8 06 E4 64&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;CF 7F 21 0C 01 F8 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 7E 73 A2 3F A3 C5 A3 C9 FD&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;97 10 DC 4C 01 FA 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 75 00 F3 B8 F2 44 F2 48 63&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9C 63 86 B8 01 FC 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 8D AC 0F D5 0E 2B 0E 27 72&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;64 CF 82 79 01 FE 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A3 55 7C 53 7D 52 7D 5E B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4A 36 DF 06 01 01 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 15 06 43 C0 42 C3 42 CF 85&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FC 65 56 C6 01 03 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 66 E0 9A 17 9B 12 9B 1E A0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;8F 83 FC F7 01 05 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A4 35 09 97 08 90 08 9C 25&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4D 56 AD A2 01 07 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 73 E2 BD AF BC A6 BC AA 60&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9A 81 CE 4D 01 09 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 02 57 D7 B0 D6 BB D6 B7 28&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;EB 34 D5 E7 01 0B 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 0D 79 01 AA 00 A7 00 AB 22&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;E4 1A 0C D3 01 0D 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 14 91 04 B9 05 B6 05 BA B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FD F2 10 28 01 0F 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 2C 86 B1 49 B0 58 B0 54 C0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;C5 E5 9D CF 01 11 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 D5 1D DE DB DF C8 DF C4 F9&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;3C 7E 0B C6 01 13 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 AF 75 DE 5C DF 49 DF 45 9C&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;46 16 71 29 01 15 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C8 E2 5B C6 5A D1 5A DD B5&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;21 81 93 24 01 17 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 9B 51 68 2D 69 34 69 38 41&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;72 32 F3 7C 01 19 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 13 7B 9F EF 9E F4 9E F8 32&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FA 18 8C 94 01 1B 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A7 62 02 9C 03 81 03 8D BD&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4E 01 A5 FE 01 1D 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 39 06 94 36 95 29 95 25 09&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;D0 65 AD 30 01 1F 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 32 4C D7 C0 D6 E1 D6 ED 92&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;DB 2F E5 8C 01 21 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 83 BE F2 8F F3 AC F3 A0 B1&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;6A DD 71 31 01 23 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 83 5E A0 57 A1 72 A1 7E F0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;6A 3D 23 09 01 25 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 6E C8 AD 69 AC 4E AC 42 D1&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;87 AB C3 A1 01 27 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C7 33 A1 2C A0 05 A0 09 FC&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;2E 50 66 1F 01 29 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
* [https://www.broadcom.com/products/NFC/NFC-Solutions/BCM2079x-Family BCM2079x brief on Broadcom&#039;s website]&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=IR_Services&amp;diff=12425</id>
		<title>IR Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=IR_Services&amp;diff=12425"/>
		<updated>2015-04-17T12:21:45Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: Undo revision 12392 by Socram8888 (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
= IR Service &amp;quot;ir:u&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:Initialize|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:Shutdown|Shutdown]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030042&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:StartSendTransfer|StartSendTransfer]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:WaitSendTransfer|WaitSendTransfer]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000500C2&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:StartRecvTransfer|StartRecvTransfer]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:WaitRecvTransfer|WaitRecvTransfer]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:GetRecvTransferCount|GetRecvTransferCount]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:GetSendState|GetSendState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090040&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:SetBitRate|SetBitRate]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:GetBitRate|GetBitRate]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0040&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:SetIRLEDState|SetIRLEDState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:GetIRLEDRecvState|GetIRLEDRecvState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:GetSendFinishedEvent|GetSendFinishedEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:GetRecvFinishedEvent|GetRecvFinishedEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:GetTransferState|GetTransferState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| GetErrorStatus&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110040&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:SetSleepModeActive|SetSleepModeActive]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:SetSleepModeState|SetSleepModeState]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= IR Service &amp;quot;ir:USER&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010182&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| InitializeIrnop&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| FinalizeIrnop&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| ClearReceiveBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| ClearSendBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x0005....&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| WaitConnection&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| RequireConnection (u8 input)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0007....&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| AutoConnection&lt;br /&gt;
|-&lt;br /&gt;
| 0x0008....&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| AnyConnection&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| Disconnect&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| GetReceiveEvent (writes event handle to cmdreply[3])&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| GetSendEvent (writes event handle to cmdreply[3])&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| GetConnectionStatusEvent (writes event handle to cmdreply[3])&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0042&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| SendIrnop (u32 size, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0042&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| SendIrnopLarge (u32 size, ((Size&amp;lt;&amp;lt;8) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 10), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F....&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| ReceiveIrnop&lt;br /&gt;
|-&lt;br /&gt;
| 0x0010....&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| ReceiveIrnopLarge&lt;br /&gt;
|-&lt;br /&gt;
| 0x0011....&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| GetLatestReceiveErrorResult&lt;br /&gt;
|-&lt;br /&gt;
| 0x0012....&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| GetLatestSendErrorResult&lt;br /&gt;
|-&lt;br /&gt;
| 0x0013....&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| GetConnectionStatus&lt;br /&gt;
|-&lt;br /&gt;
| 0x0014....&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| GetTryingToConnectStatus&lt;br /&gt;
|-&lt;br /&gt;
| 0x0015....&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| GetReceiveSizeFreeAndUsed&lt;br /&gt;
|-&lt;br /&gt;
| 0x0016....&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| GetSendSizeFreeAndUsed&lt;br /&gt;
|-&lt;br /&gt;
| 0x0017....&lt;br /&gt;
| [[2.2.0-X]]&lt;br /&gt;
| GetConnectionRole&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180182&lt;br /&gt;
| [[2.2.0-X]]&lt;br /&gt;
| InitializeIrnopShared (u32, u32, u32, u32, u32, u8, 0, handle)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190040&lt;br /&gt;
| [[2.2.0-X]]&lt;br /&gt;
| ReleaseReceivedData (32bit_value input)&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0040&lt;br /&gt;
| [[2.2.0-X]]&lt;br /&gt;
| SetOwnMachineId (u8 input)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This service was added with [[2.0.0-2]].&lt;br /&gt;
&lt;br /&gt;
When sending data, SendIrnop is used when the size is &amp;lt;=0xFC, otherwise SendIrnopLarge is used.&lt;br /&gt;
&lt;br /&gt;
= IR Service &amp;quot;ir:rst&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system-version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| [[IRRST:GetHandles|GetHandles]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020080&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| [[IRRST:Initialize|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| [[IRRST:Shutdown|Shutdown]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| This writes an unknown u8 to index-word cmdreply[2], from data loaded from an I2C device register.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| This writes an unknown u8 from IR-module state to index-word cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| This writes two unknown u8 fields from IR-module state to index-word cmdreply[2] and cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070080&lt;br /&gt;
| [[9.0.0-20]]&lt;br /&gt;
| (u8 unk0, u8 unk1) ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| [[9.0.0-20]]&lt;br /&gt;
| (u8 unk0, u8 unk1) ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| [[9.0.0-20]]&lt;br /&gt;
| This writes two unknown u8 fields to index-word cmdreply[2] and cmdreply[3].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This service was added with [[8.0.0-18]]. Unlike the other IR services, this uses [[I2C]] deviceid 17(this deviceid isn&#039;t actually handled by the [[8.0.0-18]] I2C module). This is for the additional [[New 3DS]] HID hardware, this HID data is stored in [[IRRST_Shared_Memory|shared-memory]]. Even with [[9.0.0-20]] IR module still registers+handles this service on both Old3DS+New3DS.&lt;br /&gt;
&lt;br /&gt;
=IR Services=&lt;br /&gt;
Only one session(two sessions starting with [[8.0.0-18]]) to any of these services can be open at a time, thus only one/two process(es) can use any of these services at once. These services interface with hardware services gpio::IR and i2c::IR. The i2c::IR service is used for sending/receiving data.&lt;br /&gt;
&lt;br /&gt;
IRU is for regular IR comms. IRUSER uses a custom IR protocol(above the physical layer). Both of these services use IrDA-SIR. The IR hardware seems to only support IrDA-SIR, other physical protocols such as the one for TV-remotes are not supported(going by the datasheet linked [[Hardware|here]] for a different IC at least).&lt;br /&gt;
&lt;br /&gt;
The protocol used with IRUSER involves encryption(?) implemented in software. IRUSER is used for the [[Circle Pad Pro]]. This same IRUSER service uses the New3DS HID hardware when running on New3DS(note that the main service for New3DS HID is ir:rst).&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Ir:USER&amp;diff=12424</id>
		<title>Ir:USER</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Ir:USER&amp;diff=12424"/>
		<updated>2015-04-17T12:21:24Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: Undo revision 12391 by Socram8888 (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[IR Services#IR Service &amp;quot;ir:USER&amp;quot;]]&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12395</id>
		<title>NFC adapter</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12395"/>
		<updated>2015-04-16T09:05:25Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo NFC adapter is an upcoming external device which adds NFC capabilities for [[amiibo]]s to old Nintendo 3DS and Nintendo 2DS consoles, using the infrared port on the back of the console.&lt;br /&gt;
&lt;br /&gt;
[[File:150217nfcreader-640x360.jpg|thumb|right|250px|Media preview, as released by Nintendo]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Technical details =&lt;br /&gt;
Based on analysis of the [[fangate_updater.bin]] file, which is part of the old Nintendo 3DS operating system since [[9.3.0-21]] and contains the firmware running on the external adapter; and analysis of the [[NFC Services]] running on old 3DS.&lt;br /&gt;
&lt;br /&gt;
* SOC inside the adapter: Broadcom BCM20791B1&lt;br /&gt;
* CPU: ARM Cortex M0&lt;br /&gt;
* Communications: infrared, with [[ir:USER]] running on the console. Uses obfuscated payloads. Baud rate is 115200 bps.&lt;br /&gt;
&lt;br /&gt;
Memory map:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x08008000&lt;br /&gt;
| 256KB?&lt;br /&gt;
| Firmware ([[fangate_updater.bin]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 128KB?&lt;br /&gt;
| RAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x40023C00&lt;br /&gt;
| 0x0000001C&lt;br /&gt;
| FLASH ROM control&lt;br /&gt;
|-&lt;br /&gt;
| 0xE000ED00&lt;br /&gt;
| ?&lt;br /&gt;
| System control block &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= IR communications =&lt;br /&gt;
== Samples ==&lt;br /&gt;
&lt;br /&gt;
NFC adapter update beacon, as sent by the console:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Raw&lt;br /&gt;
! Deobfuscated&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 73 FE A5 C4 A4 2C A4 20 F5&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9A 9D D6 3A 01 E8 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 D1 3E B7 7B B6 91 B6 9D 87&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;38 5D 66 45 01 EA 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 09 58 23 36 22 DA 22 D6 AE&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;E0 3B 2A 6E 01 EC 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 5E DD A4 A0 A5 4E A5 42 A8&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;B7 BE FA 7D 01 EE 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 BC 19 C6 37 C7 C7 C7 CB 8B&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;55 7A 7A 2E 01 F0 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C9 15 F6 63 F7 91 F7 9D B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;20 76 3F 76 01 F2 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 6E 48 47 1A 46 EE 46 E2 C7&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;87 2B 29 52 01 F4 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A2 8C E5 C3 E4 35 E4 39 74&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4B EF 47 4F 01 F6 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 26 1C 07 10 06 E8 06 E4 64&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;CF 7F 21 0C 01 F8 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 7E 73 A2 3F A3 C5 A3 C9 FD&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;97 10 DC 4C 01 FA 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 75 00 F3 B8 F2 44 F2 48 63&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9C 63 86 B8 01 FC 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 8D AC 0F D5 0E 2B 0E 27 72&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;64 CF 82 79 01 FE 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A3 55 7C 53 7D 52 7D 5E B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4A 36 DF 06 01 01 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 15 06 43 C0 42 C3 42 CF 85&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FC 65 56 C6 01 03 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 66 E0 9A 17 9B 12 9B 1E A0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;8F 83 FC F7 01 05 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A4 35 09 97 08 90 08 9C 25&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4D 56 AD A2 01 07 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 73 E2 BD AF BC A6 BC AA 60&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;9A 81 CE 4D 01 09 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 02 57 D7 B0 D6 BB D6 B7 28&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;EB 34 D5 E7 01 0B 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 0D 79 01 AA 00 A7 00 AB 22&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;E4 1A 0C D3 01 0D 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 14 91 04 B9 05 B6 05 BA B2&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FD F2 10 28 01 0F 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 2C 86 B1 49 B0 58 B0 54 C0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;C5 E5 9D CF 01 11 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 D5 1D DE DB DF C8 DF C4 F9&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;3C 7E 0B C6 01 13 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 AF 75 DE 5C DF 49 DF 45 9C&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;46 16 71 29 01 15 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C8 E2 5B C6 5A D1 5A DD B5&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;21 81 93 24 01 17 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 9B 51 68 2D 69 34 69 38 41&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;72 32 F3 7C 01 19 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 13 7B 9F EF 9E F4 9E F8 32&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;FA 18 8C 94 01 1B 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 A7 62 02 9C 03 81 03 8D BD&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;4E 01 A5 FE 01 1D 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 39 06 94 36 95 29 95 25 09&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;D0 65 AD 30 01 1F 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 32 4C D7 C0 D6 E1 D6 ED 92&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;DB 2F E5 8C 01 21 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 83 BE F2 8F F3 AC F3 A0 B1&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;6A DD 71 31 01 23 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 83 5E A0 57 A1 72 A1 7E F0&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;6A 3D 23 09 01 25 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 6E C8 AD 69 AC 4E AC 42 D1&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;87 AB C3 A1 01 27 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;A5 00 08 C7 33 A1 2C A0 05 A0 09 FC&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;2E 50 66 1F 01 29 00 0C&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= External links =&lt;br /&gt;
* [https://www.broadcom.com/products/NFC/NFC-Solutions/BCM2079x-Family BCM2079x brief on Broadcom&#039;s website]&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=IR_Services&amp;diff=12392</id>
		<title>IR Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=IR_Services&amp;diff=12392"/>
		<updated>2015-04-16T07:52:10Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
= IR Service &amp;quot;ir:u&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:Initialize|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:Shutdown|Shutdown]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030042&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:StartSendTransfer|StartSendTransfer]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:WaitSendTransfer|WaitSendTransfer]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000500C2&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:StartRecvTransfer|StartRecvTransfer]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:WaitRecvTransfer|WaitRecvTransfer]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:GetRecvTransferCount|GetRecvTransferCount]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:GetSendState|GetSendState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090040&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:SetBitRate|SetBitRate]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:GetBitRate|GetBitRate]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0040&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:SetIRLEDState|SetIRLEDState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:GetIRLEDRecvState|GetIRLEDRecvState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:GetSendFinishedEvent|GetSendFinishedEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:GetRecvFinishedEvent|GetRecvFinishedEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:GetTransferState|GetTransferState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| GetErrorStatus&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110040&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:SetSleepModeActive|SetSleepModeActive]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:SetSleepModeState|SetSleepModeState]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= IR Service &amp;quot;ir:USER&amp;quot; =&lt;br /&gt;
See [[ir:USER]]&lt;br /&gt;
&lt;br /&gt;
= IR Service &amp;quot;ir:rst&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system-version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| [[IRRST:GetHandles|GetHandles]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020080&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| [[IRRST:Initialize|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| [[IRRST:Shutdown|Shutdown]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| This writes an unknown u8 to index-word cmdreply[2], from data loaded from an I2C device register.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| This writes an unknown u8 from IR-module state to index-word cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| This writes two unknown u8 fields from IR-module state to index-word cmdreply[2] and cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070080&lt;br /&gt;
| [[9.0.0-20]]&lt;br /&gt;
| (u8 unk0, u8 unk1) ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| [[9.0.0-20]]&lt;br /&gt;
| (u8 unk0, u8 unk1) ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| [[9.0.0-20]]&lt;br /&gt;
| This writes two unknown u8 fields to index-word cmdreply[2] and cmdreply[3].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This service was added with [[8.0.0-18]]. Unlike the other IR services, this uses [[I2C]] deviceid 17(this deviceid isn&#039;t actually handled by the [[8.0.0-18]] I2C module). This is for the additional [[New 3DS]] HID hardware, this HID data is stored in [[IRRST_Shared_Memory|shared-memory]]. Even with [[9.0.0-20]] IR module still registers+handles this service on both Old3DS+New3DS.&lt;br /&gt;
&lt;br /&gt;
=IR Services=&lt;br /&gt;
Only one session(two sessions starting with [[8.0.0-18]]) to any of these services can be open at a time, thus only one/two process(es) can use any of these services at once. These services interface with hardware services gpio::IR and i2c::IR. The i2c::IR service is used for sending/receiving data.&lt;br /&gt;
&lt;br /&gt;
IRU is for regular IR comms. IRUSER uses a custom IR protocol(above the physical layer). Both of these services use IrDA-SIR. The IR hardware seems to only support IrDA-SIR, other physical protocols such as the one for TV-remotes are not supported(going by the datasheet linked [[Hardware|here]] for a different IC at least).&lt;br /&gt;
&lt;br /&gt;
The protocol used with IRUSER involves encryption(?) implemented in software. IRUSER is used for the [[Circle Pad Pro]]. This same IRUSER service uses the New3DS HID hardware when running on New3DS(note that the main service for New3DS HID is ir:rst).&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Ir:USER&amp;diff=12391</id>
		<title>Ir:USER</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Ir:USER&amp;diff=12391"/>
		<updated>2015-04-16T07:48:33Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This service was added with [[2.0.0-2]]. It employs a custom packet format with obfuscation and error detection.&lt;br /&gt;
&lt;br /&gt;
= Command set =&lt;br /&gt;
When sending data, SendIrnop is used when the size is &amp;lt;=0xFC, otherwise SendIrnopLarge is used.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010182&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| InitializeIrnop&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| FinalizeIrnop&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| ClearReceiveBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| ClearSendBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x0005....&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| WaitConnection&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| RequireConnection (u8 input)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0007....&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| AutoConnection&lt;br /&gt;
|-&lt;br /&gt;
| 0x0008....&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| AnyConnection&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| Disconnect&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| GetReceiveEvent (writes event handle to cmdreply[3])&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| GetSendEvent (writes event handle to cmdreply[3])&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| GetConnectionStatusEvent (writes event handle to cmdreply[3])&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0042&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| SendIrnop (u32 size, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0042&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| SendIrnopLarge (u32 size, ((Size&amp;lt;&amp;lt;8) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 10), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F....&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| ReceiveIrnop&lt;br /&gt;
|-&lt;br /&gt;
| 0x0010....&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| ReceiveIrnopLarge&lt;br /&gt;
|-&lt;br /&gt;
| 0x0011....&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| GetLatestReceiveErrorResult&lt;br /&gt;
|-&lt;br /&gt;
| 0x0012....&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| GetLatestSendErrorResult&lt;br /&gt;
|-&lt;br /&gt;
| 0x0013....&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| GetConnectionStatus&lt;br /&gt;
|-&lt;br /&gt;
| 0x0014....&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| GetTryingToConnectStatus&lt;br /&gt;
|-&lt;br /&gt;
| 0x0015....&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| GetReceiveSizeFreeAndUsed&lt;br /&gt;
|-&lt;br /&gt;
| 0x0016....&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| GetSendSizeFreeAndUsed&lt;br /&gt;
|-&lt;br /&gt;
| 0x0017....&lt;br /&gt;
| [[2.2.0-X]]&lt;br /&gt;
| GetConnectionRole&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180182&lt;br /&gt;
| [[2.2.0-X]]&lt;br /&gt;
| InitializeIrnopShared (u32, u32, u32, u32, u32, u8, 0, handle)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190040&lt;br /&gt;
| [[2.2.0-X]]&lt;br /&gt;
| ReleaseReceivedData (32bit_value input)&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0040&lt;br /&gt;
| [[2.2.0-X]]&lt;br /&gt;
| SetOwnMachineId (u8 input)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Protocol description =&lt;br /&gt;
Packets are sent using IrDA-SIR, with a 8N1 encoding (eight data bits, one stop bit, without parity). Each one is formed by a 2-byte header, a varint with the payload size, an obfuscated payload, and trailing error detection byte.&lt;br /&gt;
&lt;br /&gt;
== Packet header ==&lt;br /&gt;
The packet header is fixed and consists in a synchronization byte (0xA5), followed by a unused (possibly RFU) zero byte. After these two hardcoded bytes, there&#039;s a varint representing the payload size, which may use one byte or two, depending on the how big the payload is.&lt;br /&gt;
&lt;br /&gt;
* For payloads with less than 64 bytes, the third byte represents the payload size.&lt;br /&gt;
* For packets with up to 16383 bytes, the size is split in two bytes, with the third byte being the upper 6 bits of the payload size, OR&#039;d with 0x40, and the fourth being the lower eight bits of the payload size&lt;br /&gt;
&lt;br /&gt;
For packets with less than 64 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Sync&lt;br /&gt;
! RFU&lt;br /&gt;
! Size&lt;br /&gt;
|-&lt;br /&gt;
| 0xA5&lt;br /&gt;
| 0x00&lt;br /&gt;
| size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For packets with up to 16383 bytes:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Sync&lt;br /&gt;
! RFU&lt;br /&gt;
! Size (1)&lt;br /&gt;
! Size (2)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA5&lt;br /&gt;
| 0x00&lt;br /&gt;
| (size &amp;gt;&amp;gt; 8) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x40&lt;br /&gt;
| size &amp;amp; 0xFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In C:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;uint8_t * setPacketHeader(uint8_t * buffer, size_t payloadSize) {&lt;br /&gt;
	assert(payloadSize &amp;lt; 16384);&lt;br /&gt;
&lt;br /&gt;
	buffer[0] = 0xA5;&lt;br /&gt;
	buffer[1] = 0x00;&lt;br /&gt;
&lt;br /&gt;
	if (payloadSize &amp;lt; 64) {&lt;br /&gt;
		buffer[2] = payloadSize;&lt;br /&gt;
		buffer += 3;&lt;br /&gt;
	} else {&lt;br /&gt;
		buffer[2] = 0x40 | (payloadSize &amp;gt;&amp;gt; 8);&lt;br /&gt;
		buffer[3] = payloadSize;&lt;br /&gt;
		buffer += 4;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return buffer;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Payload ==&lt;br /&gt;
The payload is obfuscated using a XOR-based encryption. In C:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;void payloadObfuscate(const void * voidplain, void * voidcipher, size_t size) {&lt;br /&gt;
	uint16_t * plain = (uint16_t *) voidplain;&lt;br /&gt;
	uint16_t * cipher = (uint16_t *) voidcipher;&lt;br /&gt;
	size_t halfCount = size / sizeof(uint16_t);&lt;br /&gt;
&lt;br /&gt;
	uint16_t xorval = htobe16(0xE963);&lt;br /&gt;
	size_t i;&lt;br /&gt;
&lt;br /&gt;
	for (i = 0; i &amp;lt; halfCount; i++) {&lt;br /&gt;
		xorval ^= plain[i];&lt;br /&gt;
		cipher[i] = xorval;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void payloadDeobfuscate(const void * voidcipher, void * voidplain, size_t size) {&lt;br /&gt;
	uint16_t * cipher = (uint16_t *) voidcipher;&lt;br /&gt;
	uint16_t * plain = (uint16_t *) voidplain;&lt;br /&gt;
	size_t halfCount = size / sizeof(uint16_t);&lt;br /&gt;
&lt;br /&gt;
	if (halfCount) {&lt;br /&gt;
		size_t i;&lt;br /&gt;
		for (i = halfCount - 1; i &amp;gt; 0; i--) {&lt;br /&gt;
			plain[i] = cipher[i] ^ cipher[i - 1];&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		plain[0] = cipher[0] ^ htobe16(0xE963);&lt;br /&gt;
	}&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Error detection ==&lt;br /&gt;
The trailing error detection byte is calculated using [[CRC-8-CCITT]] &amp;lt;b&amp;gt;over the whole packet&amp;lt;/b&amp;gt; (both the header and the payload)&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12388</id>
		<title>NFC adapter</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12388"/>
		<updated>2015-04-16T07:09:27Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo NFC adapter is an upcoming external device which adds NFC capabilities for [[amiibo]]s to old Nintendo 3DS and Nintendo 2DS consoles, using the infrared port on the back of the console.&lt;br /&gt;
&lt;br /&gt;
[[File:150217nfcreader-640x360.jpg|thumb|right|250px|Media preview, as released by Nintendo]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Technical details ==&lt;br /&gt;
Based on analysis of the [[fangate_updater.bin]] file, which is part of the old Nintendo 3DS operating system since [[9.3.0-21]] and contains the firmware running on the external adapter; and analysis of the [[NFC Services]] running on old 3DS.&lt;br /&gt;
&lt;br /&gt;
* SOC inside the adapter: Broadcom BCM20791B1&lt;br /&gt;
* CPU: ARM Cortex M0&lt;br /&gt;
* Communications: infrared, with [[ir:USER]] running on the console. Uses obfuscated payloads. Baud rate is 115200 bps.&lt;br /&gt;
&lt;br /&gt;
Memory map:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x08008000&lt;br /&gt;
| 256KB?&lt;br /&gt;
| Firmware ([[fangate_updater.bin]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 128KB?&lt;br /&gt;
| RAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x40023C00&lt;br /&gt;
| 0x0000001C&lt;br /&gt;
| FLASH ROM control&lt;br /&gt;
|-&lt;br /&gt;
| 0xE000ED00&lt;br /&gt;
| ?&lt;br /&gt;
| System control block &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [https://www.broadcom.com/products/NFC/NFC-Solutions/BCM2079x-Family BCM2079x brief on Broadcom&#039;s website]&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12380</id>
		<title>NFC adapter</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12380"/>
		<updated>2015-04-15T21:58:34Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo NFC adapter is an upcoming external device which adds NFC capabilities for [[amiibo]]s to old Nintendo 3DS and Nintendo 2DS consoles, using the infrared port on the back of the console.&lt;br /&gt;
&lt;br /&gt;
[[File:150217nfcreader-640x360.jpg|thumb|right|250px|Media preview, as released by Nintendo]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Technical details ==&lt;br /&gt;
Based on analysis of the [[fangate_updater.bin]] file, which is part of the old Nintendo 3DS operating system since [[9.3.0-21]] and contains the firmware running on the external adapter; and analysis of the [[NFC Services]] running on old 3DS.&lt;br /&gt;
&lt;br /&gt;
* SOC inside the adapter: Broadcom BCM20791B1&lt;br /&gt;
* CPU: ARM Cortex M0&lt;br /&gt;
* Communications: infrared, with [[ir:USER]] running on the console. Uses encrypted payloads. Baud rate is 115200 bps.&lt;br /&gt;
&lt;br /&gt;
Memory map:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x08008000&lt;br /&gt;
| 256KB?&lt;br /&gt;
| Firmware ([[fangate_updater.bin]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 128KB?&lt;br /&gt;
| RAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x40023C00&lt;br /&gt;
| 0x0000001C&lt;br /&gt;
| FLASH ROM control&lt;br /&gt;
|-&lt;br /&gt;
| 0xE000ED00&lt;br /&gt;
| ?&lt;br /&gt;
| System control block &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [https://www.broadcom.com/products/NFC/NFC-Solutions/BCM2079x-Family BCM2079x brief on Broadcom&#039;s website]&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=CRC-8-CCITT&amp;diff=12379</id>
		<title>CRC-8-CCITT</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=CRC-8-CCITT&amp;diff=12379"/>
		<updated>2015-04-15T21:55:19Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: Created page with &amp;quot;CRC-8-CCITT is a fast error detection algorithm. It&amp;#039;s a standard CRC-8, with polynomial x⁸+x²+x+1. See the [http://en.wikipedia.org/wiki/Cyclic_redundancy_check Wikipedia arti...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CRC-8-CCITT is a fast error detection algorithm. It&#039;s a standard CRC-8, with polynomial x⁸+x²+x+1. See the [http://en.wikipedia.org/wiki/Cyclic_redundancy_check Wikipedia article on CRC] for more information.&lt;br /&gt;
&lt;br /&gt;
== Usage on the 3DS ==&lt;br /&gt;
On the 3DS operating system, the CRC-8-CCITT is used for:&lt;br /&gt;
* Error detection on [[ir:USER]] communications&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
Now follows a public domain implementation of CRC-8-CCITT, as used by the 3DS:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
// crc8.h&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
uint8_t crc8ccitt(const void * data, size_t size);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;// crc8.c&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;crc8.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
static const uint8_t CRC_TABLE[256] = {&lt;br /&gt;
    0x00, 0x07, 0x0E, 0x09, 0x1C, 0x1B, 0x12, 0x15,&lt;br /&gt;
    0x38, 0x3F, 0x36, 0x31, 0x24, 0x23, 0x2A, 0x2D,&lt;br /&gt;
    0x70, 0x77, 0x7E, 0x79, 0x6C, 0x6B, 0x62, 0x65,&lt;br /&gt;
    0x48, 0x4F, 0x46, 0x41, 0x54, 0x53, 0x5A, 0x5D,&lt;br /&gt;
    0xE0, 0xE7, 0xEE, 0xE9, 0xFC, 0xFB, 0xF2, 0xF5,&lt;br /&gt;
    0xD8, 0xDF, 0xD6, 0xD1, 0xC4, 0xC3, 0xCA, 0xCD,&lt;br /&gt;
    0x90, 0x97, 0x9E, 0x99, 0x8C, 0x8B, 0x82, 0x85,&lt;br /&gt;
    0xA8, 0xAF, 0xA6, 0xA1, 0xB4, 0xB3, 0xBA, 0xBD,&lt;br /&gt;
    0xC7, 0xC0, 0xC9, 0xCE, 0xDB, 0xDC, 0xD5, 0xD2,&lt;br /&gt;
    0xFF, 0xF8, 0xF1, 0xF6, 0xE3, 0xE4, 0xED, 0xEA,&lt;br /&gt;
    0xB7, 0xB0, 0xB9, 0xBE, 0xAB, 0xAC, 0xA5, 0xA2,&lt;br /&gt;
    0x8F, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9D, 0x9A,&lt;br /&gt;
    0x27, 0x20, 0x29, 0x2E, 0x3B, 0x3C, 0x35, 0x32,&lt;br /&gt;
    0x1F, 0x18, 0x11, 0x16, 0x03, 0x04, 0x0D, 0x0A,&lt;br /&gt;
    0x57, 0x50, 0x59, 0x5E, 0x4B, 0x4C, 0x45, 0x42,&lt;br /&gt;
    0x6F, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7D, 0x7A,&lt;br /&gt;
    0x89, 0x8E, 0x87, 0x80, 0x95, 0x92, 0x9B, 0x9C,&lt;br /&gt;
    0xB1, 0xB6, 0xBF, 0xB8, 0xAD, 0xAA, 0xA3, 0xA4,&lt;br /&gt;
    0xF9, 0xFE, 0xF7, 0xF0, 0xE5, 0xE2, 0xEB, 0xEC,&lt;br /&gt;
    0xC1, 0xC6, 0xCF, 0xC8, 0xDD, 0xDA, 0xD3, 0xD4,&lt;br /&gt;
    0x69, 0x6E, 0x67, 0x60, 0x75, 0x72, 0x7B, 0x7C,&lt;br /&gt;
    0x51, 0x56, 0x5F, 0x58, 0x4D, 0x4A, 0x43, 0x44,&lt;br /&gt;
    0x19, 0x1E, 0x17, 0x10, 0x05, 0x02, 0x0B, 0x0C,&lt;br /&gt;
    0x21, 0x26, 0x2F, 0x28, 0x3D, 0x3A, 0x33, 0x34,&lt;br /&gt;
    0x4E, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5C, 0x5B,&lt;br /&gt;
    0x76, 0x71, 0x78, 0x7F, 0x6A, 0x6D, 0x64, 0x63,&lt;br /&gt;
    0x3E, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2C, 0x2B,&lt;br /&gt;
    0x06, 0x01, 0x08, 0x0F, 0x1A, 0x1D, 0x14, 0x13,&lt;br /&gt;
    0xAE, 0xA9, 0xA0, 0xA7, 0xB2, 0xB5, 0xBC, 0xBB,&lt;br /&gt;
    0x96, 0x91, 0x98, 0x9F, 0x8A, 0x8D, 0x84, 0x83,&lt;br /&gt;
    0xDE, 0xD9, 0xD0, 0xD7, 0xC2, 0xC5, 0xCC, 0xCB,&lt;br /&gt;
    0xE6, 0xE1, 0xE8, 0xEF, 0xFA, 0xFD, 0xF4, 0xF3&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
uint8_t crc8ccitt(const void * data, size_t size) {&lt;br /&gt;
	uint8_t val = 0;&lt;br /&gt;
&lt;br /&gt;
	uint8_t * pos = (uint8_t *) data;&lt;br /&gt;
	uint8_t * end = pos + size;&lt;br /&gt;
&lt;br /&gt;
	while (pos &amp;lt; end) {&lt;br /&gt;
		val = CRC_TABLE[val ^ *pos];&lt;br /&gt;
		pos++;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return val;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12307</id>
		<title>NFC adapter</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12307"/>
		<updated>2015-04-13T16:25:57Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo NFC adapter is an upcoming external device which adds NFC capabilities for [[amiibo]]s to old Nintendo 3DS and Nintendo 2DS consoles, using the infrared port on the back of the console.&lt;br /&gt;
&lt;br /&gt;
[[File:150217nfcreader-640x360.jpg|thumb|right|250px|Media preview, as released by Nintendo]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Technical details ==&lt;br /&gt;
Based on analysis of the [[fangate_updater.bin]] file, which is part of the old Nintendo 3DS operating system since [[9.3.0-21]] and contains the firmware running on the external adapter; and analysis of the [[NFC Services]] running on old 3DS.&lt;br /&gt;
&lt;br /&gt;
* SOC inside the adapter: Broadcom BCM20791B1&lt;br /&gt;
* CPU: ARM Cortex M0&lt;br /&gt;
* Communications: infrared, with [[ir:USER]] running on the console. Uses encrypted payloads.&lt;br /&gt;
&lt;br /&gt;
Memory map:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x08008000&lt;br /&gt;
| 256KB?&lt;br /&gt;
| Firmware ([[fangate_updater.bin]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 128KB?&lt;br /&gt;
| RAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x40023C00&lt;br /&gt;
| 0x0000001C&lt;br /&gt;
| FLASH ROM control&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [https://www.broadcom.com/products/NFC/NFC-Solutions/BCM2079x-Family BCM2079x brief on Broadcom&#039;s website]&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Peripherals&amp;diff=12306</id>
		<title>Peripherals</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Peripherals&amp;diff=12306"/>
		<updated>2015-04-13T16:05:31Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
A list of 3DS system and accessory model numbers.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Code&lt;br /&gt;
!  Peripheral&lt;br /&gt;
|-&lt;br /&gt;
|  CTR-001 (region code)&lt;br /&gt;
|  Retail 3DS unit (EUR/JPN/USA/KOR/CHN/TWN)&lt;br /&gt;
|- &lt;br /&gt;
|  CTR-001(-01) (region code)&lt;br /&gt;
|  Debug 3DS test unit (EUR/USA/JPN/AUS)&lt;br /&gt;
|- &lt;br /&gt;
|  CTR-001(-04) (region code)&lt;br /&gt;
|  Kiosk 3DS unit (only &#039;EUR&#039; has been spotted)&lt;br /&gt;
|- &lt;br /&gt;
|  CTR-001(-06)&lt;br /&gt;
|  Louvre &#039;Audio Guide&#039; 3DS unit (these units are &#039;special&#039; debug units)&lt;br /&gt;
|- &lt;br /&gt;
|  CTR-002&lt;br /&gt;
|  AR cards pack&lt;br /&gt;
|- &lt;br /&gt;
|  CTR-003&lt;br /&gt;
|  Battery pack&lt;br /&gt;
|- &lt;br /&gt;
|  CTR-004&lt;br /&gt;
|  3DS stylus&lt;br /&gt;
|- &lt;br /&gt;
|  CTR-005&lt;br /&gt;
|  [[Gamecards|Retail game card]]&lt;br /&gt;
|- &lt;br /&gt;
|  CTR-005(-01)&lt;br /&gt;
|  Developer flash card (same shape as a regular CTR-005)&lt;br /&gt;
|- &lt;br /&gt;
|  CTR-006&lt;br /&gt;
|  Game box&lt;br /&gt;
|- &lt;br /&gt;
|  CTR-006 (EUR)&lt;br /&gt;
|  European game box (slightly thicker than a regular CTR-006)&lt;br /&gt;
|- &lt;br /&gt;
|  CTR-007&lt;br /&gt;
|  Charging cradle&lt;br /&gt;
|- &lt;br /&gt;
|  CTR-008&lt;br /&gt;
|  Developer flash card (is large and clunky and has replaceable save flash)&lt;br /&gt;
|- &lt;br /&gt;
|  CTR-009&lt;br /&gt;
|  [[Circle Pad Pro]]&lt;br /&gt;
|- &lt;br /&gt;
|  CTR-010&lt;br /&gt;
|  3DS stand (bundled with [http://en.wikipedia.org/wiki/Kid_Icarus:_Uprising Kid Icarus: Uprising])&lt;br /&gt;
|-&lt;br /&gt;
|  CTR-???&lt;br /&gt;
|  [[NFC adapter]]&lt;br /&gt;
|- &lt;br /&gt;
|  SPR-001 (region code)&lt;br /&gt;
|  Retail 3DS XL unit (EUR/JPN/USA/KOR/CHN/TWN)&lt;br /&gt;
|- &lt;br /&gt;
|  SPR-001(-01)&lt;br /&gt;
|  Debug 3DS XL test unit&lt;br /&gt;
|- &lt;br /&gt;
|  SPR-004&lt;br /&gt;
|  3DS XL stylus&lt;br /&gt;
|- &lt;br /&gt;
|  SPR-009&lt;br /&gt;
|  [[Circle Pad Pro]] LL/XL&lt;br /&gt;
|- &lt;br /&gt;
|  WAP-002&lt;br /&gt;
|  3DS (XL) AC adapter&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Peripherals&amp;diff=12305</id>
		<title>Peripherals</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Peripherals&amp;diff=12305"/>
		<updated>2015-04-13T16:04:49Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
A list of 3DS system and accessory model numbers.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Code&lt;br /&gt;
!  Peripheral&lt;br /&gt;
|-&lt;br /&gt;
|  CTR-001 (region code)&lt;br /&gt;
|  Retail 3DS unit (EUR/JPN/USA/KOR/CHN/TWN)&lt;br /&gt;
|- &lt;br /&gt;
|  CTR-001(-01) (region code)&lt;br /&gt;
|  Debug 3DS test unit (EUR/USA/JPN/AUS)&lt;br /&gt;
|- &lt;br /&gt;
|  CTR-001(-04) (region code)&lt;br /&gt;
|  Kiosk 3DS unit (only &#039;EUR&#039; has been spotted)&lt;br /&gt;
|- &lt;br /&gt;
|  CTR-001(-06)&lt;br /&gt;
|  Louvre &#039;Audio Guide&#039; 3DS unit (these units are &#039;special&#039; debug units)&lt;br /&gt;
|- &lt;br /&gt;
|  CTR-002&lt;br /&gt;
|  AR cards pack&lt;br /&gt;
|- &lt;br /&gt;
|  CTR-003&lt;br /&gt;
|  Battery pack&lt;br /&gt;
|- &lt;br /&gt;
|  CTR-004&lt;br /&gt;
|  3DS stylus&lt;br /&gt;
|- &lt;br /&gt;
|  CTR-005&lt;br /&gt;
|  [[Gamecards|Retail game card]]&lt;br /&gt;
|- &lt;br /&gt;
|  CTR-005(-01)&lt;br /&gt;
|  Developer flash card (same shape as a regular CTR-005)&lt;br /&gt;
|- &lt;br /&gt;
|  CTR-006&lt;br /&gt;
|  Game box&lt;br /&gt;
|- &lt;br /&gt;
|  CTR-006 (EUR)&lt;br /&gt;
|  European game box (slightly thicker than a regular CTR-006)&lt;br /&gt;
|- &lt;br /&gt;
|  CTR-007&lt;br /&gt;
|  Charging cradle&lt;br /&gt;
|- &lt;br /&gt;
|  CTR-008&lt;br /&gt;
|  Developer flash card (is large and clunky and has replaceable save flash)&lt;br /&gt;
|- &lt;br /&gt;
|  CTR-009&lt;br /&gt;
|  [[Circle Pad Pro]]&lt;br /&gt;
|- &lt;br /&gt;
|  CTR-010&lt;br /&gt;
|  3DS stand (bundled with [http://en.wikipedia.org/wiki/Kid_Icarus:_Uprising Kid Icarus: Uprising])&lt;br /&gt;
|- &lt;br /&gt;
|  SPR-001 (region code)&lt;br /&gt;
|  Retail 3DS XL unit (EUR/JPN/USA/KOR/CHN/TWN)&lt;br /&gt;
|- &lt;br /&gt;
|  SPR-001(-01)&lt;br /&gt;
|  Debug 3DS XL test unit&lt;br /&gt;
|- &lt;br /&gt;
|  SPR-004&lt;br /&gt;
|  3DS XL stylus&lt;br /&gt;
|- &lt;br /&gt;
|  SPR-009&lt;br /&gt;
|  [[Circle Pad Pro]] LL/XL&lt;br /&gt;
|- &lt;br /&gt;
|  WAP-002&lt;br /&gt;
|  3DS (XL) AC adapter&lt;br /&gt;
|-&lt;br /&gt;
|  CTR-???&lt;br /&gt;
|  [[NFC adapter]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12304</id>
		<title>NFC adapter</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12304"/>
		<updated>2015-04-13T15:55:55Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo NFC adapter is an upcoming external device which adds NFC capabilities for [[amiibo]]s to old Nintendo 3DS and Nintendo 2DS consoles, using the infrared port on the back of the console.&lt;br /&gt;
&lt;br /&gt;
[[File:150217nfcreader-640x360.jpg|thumb|right|250px|Media preview, as released by Nintendo]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Technical details ==&lt;br /&gt;
Based on analysis of the [[fangate_updater.bin]] file, which is part of the old Nintendo 3DS operating system since [[9.3.0-21]] and contains the firmware running on the external adapter; and analysis of the [[NFC Services]] running on old 3DS.&lt;br /&gt;
&lt;br /&gt;
* SOC inside the adapter: Broadcom BCM20791B1&lt;br /&gt;
* CPU: ARM Cortex M0&lt;br /&gt;
* Communications: infrared, with [[ir:USER]] running on the console. Uses encrypted payloads.&lt;br /&gt;
&lt;br /&gt;
Memory map:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x08008000&lt;br /&gt;
| 256KB?&lt;br /&gt;
| Firmware ([[fangate_updater.bin]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 128KB?&lt;br /&gt;
| RAM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [https://www.broadcom.com/products/NFC/NFC-Solutions/BCM2079x-Family BCM2079x brief on Broadcom&#039;s website]&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12303</id>
		<title>NFC adapter</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12303"/>
		<updated>2015-04-13T15:39:19Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo NFC adapter is an upcoming external device which adds NFC capabilities for [[amiibo]]s to old Nintendo 3DS and Nintendo 2DS consoles, using the infrared port on the back of the console.&lt;br /&gt;
&lt;br /&gt;
[[File:150217nfcreader-640x360.jpg|thumb|right|250px|Media preview, as released by Nintendo]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Technical details ==&lt;br /&gt;
Based on analysis of the [[fangate_updater.bin]] file, which is part of the old Nintendo 3DS operating system since [[9.3.0-21]] and contains the firmware running on the external adapter; and analysis of the [[NFC Services]] running on old 3DS.&lt;br /&gt;
&lt;br /&gt;
* SOC inside the adapter: Broadcom BCM20791B1&lt;br /&gt;
* CPU: ARM Cortex M0&lt;br /&gt;
* Communications: infrared, with [[ir:USER]] running on the console. Uses encrypted payloads.&lt;br /&gt;
&lt;br /&gt;
Memory map:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x08008000&lt;br /&gt;
| 256KB?&lt;br /&gt;
| Firmware ([[fangate_updater.bin]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 32KB?&lt;br /&gt;
| RAM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [https://www.broadcom.com/products/NFC/NFC-Solutions/BCM2079x-Family BCM2079x brief on Broadcom&#039;s website]&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12302</id>
		<title>NFC adapter</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_adapter&amp;diff=12302"/>
		<updated>2015-04-13T15:38:36Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: Created page with &amp;quot;The Nintendo NFC adapter is an upcoming external device which adds NFC capabilities for amiibos to old Nintendo 3DS and Nintendo 2DS consoles, using the infrared port on the ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo NFC adapter is an upcoming external device which adds NFC capabilities for [[amiibo]]s to old Nintendo 3DS and Nintendo 2DS consoles, using the infrared port on the back of the console.&lt;br /&gt;
&lt;br /&gt;
[[File:150217nfcreader-640x360.jpg|thumb|right|250px|Media preview, as released by Nintendo]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Technical details ==&lt;br /&gt;
Based on analysis of the [[fangate_updater.bin]] file, which is part of the old Nintendo 3DS operating system since [[9.3.0-21]] and contains the firmware running on the external adapter; and analysis of the [[NFC Services]] running on old 3DS.&lt;br /&gt;
&lt;br /&gt;
* SOC inside the adapter: Broadcom BCM20791B1&lt;br /&gt;
* CPU: ARM Cortex M0&lt;br /&gt;
* Communications: infrared, with [[ir:USER]] running on the console. Uses encrypted payloads.&lt;br /&gt;
&lt;br /&gt;
Memory map:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x08008000&lt;br /&gt;
| 256KB?&lt;br /&gt;
| Firmware&lt;br /&gt;
|-&lt;br /&gt;
| 0x20000000&lt;br /&gt;
| 32KB?&lt;br /&gt;
| RAM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [https://www.broadcom.com/products/NFC/NFC-Solutions/BCM2079x-Family BCM2079x brief on Broadcom&#039;s website]&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Memory_map&amp;diff=12301</id>
		<title>Memory map</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Memory_map&amp;diff=12301"/>
		<updated>2015-04-13T15:32:10Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: Redirected page to Memory layout&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Memory layout]]&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Ir:USER&amp;diff=12300</id>
		<title>Ir:USER</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Ir:USER&amp;diff=12300"/>
		<updated>2015-04-13T15:30:54Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: Redirected page to IR Services#IR Service &amp;quot;ir:USER&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[IR Services#IR Service &amp;quot;ir:USER&amp;quot;]]&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Fangate_updater.bin&amp;diff=12299</id>
		<title>Fangate updater.bin</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Fangate_updater.bin&amp;diff=12299"/>
		<updated>2015-04-13T15:23:43Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: Redirected page to Fangate updater#fangate updater.bin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Fangate updater#fangate_updater.bin]]&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=File:150217nfcreader-640x360.jpg&amp;diff=12298</id>
		<title>File:150217nfcreader-640x360.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=File:150217nfcreader-640x360.jpg&amp;diff=12298"/>
		<updated>2015-04-13T15:16:16Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Title_list&amp;diff=12175</id>
		<title>Title list</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Title_list&amp;diff=12175"/>
		<updated>2015-03-30T13:16:32Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo 3DS utilizes a similar title-based organization as seen in the Wii and DSi platforms. The update server is located  [http://nus.cdn.c.shop.nintendowifi.net/ccs/download/ here]. When using SSL, the update/shop servers must be accessed via SSLv3.&lt;br /&gt;
&lt;br /&gt;
The organization of Title IDs has not been documented fully yet. Region info isn&#039;t stored in title IDs however there does appear to be evidence that the regions are sequential, similar to how Wii System Menu Updates are ordered: JPN USA EUR KOR and CHN (introduced with the DSi). 3DS has one additional region: TWN.&lt;br /&gt;
&lt;br /&gt;
Note: The terms &#039;Title ID&#039;, &#039;Partition ID&#039; and &#039;Media ID&#039; are interchangeable.&lt;br /&gt;
&lt;br /&gt;
The 3DS retrieves system [[CommonETicket|tickets]] with SOAP request GetSystemCommonETicket, instead of directly downloading the cetk with HTTPS. The cetk is still accessible via HTTP, however 3DS doesn&#039;t use direct HTTP for this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TitleID Structure&#039;&#039;&#039;: 0xCCCCABCDLLLLLLRR&lt;br /&gt;
&lt;br /&gt;
* CCCC defines the console &#039;&#039;&#039;Platform&#039;&#039;&#039; (5=WiiU, 4=3DS, 3=DSi, 1=[http://wiibrew.org/wiki/Title_database Wii])&lt;br /&gt;
* ABCD defines the &#039;&#039;&#039;Content Category&#039;&#039;&#039; of the title, Demo, DLPChild, etc.&lt;br /&gt;
* LLLLLL For CTR titles, this is the title&#039;s &#039;&#039;&#039;Unique ID&#039;&#039;&#039;. For TWL converted titles this is in two sections grouped as SSLLLL. SS is the old title identification used by the DSi and is made redundant by &#039;ABCD&#039;. LLLL is the TWL title&#039;s &#039;Unique ID&#039;. There are restrictions on the Unique ID, see below for more info.&lt;br /&gt;
* RR This is the Title ID &#039;&#039;&#039;Variation&#039;&#039;&#039;, and has various uses.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Content Categories&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
This u16 is a collection bit mask flag. Each Category is a group of one or more bit masks.&lt;br /&gt;
&lt;br /&gt;
Specific Bitmask Flags:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Category&lt;br /&gt;
!  Bitmask&lt;br /&gt;
|-&lt;br /&gt;
|  Normal&lt;br /&gt;
|  0x0&lt;br /&gt;
|-&lt;br /&gt;
|  DlpChild&lt;br /&gt;
|  0x1&lt;br /&gt;
|-&lt;br /&gt;
|  Demo&lt;br /&gt;
|  0x2&lt;br /&gt;
|-&lt;br /&gt;
|  Contents&lt;br /&gt;
|  0x3&lt;br /&gt;
|-&lt;br /&gt;
|  AddOnContents&lt;br /&gt;
|  0x4&lt;br /&gt;
|-&lt;br /&gt;
|  Patch&lt;br /&gt;
|  0x6&lt;br /&gt;
|-&lt;br /&gt;
|  CannotExecution&lt;br /&gt;
|  0x8&lt;br /&gt;
|-&lt;br /&gt;
|  System&lt;br /&gt;
|  0x10&lt;br /&gt;
|-&lt;br /&gt;
|  RequireBatchUpdate&lt;br /&gt;
|  0x20&lt;br /&gt;
|-&lt;br /&gt;
|  NotRequireUserApproval&lt;br /&gt;
|  0x40&lt;br /&gt;
|-&lt;br /&gt;
|  NotRequireRightForMount&lt;br /&gt;
|  0x80&lt;br /&gt;
|-&lt;br /&gt;
|  CanSkipConvertJumpId&lt;br /&gt;
|  0x100&lt;br /&gt;
|-&lt;br /&gt;
|  TWL&lt;br /&gt;
|  0x8000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* TWL Category bit mask are carried over from original TWL category bitmasks (ignoring bit mask 0x8000), so TWL system titles have the bitmask of 0x8001.&lt;br /&gt;
&lt;br /&gt;
* System titles (TWL and CTR) are eligible to be updated during a System Update.&lt;br /&gt;
&lt;br /&gt;
* Bit Mask 0x4000 appears to be reserved, as it renders the &#039;&#039;TWL&#039;&#039; and &#039;&#039;System&#039;&#039; bit masks useless.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unique ID Restrictions&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
For the CTR titles, there appears to be is a correlation between Unique IDs (UID) and 3DS &#039;title types&#039;. For developer titles this is known(shown below), and retail titles *appear* to follow suite. It is unknown if this correlation is enforced on retail units, or if it is just for organisation purposes. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  TITLE TYPE&lt;br /&gt;
!  UNIQUE ID RANGE&lt;br /&gt;
|-&lt;br /&gt;
|  System&lt;br /&gt;
|  0x0 - 0x2FF&lt;br /&gt;
|- &lt;br /&gt;
|  Application&lt;br /&gt;
|  0x300 - 0xF7FFF&lt;br /&gt;
|- &lt;br /&gt;
|  Evaluation&lt;br /&gt;
|  0xF8000 -0xFFFFF&lt;br /&gt;
|- &lt;br /&gt;
|  Prototype*&lt;br /&gt;
|  0xFF000 - 0xFF3FF&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;On the home menu, titles with UIDs within the &#039;Prototype&#039; range, appear on the home menu after install without the gift fanfare.&lt;br /&gt;
&lt;br /&gt;
ProgramID/titleID low bitmask 0xF0000000(uniqueID bitmask 0xF00000) seems to be related to which hardware the title is allowed to run on. 3DS code tends to clear this bitmask when handling programIDs. This bitmask is normally zero. When this is 0x2, this indicates that the title only runs on [[New_3DS]](that is, programID-low 0x20000000 / uniqueID 0x200000).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TitleID Variation&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
This u8 allows enumeration of titles from the same category and unique ID. Common uses are explained below:&lt;br /&gt;
&lt;br /&gt;
* CTR System Titles: The 3DS has two copies of most modules/applets/archives for usage with either the NATIVE_FIRM or SAFE_MODE_FIRM. This is allowed for, by changing the title ID variation of the title to match the core version set by the FIRM it is designed to be used with:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  RR&lt;br /&gt;
!  MEANING&lt;br /&gt;
|- &lt;br /&gt;
|  02&lt;br /&gt;
|  System Title (Core version 0x2)&lt;br /&gt;
|-&lt;br /&gt;
|  03&lt;br /&gt;
|  SAFE_MODE System Title (Core version 0x3)&lt;br /&gt;
|}&lt;br /&gt;
Normally on retail SAFE_MODE ARM11 [[NCCH#CXI|CXI]] titles can&#039;t be launched, since the [[Configuration_Memory|system]] core version doesn&#039;t match the CXI exheader core version.&lt;br /&gt;
&lt;br /&gt;
* Only most non-Normal Applications are known to utilise Title ID variation, this is explained in their respective sections on this page.&lt;br /&gt;
&lt;br /&gt;
* [[3DS Development Unit Software|Dev Menu]] installs CTR Applications with a TitleID variation of 0x02 to the CTR NAND.&lt;br /&gt;
&lt;br /&gt;
* Title ID variation is ignored for TWL titles, this value is carried over from the original TWL title ID and is used for region lock:&lt;br /&gt;
&lt;br /&gt;
=== Versions ===&lt;br /&gt;
&lt;br /&gt;
v## = 0xHHHH = 0bBBBBBBBB...&lt;br /&gt;
&lt;br /&gt;
* The version major,minor and micro can be extracted from the version number by converting the 16 bit number to binary&lt;br /&gt;
* 6 bits : Major&lt;br /&gt;
* 6 bits : Minor&lt;br /&gt;
* 4 bits : Micro (&#039;Build&#039; in some contexts)&lt;br /&gt;
* i.e. v2069 (Taken from 000400DB00017302) = 0b000010 000001 0101 means that the title version is v2.1.5. For reasons unknown, the CVer build, stored in the RomFS of the title, has always been zero (at time of writing), regardless of the CVer build in the TMD. So when predicting the firmware version, this should be taken into account.&lt;br /&gt;
&lt;br /&gt;
NOTE: This Title list is a condensed version, only the System Titles lists are full lists. For a full list of titles on Nintendo&#039;s CDN, see [http://mtheall.com/~mtheall/tmdlist.php here]. The reports/title-lists from [http://yls8.mtheall.com/ninupdates/reports.php here] are automatically obtained from the system update SOAP.&lt;br /&gt;
&lt;br /&gt;
== CTR System Titles ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  System Category&lt;br /&gt;
!  Bit Mask(s)&lt;br /&gt;
!  Category Bit Mask&lt;br /&gt;
|-&lt;br /&gt;
|  Application (SYSTEM_APPLICATION)&lt;br /&gt;
|  Normal&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;System&lt;br /&gt;
|  0x0010&lt;br /&gt;
|-&lt;br /&gt;
|  System Data Archives (SYSTEM_CONTENT)&lt;br /&gt;
|  Contents&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;CannotExecution&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;System&lt;br /&gt;
|  0x001B&lt;br /&gt;
|-&lt;br /&gt;
|  Shared Data Archives (SHARED_CONTENT)&lt;br /&gt;
|  Contents&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;CannotExecution&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;System&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;NotRequireRightForMount&lt;br /&gt;
|  0x009B&lt;br /&gt;
|-&lt;br /&gt;
|  System Data Archives (AUTO_UPDATE_CONTENT)&lt;br /&gt;
|  Contents&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;CannotExecution&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;System&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;NotRequireUserApproval&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;NotRequireRightForMount&lt;br /&gt;
|  0x00DB&lt;br /&gt;
|-&lt;br /&gt;
|  Applet (APPLET)&lt;br /&gt;
|  Normal&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;System&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;RequireBatchUpdate&lt;br /&gt;
|  0x0030&lt;br /&gt;
|-&lt;br /&gt;
|  Module (BASE)&lt;br /&gt;
|  Normal&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;System&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;RequireBatchUpdate&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;CanSkipConvertJumpId&lt;br /&gt;
|  0x0130&lt;br /&gt;
|-&lt;br /&gt;
|  Firmware (FIRMWARE)&lt;br /&gt;
|  Normal&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;CannotExecution&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;System&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;RequireBatchUpdate&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;CanSkipConvertJumpId&lt;br /&gt;
|  0x0138&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 00040010 - System Applications ===&lt;br /&gt;
The versions for CHN, KOR, and TWN are separate from the other regions.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  JPN TIDLow&lt;br /&gt;
!  USA TIDLow&lt;br /&gt;
!  EUR TIDLow&lt;br /&gt;
!  CHN TIDLow&lt;br /&gt;
!  KOR TIDLow&lt;br /&gt;
!  TWN TIDLow&lt;br /&gt;
!  Description&lt;br /&gt;
!  JPN Versions&lt;br /&gt;
!  EUR Versions&lt;br /&gt;
!  USA Versions&lt;br /&gt;
!  CHN Versions&lt;br /&gt;
!  KOR Versions&lt;br /&gt;
!  TWN Versions&lt;br /&gt;
!  Status&lt;br /&gt;
|-&lt;br /&gt;
| 00020000&lt;br /&gt;
| 00021000&lt;br /&gt;
| 00022000&lt;br /&gt;
| 00026000&lt;br /&gt;
| 00027000&lt;br /&gt;
| 00028000&lt;br /&gt;
| [[System Settings]] (mset)&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.0.0-2|v1027]], [[3.0.0-5|v2060]], [[4.0.0-7|v3074]], [[5.0.0-11|v4097]], [[6.0.0-11|v5127]], [[7.0.0-13|v6157]], [[7.2.0-17|v7173]], [[8.1.0-0_New3DS|v8198]]([[8.1.0-0_New3DS]]), [[9.0.0-20|v9224]]&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.0.0-2|v1027]], [[3.0.0-5|v2061]], [[4.0.0-7|v3075]], [[5.0.0-11|v4097]], [[6.0.0-11|v5127]], [[7.0.0-13|v6157]], [[7.2.0-17|v7174]], [[9.0.0-20|v8202]]&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.0.0-2|v1027]], [[3.0.0-5|v2062]], [[4.0.0-7|v3078]], [[5.0.0-11|v4098]], [[6.0.0-11|v5128]], [[7.0.0-13|v6157]], [[7.2.0-17|v7174]], [[9.0.0-20|v8203]]&lt;br /&gt;
| [[4.0.0-7|v8]], [[4.4.0-10|v1024]](CHN-only sysupdate for just mset), [[5.0.0-11|v2049]], [[7.0.0-13|v3075]]&lt;br /&gt;
| [[4.0.0-7|v1026]], [[5.0.0-11|v2049]], [[7.0.0-13|v4098]]&lt;br /&gt;
| [[4.1.0-8|v8]], [[4.2.0-9|v1024]], [[5.0.0-11|v2050]], [[7.0.0-13|v3074]]&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| 00020100&lt;br /&gt;
| 00021100&lt;br /&gt;
| 00022100&lt;br /&gt;
| 00026100&lt;br /&gt;
| 00027100&lt;br /&gt;
| 00028100&lt;br /&gt;
| [[Download Play]] (dlplay)&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.1.0-4|v1026]], [[4.0.0-7|v2051]], [[9.0.0-20|v3072]](Also for [[8.1.0-0_New3DS]])&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.1.0-4|v1026]], [[4.0.0-7|v2051]], [[9.0.0-20|v3073]]&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.1.0-4|v1026]], [[4.0.0-7|v2051]], [[9.0.0-20|v3073]]&lt;br /&gt;
| [[4.0.0-7|v4]]&lt;br /&gt;
| [[4.0.0-7|v1027]]&lt;br /&gt;
| [[4.1.0-8|v4]]&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| 00020200&lt;br /&gt;
| 00021200&lt;br /&gt;
| 00022200&lt;br /&gt;
| 00026200&lt;br /&gt;
| 00027200&lt;br /&gt;
| 00028200&lt;br /&gt;
| [[Activity Log]]&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.0.0-2|v1026]], [[3.0.0-5|v2051]]&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.0.0-2|v1026]], [[3.0.0-5|v2054]], [[7.0.0-13|v2064]]&lt;br /&gt;
| Same as EUR&lt;br /&gt;
| [[4.0.0-7|v3]]&lt;br /&gt;
| [[4.0.0-7|v2]], [[7.0.0-13|v16]]&lt;br /&gt;
| [[4.1.0-8|v2]]&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| 00020300&lt;br /&gt;
| 00021300&lt;br /&gt;
| 00022300&lt;br /&gt;
| 00026300&lt;br /&gt;
| 00027300&lt;br /&gt;
| 00028300&lt;br /&gt;
| [[Health and Safety Information]]&lt;br /&gt;
| [[1.0.0-0|v0]], [[4.0.0-7|v1024]], [[6.0.0-11|v2050]]&lt;br /&gt;
| [[1.0.0-0|v0]], [[3.0.0-5|v1024]], [[4.0.0-7|v2050]], [[6.0.0-11|v3077]]&lt;br /&gt;
| [[1.0.0-0|v0]], [[4.0.0-7|v1026]], [[6.1.0-12U|v2051]]&lt;br /&gt;
| [[4.0.0-7|v5]]&lt;br /&gt;
| [[4.0.0-7|v2]]&lt;br /&gt;
| [[4.1.0-8|v5]]&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| 20020300&lt;br /&gt;
| 20021300&lt;br /&gt;
| 20022300&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| [[New_3DS]] [[Health and Safety Information]]&lt;br /&gt;
| [[8.1.0-0_New3DS|v2]], [[9.3.0-21|v17]]&lt;br /&gt;
| [[8.1.0-0_New3DS|v1]]&lt;br /&gt;
| Same as EUR.&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| 00020400&lt;br /&gt;
| 00021400&lt;br /&gt;
| 00022400&lt;br /&gt;
| 00026400&lt;br /&gt;
| 00027400&lt;br /&gt;
| 00028400&lt;br /&gt;
| [[Nintendo 3DS Camera]] (CtrApp)&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.1.0-4|v16]], [[3.0.0-5|v1038]], [[4.0.0-7|v2048]], [[6.0.0-11|v3073]], [[9.0.0-20|v4097]](Also for [[8.1.0-0_New3DS]])&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.1.0-4|v16]], [[3.0.0-5|v1039]], [[4.0.0-7|v2048]], [[6.0.0-11|v3073]], [[7.0.0-13|v3088]], [[9.0.0-20|v4097]]&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.1.0-4|v16]], [[3.0.0-5|v1039]], [[4.0.0-7|v2048]], [[6.1.0-12U|v3074]], [[7.0.0-13|v3088]], [[9.0.0-20|v4097]]&lt;br /&gt;
| [[4.0.0-7|v3]]&lt;br /&gt;
| [[4.0.0-7|v2]], [[7.0.0-13|v1040]]&lt;br /&gt;
| [[4.1.0-8|v3]]&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| 00020500&lt;br /&gt;
| 00021500&lt;br /&gt;
| 00022500&lt;br /&gt;
| 00026500&lt;br /&gt;
| 00027500&lt;br /&gt;
| 00028500&lt;br /&gt;
| [[Nintendo 3DS Sound]] (CtrApp)&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.1.0-4|v1027]], [[3.0.0-5|v2049]], [[4.0.0-7|v3072]], [[7.0.0-13|v3089]]&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.1.0-4|v1027]], [[3.0.0-5|v2049]], [[4.0.0-7|v3072]], [[7.0.0-13|v3088]]&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.1.0-4|v1027]], [[3.0.0-5|v2049]], [[4.0.0-7|v3072]], [[7.0.0-13|v3088]]&lt;br /&gt;
| [[4.0.0-7|v2]]&lt;br /&gt;
| [[4.0.0-7|v2]], [[7.0.0-13|v16]]&lt;br /&gt;
| [[4.1.0-8|v3]]&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| 00020700&lt;br /&gt;
| 00021700&lt;br /&gt;
| 00022700&lt;br /&gt;
| 00026700&lt;br /&gt;
| 00027700&lt;br /&gt;
| 00028700&lt;br /&gt;
| [[Mii Maker]] (EDIT)&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.0.0-2|v1026]], [[7.0.0-13|v2055]]&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| [[4.0.0-7|v1]]&lt;br /&gt;
| [[4.0.0-7|v1]], [[7.0.0-13|v16]]&lt;br /&gt;
| [[4.1.0-8|v2]]&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| 00020800&lt;br /&gt;
| 00021800&lt;br /&gt;
| 00022800&lt;br /&gt;
| 00026800&lt;br /&gt;
| 00027800&lt;br /&gt;
| 00028800&lt;br /&gt;
| [[StreetPass Mii Plaza]] (MEET)&lt;br /&gt;
| [[1.0.0-0|v0]], v1027, [[2.1.0-4|v2048]], [[3.0.0-5|v3087]], [[3.0.0-6|v4096]], [[6.0.0-11|v5121]]&lt;br /&gt;
| [[1.0.0-0|v0]], v1027, [[2.1.0-4|v2048]], [[3.0.0-5|v3087]], [[3.0.0-6|v4096]], [[6.0.0-11|v5122]]&lt;br /&gt;
| [[1.0.0-0|v0]], v1027, [[2.1.0-4|v2048]], [[3.0.0-5|v3087]], [[3.0.0-6|v4096]], [[6.1.0-12U|v5124]], [[7.0.0-13|v5136]]&lt;br /&gt;
| [[4.0.0-7|v0]], [[4.4.0-10|v4096]]&lt;br /&gt;
| [[4.0.0-7|v1]], [[4.4.0-10|v4096]], [[7.0.0-13|v5120]]&lt;br /&gt;
| [[4.1.0-8|v1]], [[4.4.0-10|v4096]]&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| 00020900&lt;br /&gt;
| 00021900&lt;br /&gt;
| 00022900&lt;br /&gt;
| N/A&lt;br /&gt;
| 00027900&lt;br /&gt;
| 00028900&lt;br /&gt;
| [[eShop]] (tiger)&lt;br /&gt;
| [[2.0.0-2|v4]], [[2.1.0-3|v1026]], [[3.0.0-5|v2057]], [[4.0.0-7|v3081]], [[4.1.0-8|v4096]], [[4.2.0-9|v5123]], [[4.3.0-10|v6146]], [[5.0.0-11|v7169]], [[7.0.0-13|v8206]], [[7.1.0-14|v9231]], [[7.2.0-17|v10245]], [[8.0.0-18|v11265]], [[8.1.0-19|v12288]], [[9.0.0-20|v13320]], [[9.3.0-21|v15366]], [[9.5.0-22|v16384]]&lt;br /&gt;
| [[2.0.0-2|v4]], [[2.1.0-3|v1026]], [[3.0.0-5|v2058]], [[4.0.0-7|v3081]], [[4.1.0-8|v4096]], [[4.2.0-9|v5123]], [[4.3.0-10|v6146]], [[5.0.0-11|v7171]], [[7.0.0-13|v8206]], [[7.1.0-14|v9231]], [[7.2.0-17|v10245]], [[8.0.0-18|v11265]], [[8.1.0-19|v12288]], [[9.0.0-20|v13321]], [[9.3.0-21|v15366]], [[9.5.0-22|v16384]]&lt;br /&gt;
| [[2.0.0-2|v4]], [[2.1.0-3|v1026]], [[3.0.0-5|v2058]], [[4.0.0-7|v3081]], [[4.1.0-8|v4096]], [[4.2.0-9|v5123]], [[4.3.0-10|v6146]], [[5.0.0-11|v7170]], [[7.0.0-13|v8206]], [[7.1.0-14|v9231]], [[7.2.0-17|v10246]], [[8.0.0-18|v11265]], [[8.1.0-19|v12288]], [[9.0.0-20|v13320]], [[9.3.0-21|v15366]], [[9.5.0-22|v16384]]&lt;br /&gt;
| N/A&lt;br /&gt;
| [[4.0.0-7|v3082]], [[4.1.0-8|v4096]], [[4.2.0-9|v5123]], [[4.3.0-10|v6146]], [[5.0.0-11|v7169]], [[7.0.0-13|v8205]], [[7.1.0-14|v9231]], [[8.1.0-19|v12288]], [[9.0.0-20|v13320]], [[9.3.0-21|v15366]], [[9.5.0-22|v16384]]&lt;br /&gt;
| [[4.1.0-8|v4096]], [[4.2.0-9|v5123]], [[4.3.0-10|v6146]], [[5.0.0-11|v7170]], [[7.0.0-13|v8205]], [[7.1.0-14|v9231]], [[8.1.0-19|v12288]], [[9.3.0-21|v15366]], [[9.5.0-22|v16384]]&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| 00020A00&lt;br /&gt;
| 00021A00&lt;br /&gt;
| 00022A00&lt;br /&gt;
| N/A&lt;br /&gt;
| 00027A00&lt;br /&gt;
| 00028A00&lt;br /&gt;
| [[System Transfer]] (CARDBOARD)&lt;br /&gt;
| [[2.0.0-2|v4]], [[3.0.0-5|v1035]], [[4.0.0-7|v2050]], [[5.0.0-11|v3074]], [[7.0.0-13|v4109]], [[9.0.0-20|v5130]]&lt;br /&gt;
| [[2.0.0-2|v4]], [[3.0.0-5|v1035]], [[4.0.0-7|v2050]], [[5.0.0-11|v3073]], [[7.0.0-13|v4109]], [[9.0.0-20|v5131]]&lt;br /&gt;
| [[2.0.0-2|v4]], [[3.0.0-5|v1035]], [[4.0.0-7|v2051]], [[5.0.0-11|v3073]], [[7.0.0-13|v4109]], [[9.0.0-20|v5131]]&lt;br /&gt;
| N/A&lt;br /&gt;
| [[4.0.0-7|v2]], [[5.0.0-11|v1025]], [[7.0.0-13|v2061]], [[9.0.0-20|v3082]]&lt;br /&gt;
| [[4.1.0-8|v2]], [[5.0.0-11|v1025]], [[7.0.0-13|v2061]]&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| 00020B00&lt;br /&gt;
| 00021B00&lt;br /&gt;
| 00022B00&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| [[Nintendo Zone]] (&amp;quot;Nintendo&amp;quot;)&lt;br /&gt;
| [[1.0.0-0|v0]], [[3.0.0-5|v1034]]&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| 00020D00&lt;br /&gt;
| 00021D00&lt;br /&gt;
| 00022D00&lt;br /&gt;
| 00026D00&lt;br /&gt;
| 00027D00&lt;br /&gt;
| 00028D00&lt;br /&gt;
| [[Face Raiders]]&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.1.0-4|v1028]]&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.1.0-4|v1028]], [[7.0.0-13|v1040]]&lt;br /&gt;
| Same as EUR&lt;br /&gt;
| [[4.0.0-7|v0]]&lt;br /&gt;
| [[4.0.0-7|v0]]&lt;br /&gt;
| [[4.1.0-8|v2]]&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| 20020D00&lt;br /&gt;
| 20021D00&lt;br /&gt;
| 20022D00&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| [[New_3DS]] [[Face Raiders]]&lt;br /&gt;
| [[8.1.0-0_New3DS|v2050]]&lt;br /&gt;
| [[8.1.0-0_New3DS|v2049]]&lt;br /&gt;
| Same as EUR.&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| 00020E00&lt;br /&gt;
| 00021E00&lt;br /&gt;
| 00022E00&lt;br /&gt;
| 00026E00&lt;br /&gt;
| 00027E00&lt;br /&gt;
| 00028E00&lt;br /&gt;
| [[AR Games]] (AR_ACT)&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.1.0-4|v1026]]&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.1.0-4|v1026]], [[7.0.0-13|v1040]]&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.1.0-4|v1027]], [[7.0.0-13|v1040]]&lt;br /&gt;
| [[4.0.0-7|v0]]&lt;br /&gt;
| [[4.0.0-7|v0]], [[7.0.0-13|v16]]&lt;br /&gt;
| [[4.1.0-8|v1]]&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| 00020F00&lt;br /&gt;
| 00021F00&lt;br /&gt;
| 00022F00&lt;br /&gt;
| 00026F00&lt;br /&gt;
| 00027F00&lt;br /&gt;
| 00028F00&lt;br /&gt;
| SAFE_MODE [[System Settings#System Updater|System Updater]] (mset)&lt;br /&gt;
| [[1.0.0-0|v0]], [[3.0.0-5|v1024]], [[6.0.0-11|v2049]]&lt;br /&gt;
| [[1.0.0-0|v0]], [[3.0.0-5|v1024]], [[6.0.0-11|v2050]]&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| [[4.0.0-7|v1]], [[6.0.0-11|v1026]]&lt;br /&gt;
| [[4.0.0-7|v1]]&lt;br /&gt;
| [[4.1.0-8|v1]]&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| 00023000&lt;br /&gt;
| 00024000&lt;br /&gt;
| 00025000&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| Promotional video&lt;br /&gt;
| [[1.1.0-1|v2]], [[2.0.0-2|v2048]]&lt;br /&gt;
| [[1.1.0-1|v&amp;lt;unknown&amp;gt;]], [[2.0.0-2|v2048]]&lt;br /&gt;
| [[1.1.0-1|v0]], [[2.0.0-2|v2048]]&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| Stubbed&lt;br /&gt;
|-&lt;br /&gt;
| 0002BF00&lt;br /&gt;
| 0002C000&lt;br /&gt;
| 0002C100&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| Nintendo Network ID Settings (act)&lt;br /&gt;
| [[7.0.0-13|v14]], [[7.2.0-17|v1029]], [[9.0.0-20|v2051]], [[9.3.0-21|v3072]]&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| Active&lt;br /&gt;
|-&lt;br /&gt;
| 20023100&lt;br /&gt;
| 20024100&lt;br /&gt;
| 20025100&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| [[microSD Management]] (&#039;mcopy&#039;) ([[New_3DS]]-only)&lt;br /&gt;
| [[8.1.0-0_New3DS|v8]], [[9.0.0-20|v1024]]&lt;br /&gt;
| [[8.1.0-0_New3DS|v4]]&lt;br /&gt;
| [[8.1.0-0_New3DS|v5]]&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| Available&lt;br /&gt;
|-&lt;br /&gt;
| 2002C800&lt;br /&gt;
| 2002CF00&lt;br /&gt;
| 2002D000&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| [[New_3DS]]-only, currently stubbed. Placeholder exheader name is &amp;quot;menu&amp;quot;.&lt;br /&gt;
| [[8.1.0-0_New3DS|v2]], [[9.0.0-20|v18]], [[9.3.0-21|v34]]&lt;br /&gt;
| [[8.1.0-0_New3DS|v1]], [[9.3.0-21|v17]]&lt;br /&gt;
| [[8.1.0-0_New3DS|v1]], [[9.3.0-21|v18]]&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| Stubbed&lt;br /&gt;
|-&lt;br /&gt;
| 2002C900&lt;br /&gt;
| 2002D100&lt;br /&gt;
| 2002D200&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| [[New_3DS]]-only, currently stubbed. Placeholder exheader name is &amp;quot;friend&amp;quot;.&lt;br /&gt;
| [[8.1.0-0_New3DS|v1]]&lt;br /&gt;
| Same as JPN.&lt;br /&gt;
| [[8.1.0-0_New3DS|v0]], [[9.3.0-21|v16]]&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| Stubbed&lt;br /&gt;
|-&lt;br /&gt;
| 2002CA00&lt;br /&gt;
| 2002D300&lt;br /&gt;
| 2002D400&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| [[New_3DS]]-only, currently stubbed. Placeholder exheader name is &amp;quot;newslist&amp;quot;.&lt;br /&gt;
| [[8.1.0-0_New3DS|v0]], v1([[Home_Menu|JPN-only]] Oct 2, 2014 &amp;quot;sysupdate&amp;quot;, actually uploaded on 09-29-14. Identical to v0, same TMDs besides title-versions)&lt;br /&gt;
| [[8.1.0-0_New3DS|v2]]&lt;br /&gt;
| [[8.1.0-0_New3DS|v0]]&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| Stubbed&lt;br /&gt;
|-&lt;br /&gt;
| 2002CB00&lt;br /&gt;
| 2002D500&lt;br /&gt;
| 2002D600&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| [[New_3DS]]-only, currently stubbed. Placeholder exheader name is &amp;quot;cherry&amp;quot;.&lt;br /&gt;
| [[8.1.0-0_New3DS|v0]], [[9.0.0-20|v1]]&lt;br /&gt;
| [[8.1.0-0_New3DS|v2]]&lt;br /&gt;
| Same as EUR.&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| Stubbed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;act&amp;quot; application seems to use a web browser with webkit?&lt;br /&gt;
&lt;br /&gt;
Regardless of version, the ExeFS:/.code for mset is the same for USA/EUR/JPN. The [[4.0.0-7]] version of mset([[4.1.0-8]] for TWN) has the same ExeFS:/.code for all regions(JPN, USA, EUR, CHN, KOR, TWN). The [[5.0.0-11]] mset ExeFS:/.code is the same for all regions as well, except for CHN. The [[7.0.0-13]] mset ExeFS:/.code is unique for the following regions: CHN, KOR, and TWN.&lt;br /&gt;
&lt;br /&gt;
=== 0004001B - [[NCCH#CFA|System Data Archives]] ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  TitleID Low&lt;br /&gt;
!  Description&lt;br /&gt;
!  Versions&lt;br /&gt;
|-&lt;br /&gt;
| 00010002&lt;br /&gt;
| [[ClCertA]]&lt;br /&gt;
| [[1.0.0-0|v0]]&lt;br /&gt;
|-&lt;br /&gt;
| 00010702&lt;br /&gt;
| [[NS CFA]]&lt;br /&gt;
| [[3.0.0-5|v0]], [[6.0.0-11|v1028]], [[6.3.0-12|v2048]], [[7.0.0-13|v3073]], [[9.0.0-20|v4096]](also for [[8.1.0-0_New3DS]])&lt;br /&gt;
|-&lt;br /&gt;
| 00010802&lt;br /&gt;
| This CFA only contains a 1-byte &amp;quot;dummy.txt&amp;quot; in the RomFS, which contains &#039;0&#039;.&lt;br /&gt;
| [[6.3.0-12|v0]], [[9.5.0-23|v1024]]&lt;br /&gt;
|-&lt;br /&gt;
| 00018002&lt;br /&gt;
| Same contents as 00010802. Starting with [[7.1.0-15]], the &amp;quot;dummy.txt&amp;quot; file was removed from RomFS: this CFA RomFS now contains web-browser data(similar to 00018102) for NNID / networking, etc.&lt;br /&gt;
| [[7.0.0-13|v14]], [[7.1.0-15|v1025]], [[7.2.0-17|v2055]], [[9.0.0-20|v3078]], [[9.3.0-21|v4096]]&lt;br /&gt;
|-&lt;br /&gt;
| 00018102&lt;br /&gt;
| This contains local web-browser data(html/js, gfx, etc) for the Miiverse Offline-mode.&lt;br /&gt;
| [[7.0.0-13|v11]], [[9.0.0-20|v1025]](also for [[8.1.0-0_New3DS]])&lt;br /&gt;
|-&lt;br /&gt;
| 00018202&lt;br /&gt;
| This contains the webkit/OSS [[CRO0|CROs]] used with the Miiverse applet and the &amp;quot;act&amp;quot; application.&lt;br /&gt;
| [[7.0.0-13|v7]], [[8.1.0-0_New3DS|v1026]]([[8.1.0-0_New3DS]]), [[9.0.0-20|v2050]]&lt;br /&gt;
|-&lt;br /&gt;
| 00019002&lt;br /&gt;
| [[Fangate_updater]]&lt;br /&gt;
| [[9.3.0-21|v2]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 00040030 - Applets===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  JPN TitleIDLow&lt;br /&gt;
!  USA TitleIDLow&lt;br /&gt;
!  EUR TitleIDLow&lt;br /&gt;
!  Description&lt;br /&gt;
!  JPN Versions&lt;br /&gt;
!  USA Versions&lt;br /&gt;
!  EUR Versions&lt;br /&gt;
|-&lt;br /&gt;
| 00008102&lt;br /&gt;
| 00008102&lt;br /&gt;
| 00008102&lt;br /&gt;
| [[NS#Alternate menu|Alternate menu]]&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 00008202&lt;br /&gt;
| 00008F02&lt;br /&gt;
| 00009802&lt;br /&gt;
| [[Home Menu|SYSMENU]] (menu)&lt;br /&gt;
| v0, v1029, v2049, [[2.2.0-X|v3075]], v4111, v5131, [[4.2.0-9|v6146]], [[5.0.0-11|v7172]], [[6.0.0-11|v8198]], [[7.0.0-13|v9230]], [[8.1.0-0_New3DS|v10250]]([[8.1.0-0_New3DS]]), [[9.0.0-20|v13313]], [[9.1.0-20J|v14336]], [[9.2.0-20|v15360]], [[9.3.0-21|v16402]], [[9.4.0-21|v17408]], [[9.5.0-22|v18432]]&lt;br /&gt;
| v0, v1029, v2049, [[2.2.0-X|v3075]], v4111, v5131, [[4.2.0-9|v6146]], [[5.0.0-11|v7172]], [[6.0.0-11|v8198]], [[7.0.0-13|v9230]], [[8.1.0-0_New3DS|v10250]]([[8.1.0-0_New3DS]]), [[9.0.0-20|v11272]], [[9.2.0-20|v12288]], [[9.3.0-21|v13330]], [[9.4.0-21|v14336]], [[9.5.0-22|v15360]]&lt;br /&gt;
| v0, v1029, v2049, [[2.2.0-X|v3075]], v4111, v5131, [[4.2.0-9|v6146]], [[5.0.0-11|v7172]], [[6.0.0-11|v8198]], [[7.0.0-13|v9230]], [[8.1.0-0_New3DS|v10250]]([[8.1.0-0_New3DS]]), [[9.0.0-20|v11272]], [[9.2.0-20|v12288]], [[9.3.0-21|v13330]], [[9.4.0-21|v14336]], [[9.5.0-22|v15360]]&lt;br /&gt;
|-&lt;br /&gt;
| 00008402&lt;br /&gt;
| 00009002&lt;br /&gt;
| 00009902&lt;br /&gt;
| Camera applet used by Home-menu (CtrApp)&lt;br /&gt;
| v0, v1036, [[9.0.0-20|v2049]](Also for [[8.1.0-0_New3DS]])&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| Same as JPN&lt;br /&gt;
|-&lt;br /&gt;
| 00008502&lt;br /&gt;
| 00009102&lt;br /&gt;
| 00009A02&lt;br /&gt;
| Not available on CDN&lt;br /&gt;
| ?&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 00008602&lt;br /&gt;
| 00009202&lt;br /&gt;
| 00009B02&lt;br /&gt;
| Instruction Manual, applet for displaying instruction manuals&lt;br /&gt;
| v0, v1026, v2048, v3072, [[5.0.0-11|v4097]], [[9.0.0-20|v5120]](Also for [[8.1.0-0_New3DS]])&lt;br /&gt;
| Same as JPN&lt;br /&gt;
|-&lt;br /&gt;
| 00008702&lt;br /&gt;
| 00009302&lt;br /&gt;
| 00009C02&lt;br /&gt;
| Game Notes (Cherry)&lt;br /&gt;
| v0, v1026, v2049, [[5.0.0-11|v3073]], [[9.0.0-20|v4096]](Also for [[8.1.0-0_New3DS]])&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| Same as JPN&lt;br /&gt;
|-&lt;br /&gt;
| 00008802&lt;br /&gt;
| 00009402&lt;br /&gt;
| 00009D02&lt;br /&gt;
| [[Internet Browser]] (spider)&lt;br /&gt;
| [[2.0.0-2|v6]], [[2.1.0-4|v1024]], [[4.0.0-7|v2050]], [[5.0.0-11|v3074 (EUR)/v3075(USA,JAP)]], [[7.0.0-13|v3088]], [[7.1.0-16|v4096]], [[9.5.0-23|v5121]]&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| Same as JPN&lt;br /&gt;
|-&lt;br /&gt;
| 20008802&lt;br /&gt;
| 20009402&lt;br /&gt;
| 20009D02&lt;br /&gt;
| [[New_3DS]] [[Internet Browser]] (SKATER)&lt;br /&gt;
| [[8.1.0-0_New3DS|v10]], [[9.3.0-21|v1027]]&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| Same as JPN&lt;br /&gt;
|-&lt;br /&gt;
| 00008A02&lt;br /&gt;
| 00008A02&lt;br /&gt;
| 00008A02&lt;br /&gt;
| [[ErrDisp]]&lt;br /&gt;
| v0, v1025, [[2.2.0-X|v2048]], [[3.0.0-5|v3072]], [[4.0.0-7|v4096]], [[5.0.0-11|v5121]], [[8.0.0-18|v6144]], [[9.0.0-20|v7168]](Also for [[8.1.0-0_New3DS]])&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| Same as JPN&lt;br /&gt;
|-&lt;br /&gt;
| 00008A03&lt;br /&gt;
| 00008A03&lt;br /&gt;
| 00008A03&lt;br /&gt;
| SAFE_MODE [[ErrDisp]]&lt;br /&gt;
| v0&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| Same as JPN&lt;br /&gt;
|-&lt;br /&gt;
| 20008A03&lt;br /&gt;
| 20008A03&lt;br /&gt;
| 20008A03&lt;br /&gt;
| [[New_3DS]] SAFE_MODE [[ErrDisp]]&lt;br /&gt;
| [[8.1.0-0_New3DS|v7169]]&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| Same as JPN&lt;br /&gt;
|-&lt;br /&gt;
| 00008D02&lt;br /&gt;
| 00009602&lt;br /&gt;
| 00009F02&lt;br /&gt;
| Friend List (friend)&lt;br /&gt;
| v0, v1026, [[2.2.0-X|v2051]], v3082, v4099, [[7.0.0-13|v5120]], [[9.0.0-20|v6144]](Also for [[8.1.0-0_New3DS]]) (EUR v6, v1024, v3082, v4099, [[7.0.0-13|v5120]], [[9.0.0-20|v6144]])&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| Same as JPN&lt;br /&gt;
|-&lt;br /&gt;
| 00008E02&lt;br /&gt;
| 00009702&lt;br /&gt;
| 0000A002&lt;br /&gt;
| Notifications (newslist)&lt;br /&gt;
| v0, v1029, v2054, v3075, [[9.0.0-20|v4097]] (EUR v6, v1024, v2054, v3075, [[9.0.0-20|v4097]]) (JPN: ..., [[8.1.0-0_New3DS|v4096]], [[9.0.0-20|v5121]])&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| Same as JPN&lt;br /&gt;
|-&lt;br /&gt;
| 0000C002&lt;br /&gt;
| 0000C802&lt;br /&gt;
| 0000D002&lt;br /&gt;
| Software Keyboard (swkbd)&lt;br /&gt;
| v0, v1026, v2053, [[7.0.0-13|v3072]], [[9.0.0-20|v4096]](Also for [[8.1.0-0_New3DS]])&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| Same as JPN&lt;br /&gt;
|-&lt;br /&gt;
| 0000C003&lt;br /&gt;
| 0000C803&lt;br /&gt;
| 0000D003&lt;br /&gt;
| SAFE_MODE Software Keyboard (swkbd)&lt;br /&gt;
| v0&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| Same as JPN&lt;br /&gt;
|-&lt;br /&gt;
| 2000C003&lt;br /&gt;
| 2000C803&lt;br /&gt;
| 2000D003&lt;br /&gt;
| [[New_3DS]] SAFE_MODE Software Keyboard (swkbd)&lt;br /&gt;
| [[8.1.0-0_New3DS|v0]](for JPN this is v1024)&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| Same as JPN&lt;br /&gt;
|-&lt;br /&gt;
| 0000C102&lt;br /&gt;
| 0000C902&lt;br /&gt;
| 0000D102&lt;br /&gt;
| appletEd&lt;br /&gt;
| v0, v1026, [[9.0.0-20|v2048]](Also for [[8.1.0-0_New3DS]]), [[9.3.0-21|v3077]]&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| Same as JPN&lt;br /&gt;
|-&lt;br /&gt;
| 0000C302&lt;br /&gt;
| 0000CB02&lt;br /&gt;
| 0000D302&lt;br /&gt;
| PNOTE_AP (Photo file selector applet, for SD-card/etc?)&lt;br /&gt;
| v0, v1024, [[8.1.0-0_New3DS|v2049]]([[8.1.0-0_New3DS]]), [[9.0.0-20|v3075]], [[9.3.0-21|v4096]]&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| Same as JPN&lt;br /&gt;
|-&lt;br /&gt;
| 0000C402&lt;br /&gt;
| 0000CC02&lt;br /&gt;
| 0000D402&lt;br /&gt;
| SNOTE_AP (Sound file selector applet, for SD-card/etc?)&lt;br /&gt;
| v0, v3, [[8.0.0-18|v1026]], [[9.0.0-20|v2048]](Also for [[8.1.0-0_New3DS]])&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| Same as JPN&lt;br /&gt;
|-&lt;br /&gt;
| 0000C502&lt;br /&gt;
| 0000C502&lt;br /&gt;
| 0000C502&lt;br /&gt;
| error (This applet displays networking errors, etc)&lt;br /&gt;
| v0, v1026, v2053, v3074, [[8.1.0-0_New3DS|v4096]]([[8.1.0-0_New3DS]]), [[9.0.0-20|v5128]]&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| Same as JPN&lt;br /&gt;
|-&lt;br /&gt;
| 0000C503&lt;br /&gt;
| 0000C503&lt;br /&gt;
| 0000C503&lt;br /&gt;
| SAFE_MODE error applet&lt;br /&gt;
| v0&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| Same as JPN&lt;br /&gt;
|-&lt;br /&gt;
| 2000C503&lt;br /&gt;
| 2000C503&lt;br /&gt;
| 2000C503&lt;br /&gt;
| [[New_3DS]] SAFE_MODE error applet&lt;br /&gt;
| [[8.1.0-0_New3DS|v1024]]&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| Same as JPN&lt;br /&gt;
|-&lt;br /&gt;
| 0000CD02&lt;br /&gt;
| 0000CD02&lt;br /&gt;
| 0000CD02&lt;br /&gt;
| extrapad ([[Circle Pad Pro]] calibration applet)&lt;br /&gt;
| v1, v1026, [[8.1.0-0_New3DS|v2048]]([[8.1.0-0_New3DS]]), [[9.0.0-20|v3073]]&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| Same as JPN&lt;br /&gt;
|-&lt;br /&gt;
| 0000C602&lt;br /&gt;
| 0000CE02&lt;br /&gt;
| 0000D602&lt;br /&gt;
| mint. eShop applet, used by applications for accessing the eShop, for DLC/etc. Also used by the eShop application itself.&lt;br /&gt;
| v5, v1028, [[4.2.0-9|v2050]], [[5.0.0-11|v3072]], [[7.0.0-13|v4109]], [[7.2.0-17|v5125]](v5123 for JPN), [[8.0.0-18|v6145]], [[8.1.0-0_New3DS|v7168]]([[8.1.0-0_New3DS]]), [[9.0.0-20|v8200]], [[9.3.0-21|v9224]]&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| Same as JPN&lt;br /&gt;
|-&lt;br /&gt;
| 0000BC02&lt;br /&gt;
| 0000BD02&lt;br /&gt;
| 0000BE02&lt;br /&gt;
| olv (Miiverse applet)&lt;br /&gt;
| [[7.0.0-13|v14]], [[7.2.0-17|v1024]], [[9.0.0-20|v2048]](Also for [[8.1.0-0_New3DS]]), [[9.3.0-21|v3072]]&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| Same as JPN&lt;br /&gt;
|-&lt;br /&gt;
| 0000F602&lt;br /&gt;
| 0000F602&lt;br /&gt;
| 0000F602&lt;br /&gt;
| memolib (Uses Miiverse, likely the &amp;quot;system library&amp;quot; for Miiverse)&lt;br /&gt;
| [[7.0.0-13|v5]], [[8.1.0-0_New3DS|v1024]]([[8.1.0-0_New3DS]]), [[9.0.0-20|v2050]], [[9.3.0-21|v3072]]&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| Same as JPN&lt;br /&gt;
|-&lt;br /&gt;
| 00008302&lt;br /&gt;
| 00008B02&lt;br /&gt;
| 0000BA02&lt;br /&gt;
| solv3 (Miiverse-posting applet)&lt;br /&gt;
| [[9.0.0-20|v6]]&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| Same as JPN&lt;br /&gt;
|-&lt;br /&gt;
| 00009502&lt;br /&gt;
| 00009E02&lt;br /&gt;
| 0000B902&lt;br /&gt;
| Cabinet ([[amiibo Settings]])&lt;br /&gt;
| [[9.3.0-21|v7]], [[9.6.0-24|v1031]]&lt;br /&gt;
| Same as JPN&lt;br /&gt;
| Same as JPN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Most of these processes are applets. There can only be one application here(Home Menu, Internet Browser, Friend-List, etc) with programID-high 00040030 running at a time. When directly launching one of these 00040030 applications with Home Menu, the Home Menu process will terminate once the process is launched. When returning to Home Menu from that launched process, the Home Menu process is launched again.&lt;br /&gt;
&lt;br /&gt;
All of the above processes use the &amp;quot;SYSTEM&amp;quot; [[SVC|memory-region]].&lt;br /&gt;
&lt;br /&gt;
The ExeFS for Home Menu is exactly the same for USA/EUR/JPN.&lt;br /&gt;
&lt;br /&gt;
The Miiverse applet seems to use a web browser with webkit.&lt;br /&gt;
&lt;br /&gt;
=== 0004009B - [[NCCH#CFA|System Data Archives]] (Shared Archives) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  JPN TitleIDLow&lt;br /&gt;
!  USA TitleIDLow&lt;br /&gt;
!  EUR TitleIDLow&lt;br /&gt;
!  Description&lt;br /&gt;
!  Versions&lt;br /&gt;
|-&lt;br /&gt;
| 00010202&lt;br /&gt;
| 00010202&lt;br /&gt;
| 00010202&lt;br /&gt;
| Probably Mii-related, contains &amp;quot;CFL_Res.dat&amp;quot; in the RomFS.&lt;br /&gt;
| v0&lt;br /&gt;
|-&lt;br /&gt;
| 00010302&lt;br /&gt;
| 00010302&lt;br /&gt;
| 00010302&lt;br /&gt;
| Doesn&#039;t exist on CDN?&lt;br /&gt;
| v0, v2052&lt;br /&gt;
|-&lt;br /&gt;
| 00010402&lt;br /&gt;
| 00010402&lt;br /&gt;
| 00010402&lt;br /&gt;
| Mounted as &amp;quot;area:&amp;quot;, contains Country and Region names&lt;br /&gt;
| v0, v1024, v2050, v3072, [[7.0.0-13|v4098]]&lt;br /&gt;
|-&lt;br /&gt;
| 00010502&lt;br /&gt;
| 00010502&lt;br /&gt;
| 00010502&lt;br /&gt;
| Doesn&#039;t exist on CDN?&lt;br /&gt;
| v0, v1024, v2048&lt;br /&gt;
|-&lt;br /&gt;
| 00010602&lt;br /&gt;
| 00010602&lt;br /&gt;
| 00010602&lt;br /&gt;
| Non-Nintendo TLS Root-CA Certificates (RomFS contains files with filename &amp;quot;CACERT_PUBLIC_CA_&amp;lt;val&amp;gt;.der&amp;quot;, where &amp;lt;val&amp;gt; is 5..8)&lt;br /&gt;
| v2&lt;br /&gt;
|-&lt;br /&gt;
| 00011902&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| v0&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| 00011402&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| v0&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| 00011602&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| v0&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| 00011D02&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| v0&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| 00011E02&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| v0&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 00011202&lt;br /&gt;
| ?&lt;br /&gt;
| v0&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 00011302&lt;br /&gt;
| ?&lt;br /&gt;
| v0&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 00011502&lt;br /&gt;
| ?&lt;br /&gt;
| v0&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 00011702&lt;br /&gt;
| ?&lt;br /&gt;
| v0&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 00011802&lt;br /&gt;
| ?&lt;br /&gt;
| v0&lt;br /&gt;
|-&lt;br /&gt;
| 00011902&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| v0&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 00011B02&lt;br /&gt;
| ?&lt;br /&gt;
| v0&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 00011C02&lt;br /&gt;
| ?&lt;br /&gt;
| v0&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 00011D02&lt;br /&gt;
| ?&lt;br /&gt;
| v0&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 00012102&lt;br /&gt;
| ?&lt;br /&gt;
| v0, v1026, v2051, v3074&lt;br /&gt;
|-&lt;br /&gt;
| 00012202&lt;br /&gt;
| 00012302&lt;br /&gt;
| 00012102&lt;br /&gt;
| ?contains a lists with error strings&lt;br /&gt;
| v1026, v2053, v3073, [[4.2.0-9|v4096]], [[5.0.0-11|v5120]], [[7.0.0-13|v6149]], [[7.2.0-17|v7168]], [[8.0.0-18|v8192]], [[9.0.0-20|v9218]], [[9.3.0-21|v10242]]&lt;br /&gt;
|-&lt;br /&gt;
| 00013202&lt;br /&gt;
| 00013302&lt;br /&gt;
| 00013102&lt;br /&gt;
| Mounted as &amp;quot;eula:&amp;quot;&lt;br /&gt;
| v0, v1024, v2049 USA: v1024, v2051, [[7.0.0-13|v3074]], [[7.2.0-17|v4100]](EUR-only), [[9.0.0-20|v4099]]&lt;br /&gt;
|-&lt;br /&gt;
| 00014002&lt;br /&gt;
| 00014002&lt;br /&gt;
| 00014002&lt;br /&gt;
| JPN/EUR/USA System Font (&amp;quot;font:&amp;quot;)&lt;br /&gt;
| v0&lt;br /&gt;
|-&lt;br /&gt;
| 00014102&lt;br /&gt;
| 00014102&lt;br /&gt;
| 00014102&lt;br /&gt;
| CHN System Font (&amp;quot;font:&amp;quot;)&lt;br /&gt;
| v0, v1024&lt;br /&gt;
|-&lt;br /&gt;
| 00014202&lt;br /&gt;
| 00014202&lt;br /&gt;
| 00014202&lt;br /&gt;
| KOR System Font (&amp;quot;font:&amp;quot;)&lt;br /&gt;
| v0, v1024&lt;br /&gt;
|-&lt;br /&gt;
| 00014302&lt;br /&gt;
| 00014302&lt;br /&gt;
| 00014302&lt;br /&gt;
| TWN System Font (&amp;quot;font:&amp;quot;)&lt;br /&gt;
| v0, v1024&lt;br /&gt;
|-&lt;br /&gt;
| 00015202&lt;br /&gt;
| 00015302&lt;br /&gt;
| 00015102&lt;br /&gt;
| Mounted as &amp;quot;rate:&amp;quot;&lt;br /&gt;
| v0 (EUR: v0, v1024)&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| 00016302&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| v80&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| 00017302&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| v3088&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 000400DB - [[NCCH#CFA|System Data Archives]] ===&lt;br /&gt;
These [[NVer]] titleIDs can be found @ offset 0x320 in every [[CCI]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  EUR TitleIDLow&lt;br /&gt;
!  JPN TitleIDLow&lt;br /&gt;
!  USA TitleIDLow&lt;br /&gt;
!  CHN TitleIDLow&lt;br /&gt;
!  KOR TitleIDLow&lt;br /&gt;
!  TWN TitleIDLow&lt;br /&gt;
!  Description&lt;br /&gt;
!  USA/EUR/JPN Versions&lt;br /&gt;
!  CHN Versions&lt;br /&gt;
!  TWN Versions&lt;br /&gt;
!  KOR Versions&lt;br /&gt;
|-&lt;br /&gt;
| 00010302&lt;br /&gt;
| 00010302&lt;br /&gt;
| 00010302&lt;br /&gt;
| 00010302&lt;br /&gt;
| 00010302&lt;br /&gt;
| 00010302&lt;br /&gt;
| NGWord bad word list&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.0.0-2|v1024]], [[3.0.0-5|v2052]], [[4.0.0-7|v3072]], [[4.3.0-10|v4096]], [[5.0.0-11|v5120]], [[9.0.0-20|v6144]], [[9.3.0-21|v7168]]&lt;br /&gt;
| Same as USA&lt;br /&gt;
| Same as USA&lt;br /&gt;
| Same as USA&lt;br /&gt;
|-&lt;br /&gt;
| 00010502&lt;br /&gt;
| 00010502&lt;br /&gt;
| 00010502&lt;br /&gt;
| 00010502&lt;br /&gt;
| 00010502&lt;br /&gt;
| 00010502&lt;br /&gt;
| [[Nintendo Zone]] hotspot list&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.0.0-2|v1024]], [[3.0.0-5|v2048]], [[4.0.0-7|v3073]], [[4.3.0-10|v4096]], [[4.4.0-10|v5120]], [[4.5.0-10|v6144]], [[5.0.0-11|v7169]], [[6.0.0-11|v8192]], [[6.2.0-12|v9216]], [[7.0.0-13|v10242]], [[7.2.0-17|v11267]], [[8.0.0-18|v12288]], [[9.0.0-20|v14336]], [[9.3.0-21|v15360]]&lt;br /&gt;
| Same as USA&lt;br /&gt;
| Same as USA&lt;br /&gt;
| Same as USA&lt;br /&gt;
|-&lt;br /&gt;
| 00016102&lt;br /&gt;
| 00016202&lt;br /&gt;
| 00016302&lt;br /&gt;
| 00016402&lt;br /&gt;
| 00016502&lt;br /&gt;
| 00016602&lt;br /&gt;
| [[NVer]]&lt;br /&gt;
| [[1.0.0-0|v0]], [[1.1.0-1|v16]], [[2.0.0-2|v32]], [[2.1.0-3|v48]], [[2.1.0-4|v64]], [[3.0.0-5|v80]], [[3.0.0-6|v96]], [[4.0.0-7|v112]],  [[4.1.0-8|v128]], [[4.2.0-9|v144]], [[4.3.0-10|v160]], [[5.0.0-11|v176]], non-USA=[[6.0.0-11|v192]]/USA=[[6.1.0-12U|v192]], [[7.0.0-13|v208]], [[7.1.0-14|v224]], [[7.1.0-15|v240]], [[7.1.0-16|v256]], [[7.2.0-17|v272]], [[8.0.0-18|v288]], [[8.1.0-19|v304]], [[9.0.0-20|v320]], [[9.3.0-21|v336]], [[9.5.0-22|v352]], [[9.5.0-23|v368]]&lt;br /&gt;
| [[4.0.0-7|v113]], [[4.2.0-9|v128]], [[5.0.0-11|v129]], [[7.1.0-16|v130]], [[7.2.0-17|v272]], [[9.5.0-23|v131]]&lt;br /&gt;
| [[4.1.0-8|v114]], [[4.2.0-9|v133]], [[4.3.0-10|v134]], [[5.0.0-11|v136]], [[7.0.0-13|v144]], [[7.1.0-14|v160]] [[7.1.0-16|v192]], [[7.2.0-17|v272]], [[8.0.0-18|v208]], [[8.1.0-19|v224]], [[9.0.0-20|v240]], [[9.5.0-22|v272]], [[9.5.0-23|v288]]&lt;br /&gt;
| [[4.0.0-7|v113]], [[4.1.0-8|v114]], [[4.2.0-9|v133]], [[4.3.0-10|v134]], [[5.0.0-11|v136]], [[7.0.0-13|v160]], [[7.1.0-14|v176]], [[7.1.0-16|v176]], [[7.2.0-17|v272]], [[8.0.0-18|v224]], [[8.1.0-19|v240]], [[9.0.0-20|v256]], [[9.3.0-21|v272]], [[9.5.0-22|v288]], [[9.5.0-23|v304]]&lt;br /&gt;
|-&lt;br /&gt;
| 20016102&lt;br /&gt;
| 20016202&lt;br /&gt;
| 20016302&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| [[New_3DS]] [[NVer]]&lt;br /&gt;
| [[8.1.0-0_New3DS|v0]], [[9.0.0-20|v320]], [[9.3.0-21|v336]], [[9.5.0-22|v352]], [[9.5.0-22|v352]], [[9.5.0-23|v368]]&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 00017102&lt;br /&gt;
| 00017202&lt;br /&gt;
| 00017302&lt;br /&gt;
| 00017402&lt;br /&gt;
| 00017502&lt;br /&gt;
| 00017602&lt;br /&gt;
| [[CVer]]&lt;br /&gt;
| [[1.0.0-0|v1024]], [[1.1.0-1|v1045]], [[2.0.0-2|v2049]], [[2.1.0-3|v2069]], [[2.2.0-X|v2088]] [[3.0.0-5|v3088]], [[4.0.0-7|v4098]], [[4.1.0-8|v4113]], [[4.2.0-9|v4130]], [[4.3.0-10|v4145]], [[4.4.0-10|v4163]], [[4.5.0-10|v4176]], [[5.0.0-11|v5120]], [[5.1.0-11|v5136]], [[6.0.0-11|v6146]], [[6.1.0-11|v6160]], [[6.2.0-12|v6178]], [[6.3.0-12|v6192]], [[7.0.0-13|v7175]], [[7.1.0-14|v7187]], [[7.2.0-17|v7203]], [[8.0.0-18|v8196]], [[8.1.0-18|v8208]], [[8.1.0-0_New3DS|v8215]](8.1.0-0_New3DS), [[9.0.0-20|v9218]], [[9.1.0-20J|v9232]](JPN-only), [[9.2.0-20|v9248]], [[9.3.0-21|v9264]], [[9.4.0-21|v9280]], [[9.5.0-22|v9296]]&lt;br /&gt;
| [[1.0.0-0|v1024]], [[1.1.0-1|v1045]], [[2.0.0-2|v2049]], [[2.1.0-3|v2069]], [[2.2.0-X|v2088]] [[3.0.0-5|v3088]], [[4.0.0-7|v4098]], [[4.1.0-8|v4113]], [[4.2.0-9|v4130]], [[4.3.0-10|v4145]], [[4.4.0-10|v4163]], [[4.5.0-10|v4176]], [[5.0.0-11|v5120]], [[5.1.0-11|v5136]], [[6.0.0-11|v6146]], [[6.1.0-11|v6160]], [[6.2.0-12|v6178]], [[6.3.0-12|v6192]], [[7.0.0-13|v7175]], [[7.1.0-14|v7187]], [[7.2.0-17|v7203]], [[8.0.0-18|v8196]], [[8.1.0-18|v8208]], [[9.0.0-20|v9217]], [[9.3.0-21|v9264]], [[9.5.0-22|v9296]]&lt;br /&gt;
| Same as CHN&lt;br /&gt;
| Same as CHN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 00040130 - System [[Services API|Modules]] ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  TitleID Low&lt;br /&gt;
!  Description&lt;br /&gt;
!  Versions&lt;br /&gt;
|-&lt;br /&gt;
| 00001002&lt;br /&gt;
| sm (Stored in [[FIRM|NATIVE_FIRM]])&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 00001102&lt;br /&gt;
| [[Filesystem services‎|fs]] (Stored in [[FIRM|NATIVE_FIRM]])&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 00001202&lt;br /&gt;
| [[Process Manager Services|pm]] (Stored in [[FIRM|NATIVE_FIRM]])&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 00001302&lt;br /&gt;
| loader (Stored in [[FIRM|NATIVE_FIRM]])&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 00001402&lt;br /&gt;
| pxi (Stored in [[FIRM|NATIVE_FIRM]])&lt;br /&gt;
| N/A&lt;br /&gt;
|-&lt;br /&gt;
| 00001502&lt;br /&gt;
| [[Application Manager Services|AM]] ( Application Manager )&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.0.0-2|v1026]], [[3.0.0-5|v2053]], [[4.0.0-7|v3072]], [[5.0.0-11|v4098]], [[6.0.0-11|v5120]], [[8.0.0-18|v6148]], [[8.1.0-0_New3DS|v7168]]([[8.1.0-0_New3DS]]), [[9.0.0-20|v8192]]&lt;br /&gt;
|-&lt;br /&gt;
| 00001503&lt;br /&gt;
| SAFE_MODE AM&lt;br /&gt;
| [[1.0.0-0|v0]]&lt;br /&gt;
|-&lt;br /&gt;
| 20001503&lt;br /&gt;
| [[New_3DS]] SAFE_MODE AM&lt;br /&gt;
| [[8.1.0-0_New3DS|v7169]]&lt;br /&gt;
|-&lt;br /&gt;
| 00001602&lt;br /&gt;
| Camera&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.0.0-2|v1026]], [[3.0.0-5|v2048]], [[4.0.0-7|v3074]], [[5.0.0-11|v4098]], [[6.0.0-11|v5120]], [[7.1.0-14|v6146]], [[8.0.0-18|v7172]], [[9.0.0-20|v9216]], [[9.3.0-21|v10242]]&lt;br /&gt;
|-&lt;br /&gt;
| 20001602&lt;br /&gt;
| [[New_3DS]] Camera&lt;br /&gt;
| [[8.1.0-0_New3DS|v8200]], [[9.0.0-20|v9218]], [[9.3.0-21|v10242]]&lt;br /&gt;
|-&lt;br /&gt;
| 00001702&lt;br /&gt;
| [[Config Services|Config]] (cfg)&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.0.0-2|v1024]], [[3.0.0-5|v2049]], v3072, [[4.0.0-7|v4096]], [[5.0.0-11|v5122]], [[6.0.0-11|v6145]], [[6.1.0-11|v7168]], [[7.0.0-13|v8196]], [[7.2.0-17|v9220]], [[8.0.0-18|v10243]], [[8.1.0-0_New3DS|v11265]]([[8.1.0-0_New3DS]]), [[9.0.0-20|v12290]], [[9.3.0-21|v13315]]&lt;br /&gt;
|-&lt;br /&gt;
| 00001703&lt;br /&gt;
| SAFE_MODE Config (cfg)&lt;br /&gt;
| [[1.0.0-0|v0]]&lt;br /&gt;
|-&lt;br /&gt;
| 20001703&lt;br /&gt;
| [[New_3DS]] SAFE_MODE Config (cfg)&lt;br /&gt;
| [[8.1.0-0_New3DS|v11265]]&lt;br /&gt;
|-&lt;br /&gt;
| 00001802&lt;br /&gt;
| Codec&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.0.0-2|v1025]], [[2.2.0-X|v2048]], [[3.0.0-5|v3072]], [[5.0.0-11|v4098]], [[7.0.0-13|v5120]], [[8.0.0-18|v6144]], [[9.0.0-20|v7168]](Also for [[8.1.0-0_New3DS]])&lt;br /&gt;
|-&lt;br /&gt;
| 00001803&lt;br /&gt;
| SAFE_MODE Codec&lt;br /&gt;
| [[1.0.0-0|v0]]&lt;br /&gt;
|-&lt;br /&gt;
| 20001803&lt;br /&gt;
| [[New_3DS]] SAFE_MODE Codec&lt;br /&gt;
| [[8.1.0-0_New3DS|v7169]]&lt;br /&gt;
|-&lt;br /&gt;
| 00001902&lt;br /&gt;
| dmnt, debugger sysmodule. This use devunit-only HIO for devunit&amp;lt;&amp;gt;pc comms. This only exists for development units(launched by NS during startup depending on certain [[Configuration_Memory]] fields&#039; values). This is installed at the [[Factory_Setup|factory]], then later deleted at the factory on retail units.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 00001A02&lt;br /&gt;
| DSP&lt;br /&gt;
| [[1.0.0-0|v0]], [[3.0.0-5|v1024]], [[4.0.0-7|v2048]], [[5.0.0-11|v3074]], [[6.0.0-11|v4096]], [[8.0.0-18|v5120]]&lt;br /&gt;
|-&lt;br /&gt;
| 00001A03&lt;br /&gt;
| SAFE_MODE DSP&lt;br /&gt;
| [[1.0.0-0|v0]]&lt;br /&gt;
|-&lt;br /&gt;
| 20001A03&lt;br /&gt;
| [[New_3DS]] SAFE_MODE DSP&lt;br /&gt;
| [[8.1.0-0_New3DS|v6145]]&lt;br /&gt;
|-&lt;br /&gt;
| 00001B02&lt;br /&gt;
| GPIO&lt;br /&gt;
| [[1.0.0-0|v0]], [[5.0.0-11|v1025]], [[8.0.0-18|v2048]], [[9.5.0-22|v3073]]&lt;br /&gt;
|-&lt;br /&gt;
| 00001B03&lt;br /&gt;
| SAFE_MODE GPIO&lt;br /&gt;
| [[1.0.0-0|v0]]&lt;br /&gt;
|-&lt;br /&gt;
| 20001B03&lt;br /&gt;
| [[New_3DS]] SAFE_MODE GPIO&lt;br /&gt;
| [[8.1.0-0_New3DS|v3073]]&lt;br /&gt;
|-&lt;br /&gt;
| 00001C02&lt;br /&gt;
| GSP&lt;br /&gt;
| [[1.0.0-0|v0]], [[1.1.0-1|v1040]], [[2.0.0-2|v2049]], [[3.0.0-5|v3075]], v4098, [[4.0.0-7|v5120]], [[5.0.0-11|v6145]], [[6.0.0-11|v7168]], [[8.0.0-18|v8196]], [[9.0.0-20|v10240]], [[9.3.0-21|v11264]]&lt;br /&gt;
|-&lt;br /&gt;
| 20001C02&lt;br /&gt;
| [[New_3DS]] GSP&lt;br /&gt;
| [[8.1.0-0_New3DS|v10243]], [[9.3.0-21|v11267]]&lt;br /&gt;
|-&lt;br /&gt;
| 00001C03&lt;br /&gt;
| SAFE_MODE GSP&lt;br /&gt;
| [[1.0.0-0|v0]]&lt;br /&gt;
|-&lt;br /&gt;
| 20001C03&lt;br /&gt;
| [[New_3DS]] SAFE_MODE GSP&lt;br /&gt;
| [[8.1.0-0_New3DS|v9217]]&lt;br /&gt;
|-&lt;br /&gt;
| 00001D02&lt;br /&gt;
| HID (Human Interface Devices) &lt;br /&gt;
| [[1.0.0-0|v0]], [[2.0.0-2|v1025]], [[2.2.0-X|v2048]], [[3.0.0-5|v3072]], [[4.0.0-7|v4096]], [[5.0.0-11|v5121]], [[7.2.0-17|v6148]], [[8.0.0-18|v7168]], [[8.1.0-0_New3DS|v8192]]([[8.1.0-0_New3DS]]), [[9.0.0-20|v9216]], [[9.3.0-21|v10240]]&lt;br /&gt;
|-&lt;br /&gt;
| 00001D03&lt;br /&gt;
| SAFE_MODE HID&lt;br /&gt;
| [[1.0.0-0|v0]]&lt;br /&gt;
|-&lt;br /&gt;
| 20001D03&lt;br /&gt;
| [[New_3DS]] SAFE_MODE HID&lt;br /&gt;
| [[8.1.0-0_New3DS|v8193]]&lt;br /&gt;
|-&lt;br /&gt;
| 00001E02&lt;br /&gt;
| i2c&lt;br /&gt;
| [[1.0.0-0|v0]], [[3.0.0-5|v1024]], [[5.0.0-11|v2049]], [[8.0.0-18|v3076]], [[9.3.0-21|v5120]]&lt;br /&gt;
|-&lt;br /&gt;
| 20001E02&lt;br /&gt;
| [[New_3DS]] i2c&lt;br /&gt;
| [[8.1.0-0_New3DS|v4096]], [[9.3.0-21|v5121]]&lt;br /&gt;
|- &lt;br /&gt;
| 00001E03&lt;br /&gt;
| SAFE_MODE i2c&lt;br /&gt;
| [[1.0.0-0|v0]]&lt;br /&gt;
|- &lt;br /&gt;
| 20001E03&lt;br /&gt;
| [[New_3DS]] SAFE_MODE i2c&lt;br /&gt;
| [[8.1.0-0_New3DS|v4097]]&lt;br /&gt;
|-&lt;br /&gt;
| 00001F02&lt;br /&gt;
| MCU&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.0.0-2|v1026]], [[2.1.0-3|v2048]], [[3.0.0-5|v3072]], [[4.0.0-7|v4102]], [[5.0.0-11|v5122]], [[6.0.0-11|v6145]], [[7.0.0-13|v7168]], [[8.0.0-18|v8192]]&lt;br /&gt;
|-&lt;br /&gt;
| 20001F02&lt;br /&gt;
| [[New_3DS]] MCU&lt;br /&gt;
| [[8.1.0-0_New3DS|v8192]]&lt;br /&gt;
|-&lt;br /&gt;
| 00001F03&lt;br /&gt;
| SAFE_MODE MCU&lt;br /&gt;
| [[1.0.0-0|v0]]&lt;br /&gt;
|-&lt;br /&gt;
| 20001F03&lt;br /&gt;
| [[New_3DS]] SAFE_MODE MCU&lt;br /&gt;
| [[8.1.0-0_New3DS|v9217]]&lt;br /&gt;
|-&lt;br /&gt;
| 00002002&lt;br /&gt;
| Microphone (mic)&lt;br /&gt;
| [[1.0.0-0|v0]], [[5.0.0-11|v1025]], [[8.0.0-18|v2048]]&lt;br /&gt;
|-&lt;br /&gt;
| 00002102&lt;br /&gt;
| PDN&lt;br /&gt;
| [[1.0.0-0|v0]], [[5.0.0-11|v1025]], [[8.0.0-18|v2048]]&lt;br /&gt;
|-&lt;br /&gt;
| 00002103&lt;br /&gt;
| SAFE_MODE PDN&lt;br /&gt;
| [[1.0.0-0|v0]]&lt;br /&gt;
|-&lt;br /&gt;
| 20002103&lt;br /&gt;
| [[New_3DS]] SAFE_MODE PDN&lt;br /&gt;
| [[8.1.0-0_New3DS|v3073]]&lt;br /&gt;
|-&lt;br /&gt;
| 00002202&lt;br /&gt;
| PTM (Play time, pedometer, and battery manager)&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.0.0-2|v1026]], [[2.2.0-X|v2048]], [[3.0.0-5|v3075]], v4096, [[4.0.0-7|v5120]], [[5.0.0-11|v6146]], [[6.0.0-11|v7168]], [[7.0.0-13|v8192]], [[8.0.0-18|v9219]]&lt;br /&gt;
|-&lt;br /&gt;
| 20002202&lt;br /&gt;
| [[New_3DS]] PTM (Play time, pedometer, and battery manager)&lt;br /&gt;
| [[8.1.0-0_New3DS|v10240]]&lt;br /&gt;
|-&lt;br /&gt;
| 00002203&lt;br /&gt;
| SAFE_MODE PTM&lt;br /&gt;
| [[1.0.0-0|v0]]&lt;br /&gt;
|-&lt;br /&gt;
| 20002203&lt;br /&gt;
| [[New_3DS]] SAFE_MODE PTM&lt;br /&gt;
| [[8.1.0-0_New3DS|v10241]]&lt;br /&gt;
|-&lt;br /&gt;
| 00002302&lt;br /&gt;
| spi&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.0.0-2|v1025]], [[5.0.0-11|v2049]], [[8.0.0-18|v3072]]&lt;br /&gt;
|-&lt;br /&gt;
| 20002302&lt;br /&gt;
| [[New_3DS]] spi&lt;br /&gt;
| [[8.1.0-0_New3DS|v4096]]&lt;br /&gt;
|-&lt;br /&gt;
| 00002303&lt;br /&gt;
| SAFE_MODE spi&lt;br /&gt;
| [[1.0.0-0|v0]]&lt;br /&gt;
|-&lt;br /&gt;
| 20002303&lt;br /&gt;
| [[New_3DS]] SAFE_MODE spi&lt;br /&gt;
| [[8.1.0-0_New3DS|v4097]]&lt;br /&gt;
|-&lt;br /&gt;
| 00002402&lt;br /&gt;
| Network manager (AC)&lt;br /&gt;
| [[1.0.0-0|v0]], [[1.1.0-1|v1024]], [[2.0.0-2|v2052]], [[2.1.0-3|v3072]], [[3.0.0-5|v4101]], [[5.0.0-11|v5122]], [[7.0.0-13|v6145]], [[8.0.0-18|v7172]], [[9.0.0-20|v8192]](Also for [[8.1.0-0_New3DS]]), [[9.3.0-21|v9216]]&lt;br /&gt;
|-&lt;br /&gt;
| 00002403&lt;br /&gt;
| SAFE_MODE AC&lt;br /&gt;
| [[1.0.0-0|v0]]&lt;br /&gt;
|-&lt;br /&gt;
| 20002403&lt;br /&gt;
| [[New_3DS]] SAFE_MODE AC&lt;br /&gt;
| [[8.1.0-0_New3DS|v8193]]&lt;br /&gt;
|-&lt;br /&gt;
| 00002602&lt;br /&gt;
| Cecd (StreetPass)&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.0.0-2|v1026]], [[2.2.0-X|v2048]], [[3.0.0-5|v3073]], [[4.0.0-7|v4097]], [[5.0.0-11|v5122]], [[6.0.0-11|v6144]], [[6.2.0-12|v7170]], [[7.0.0-13|v8193]], [[8.0.0-18|v9216]], [[9.0.0-20|v10240]]&lt;br /&gt;
|-&lt;br /&gt;
| 00002702&lt;br /&gt;
| CSND&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.0.0-2|v1025]], [[4.0.0-7|v2048]], [[5.0.0-11|v3073]], [[8.0.0-18|v4096]], [[9.0.0-20|v5120]]&lt;br /&gt;
|-&lt;br /&gt;
| 00002703&lt;br /&gt;
| SAFE_MODE CSND&lt;br /&gt;
| [[1.0.0-0|v0]]&lt;br /&gt;
|-&lt;br /&gt;
| 20002703&lt;br /&gt;
| [[New_3DS]] SAFE_MODE CSND&lt;br /&gt;
| [[8.1.0-0_New3DS|v5121]]&lt;br /&gt;
|-&lt;br /&gt;
| 00002802&lt;br /&gt;
| dlp ([[Download Play]])&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.0.0-2|v1026]], [[2.2.0-X|v2048]], [[3.0.0-5|v3078]], [[5.0.0-11|v4099]], [[8.0.0-18|v5123]], [[9.0.0-20|v6145]](Also for [[8.1.0-0_New3DS]])&lt;br /&gt;
|-&lt;br /&gt;
| 00002902&lt;br /&gt;
| http&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.0.0-2|v1026]], [[2.1.0-3|v2049]], [[2.2.0-X|v3072]], [[3.0.0-5|v4099]], [[4.0.0-7|v5122]], [[5.0.0-11|v6145]], [[7.0.0-13|v7171]], [[7.1.0-14|v8192]], [[8.0.0-18|v9220]], [[8.1.0-18|v10245]], [[8.1.0-0_New3DS|v11264]]([[8.1.0-0_New3DS]]), [[9.0.0-20|v12288]]&lt;br /&gt;
|-&lt;br /&gt;
| 00002903&lt;br /&gt;
| SAFE_MODE http&lt;br /&gt;
| [[1.0.0-0|v0]]&lt;br /&gt;
|-&lt;br /&gt;
| 20002903&lt;br /&gt;
| [[New_3DS]] SAFE_MODE http&lt;br /&gt;
| [[8.1.0-0_New3DS|v10241]]&lt;br /&gt;
|-&lt;br /&gt;
| 00002A02&lt;br /&gt;
| MP&lt;br /&gt;
| [[1.0.0-0|v0]], [[5.0.0-11|v1025]], [[8.0.0-18|v2048]]&lt;br /&gt;
|-&lt;br /&gt;
| 00002A03&lt;br /&gt;
| SAFE_MODE MP&lt;br /&gt;
| [[1.0.0-0|v0]]&lt;br /&gt;
|-&lt;br /&gt;
| 00002B02&lt;br /&gt;
| NDM&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.0.0-2|v1025]], [[3.0.0-5|v2049]], [[4.0.0-7|v3072]], [[5.0.0-11|v4098]], [[8.0.0-18|v5124]], [[8.1.0-0_New3DS|v6144]]([[8.1.0-0_New3DS]]), [[9.0.0-20|v7169]]&lt;br /&gt;
|-&lt;br /&gt;
| 00002C02&lt;br /&gt;
| [[NIM Services|NIM]]&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.0.0-2|v1028]], [[3.0.0-5|v2055]], [[4.0.0-7|v3074]], [[5.0.0-11|v4100]], [[6.0.0-11|v5120]], [[7.0.0-13|v6148]], [[7.2.0-17|v7174]], [[8.0.0-18|v8195]], [[8.1.0-0_New3DS|v9217]]([[8.1.0-0_New3DS]]), [[9.0.0-20|v10249]], [[9.3.0-21|v11267]]&lt;br /&gt;
|-&lt;br /&gt;
| 00002C03&lt;br /&gt;
| SAFE_MODE NIM&lt;br /&gt;
| [[1.0.0-0|v0]]&lt;br /&gt;
|-&lt;br /&gt;
| 20002C03&lt;br /&gt;
| [[New_3DS]] SAFE_MODE NIM&lt;br /&gt;
| [[8.1.0-0_New3DS|v9217]]&lt;br /&gt;
|-&lt;br /&gt;
| 00002D02&lt;br /&gt;
| NWM ( Low-level wifi manager )&lt;br /&gt;
| [[1.0.0-0|v0]], [[1.1.0-1|v1024]], [[2.0.0-2|v2052]], [[2.2.0-X|v3072]], [[3.0.0-5|v4101]], [[4.0.0-7|v5120]], [[5.0.0-11|v6148]], [[6.0.0-11|v7169]], [[7.2.0-17|v8196]], [[8.0.0-18|v9216]], [[9.0.0-20|v10240]]&lt;br /&gt;
|-&lt;br /&gt;
| 00002D03&lt;br /&gt;
| SAFE_MODE NWM&lt;br /&gt;
| [[1.0.0-0|v0]], [[6.0.0-11|v5120]]&lt;br /&gt;
|-&lt;br /&gt;
| 20002D03&lt;br /&gt;
| [[New_3DS]] SAFE_MODE NWM&lt;br /&gt;
| [[8.1.0-0_New3DS|v10241]]&lt;br /&gt;
|-&lt;br /&gt;
| 00002E02&lt;br /&gt;
| Sockets&lt;br /&gt;
| [[1.0.0-0|v0]], [[1.1.0-1|v1024]], [[2.0.0-2|v2053]], [[3.0.0-5|v3075]], [[4.0.0-7|v4096]], [[5.0.0-11|v5121]], [[8.0.0-18|v6144]], [[9.0.0-20|v7168]]&lt;br /&gt;
|-&lt;br /&gt;
| 00002E03&lt;br /&gt;
| SAFE_MODE Sockets&lt;br /&gt;
| [[1.0.0-0|v0]]&lt;br /&gt;
|-&lt;br /&gt;
| 20002E03&lt;br /&gt;
| [[New_3DS]] SAFE_MODE Sockets&lt;br /&gt;
| [[8.1.0-0_New3DS|v7169]]&lt;br /&gt;
|-&lt;br /&gt;
| 00002F02&lt;br /&gt;
| SSL&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.0.0-2|v1024]], [[2.1.0-3|v2048]], [[3.0.0-5|v3072]], [[4.0.0-7|v4096]], [[5.0.0-11|v5122]], [[8.0.0-18|v6144]], [[9.0.0-20|v7168]]&lt;br /&gt;
|-&lt;br /&gt;
| 00002F03&lt;br /&gt;
| SAFE_MODE SSL&lt;br /&gt;
| [[1.0.0-0|v0]]&lt;br /&gt;
|-&lt;br /&gt;
| 20002F03&lt;br /&gt;
| [[New_3DS]] SAFE_MODE SSL&lt;br /&gt;
| [[8.1.0-0_New3DS|v7169]]&lt;br /&gt;
|-&lt;br /&gt;
| 00003102&lt;br /&gt;
| [[Process Services‎|PS]] ( Process Manager )&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.0.0-2|v1025]], [[5.0.0-11|v2049]], [[6.0.0-11|v3072]], [[8.0.0-18|v4096]], [[9.0.0-20|v5120]]&lt;br /&gt;
|-&lt;br /&gt;
| 00003103&lt;br /&gt;
| SAFE_MODE PS&lt;br /&gt;
| [[1.0.0-0|v0]]&lt;br /&gt;
|-&lt;br /&gt;
| 20003103&lt;br /&gt;
| [[New_3DS]] SAFE_MODE PS&lt;br /&gt;
| [[8.1.0-0_New3DS|v5121]]&lt;br /&gt;
|-&lt;br /&gt;
| 00003202&lt;br /&gt;
| FriendsList (friends)&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.0.0-2|v1028]], [[2.2.0-X|v2048]], [[3.0.0-5|v3072]], [[4.0.0-7|v4096]], [[5.0.0-11|v5122]], [[7.0.0-13|v6145]], [[8.0.0-18|v7172]], [[9.0.0-20|v8192]](Also for [[8.1.0-0_New3DS]])&lt;br /&gt;
|-&lt;br /&gt;
| 00003203&lt;br /&gt;
| SAFE_MODE FriendsList (friends)&lt;br /&gt;
| [[1.0.0-0|v0]]&lt;br /&gt;
|-&lt;br /&gt;
| 20003203&lt;br /&gt;
| [[New_3DS]] SAFE_MODE FriendsList (friends)&lt;br /&gt;
| [[8.1.0-0_New3DS|v8193]]&lt;br /&gt;
|-&lt;br /&gt;
| 00003302&lt;br /&gt;
| IR (Infrared)&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.0.0-2|v1026]], [[2.2.0-X|v2048]], [[3.0.0-5|v3072]], [[4.0.0-7|v4096]], [[5.0.0-11|v5121]], [[8.0.0-18|v6148]], [[8.1.0-0_New3DS|v7170]]([[8.1.0-0_New3DS]]), [[9.0.0-20|v8192]], [[9.3.0-21|v9216]]&lt;br /&gt;
|-&lt;br /&gt;
| 00003303&lt;br /&gt;
| SAFE_MODE IR&lt;br /&gt;
| [[1.0.0-0|v0]]&lt;br /&gt;
|-&lt;br /&gt;
| 20003303&lt;br /&gt;
| [[New_3DS]] SAFE_MODE IR&lt;br /&gt;
| [[8.1.0-0_New3DS|v7169]]&lt;br /&gt;
|- &lt;br /&gt;
| 00003402&lt;br /&gt;
| BOSS (SpotPass)&lt;br /&gt;
| [[1.0.0-0|v0]], [[1.1.0-1|v1024]], [[2.0.0-2|v2053]], [[2.2.0-X|v3073]], [[3.0.0-5|v4101]], [[4.0.0-7|v5122]], [[5.0.0-11|v6146]], [[6.0.0-11|v7169]], [[6.2.0-12|v8193]], [[7.0.0-13|v9222]], [[8.0.0-18|v10240]], [[9.0.0-20|v11266]]&lt;br /&gt;
|-&lt;br /&gt;
| 00003502&lt;br /&gt;
| News (Notifications)&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.0.0-2|v1028]], [[2.2.0-X|v2048]], [[3.0.0-5|v3072]], [[5.0.0-11|v4097]], [[8.0.0-18|v5120]], [[9.0.0-20|v6147]]&lt;br /&gt;
|-&lt;br /&gt;
| 00003602&lt;br /&gt;
| This only exist for development units(launched by NS during startup depending on certain [[Configuration_Memory]] fields&#039; values).&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 00003702&lt;br /&gt;
| [[RO_Services|RO]]&lt;br /&gt;
| [[2.0.0-2|v0]], [[4.0.0-7|v1024]], [[5.0.0-11|v2049]], [[7.2.0-17|v3074]], [[8.0.0-18|v4096]], [[9.0.0-20|v5120]](Also for [[8.1.0-0_New3DS]]), [[9.3.0-21|v6148]]&lt;br /&gt;
|-&lt;br /&gt;
| 00003802&lt;br /&gt;
| act (handles Nintendo Network &#039;&#039;&#039;a&#039;&#039;&#039;c&#039;&#039;&#039;c&#039;&#039;&#039;oun&#039;&#039;&#039;t&#039;&#039;&#039;s)&lt;br /&gt;
| [[7.0.0-13|v1029]], [[7.1.0-14|v2050]], [[7.2.0-17|v3077]], [[8.0.0-18|v4099]], [[8.1.0-0_New3DS|v5120]]([[8.1.0-0_New3DS]]), [[9.0.0-20|v6144]], [[9.3.0-21|v7168]]&lt;br /&gt;
|-&lt;br /&gt;
| 00004002&lt;br /&gt;
| Old3DS [[NFC_Services|nfc]]&lt;br /&gt;
| [[9.3.0-21|v2053]], [[9.6.0-24|v4106]]&lt;br /&gt;
|-&lt;br /&gt;
| 20004002&lt;br /&gt;
| [[New_3DS]] [[NFC_Services|nfc]]&lt;br /&gt;
| [[8.1.0-0_New3DS|v0]], [[9.0.0-20|v1024]], [[9.3.0-21|v2053]], [[9.5.0-22|v3073]]&lt;br /&gt;
|-&lt;br /&gt;
| 20004102&lt;br /&gt;
| [[New_3DS]] mvd&lt;br /&gt;
| [[8.1.0-0_New3DS|v0]], [[9.0.0-20|v1024]]&lt;br /&gt;
|-&lt;br /&gt;
| 20004202&lt;br /&gt;
| [[New_3DS]] [[QTM Services|qtm]]&lt;br /&gt;
| [[8.1.0-0_New3DS|v8]], [[9.0.0-20|v1024]], [[9.3.0-21|v2052]]&lt;br /&gt;
|-&lt;br /&gt;
| 00008002&lt;br /&gt;
| [[NS]] (Memory-region: &amp;quot;SYSTEM&amp;quot;)&lt;br /&gt;
| [[1.0.0-0|v0]], [[2.0.0-2|v1028]], [[2.2.0-X|v2048]], [[3.0.0-5|v3077]], v4096, [[4.0.0-7|v5121]], [[5.0.0-11|v6148]], [[5.1.0-11|v7168]], [[6.0.0-11|v8193]], [[6.1.0-11|v9216]], [[7.0.0-13|v10248]], [[7.2.0-17|v11268]], [[8.0.0-18|v12291]], [[8.1.0-0_New3DS|v13312]]([[8.1.0-0_New3DS]]), [[9.0.0-20|v14336]], [[9.3.0-21|v15360]]&lt;br /&gt;
|-&lt;br /&gt;
| 00008003&lt;br /&gt;
| SAFE_MODE NS (Memory-region: &amp;quot;SYSTEM&amp;quot;)&lt;br /&gt;
| [[1.0.0-0|v0]]&lt;br /&gt;
|-&lt;br /&gt;
| 20008003&lt;br /&gt;
| [[New_3DS]] SAFE_MODE NS (Memory-region: &amp;quot;SYSTEM&amp;quot;)&lt;br /&gt;
| [[8.1.0-0_New3DS|v13313]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once Home Menu finishes loading, all of the above system modules are running, except for MP, RO, and act which are automatically [[Process_Manager_Services|loaded]] when a process requires them. When [[Process_Manager_Services|PM]]-module terminates processes, it will check whether the processes listed as dependencies for this process are listed as dependencies for other processes. Any processes which are no longer listed in any processes dependencies lists are then terminated. On [[New_3DS]], the only New3DS-specific system-module which automatically gets loaded during system boot is qtm.&lt;br /&gt;
&lt;br /&gt;
All of the above system modules use the &amp;quot;BASE&amp;quot; [[SVC|memory-region]](specified in the exheader), except when listed otherwise for certain modules.&lt;br /&gt;
&lt;br /&gt;
When handling the exheader dependency list starting with [[8.0.0-18]], Old3DS FIRM [[Process_Manager_Services|PM]]-module now skips handling titles in this list which have any bits in programID-low bitmask 0xF0000000 set(with [[8.0.0-18]] this is hard-coded). The exheader dependency list handling change is for the [[New 3DS]] system-module(s), which do not exist on Old3DS. When the New3DS pm-module is launching any title except [[NS]], it first attempts to launch the title with programID-low bitmask 0x20000000 set, then with that bitmask clear if launching fails.&lt;br /&gt;
&lt;br /&gt;
=== 00040138 - [[FIRM|System Firmware]] ===&lt;br /&gt;
NATIVE_FIRM and SAFE_MODE_FIRM for the initial versions are exactly the same, besides [[Configuration_Memory|core-version]] fields. SAFE_MODE_FIRM is used for running SAFE_MODE titles, on retail SAFE_MODE_FIRM seems to be only used for running the [[System_Settings#System_Updater|System Updater]] application. When a GBA VC title is launched, AGB_FIRM is launched to handle running this title. GBA VC savegames stored under SD card /title/&amp;lt;TID&amp;gt;/data use a custom format, this is handled by AGB_FIRM.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  TitleID Low&lt;br /&gt;
!  Description&lt;br /&gt;
!  USA/EUR/JPN Versions&lt;br /&gt;
!  CHN Versions&lt;br /&gt;
!  KOR Versions&lt;br /&gt;
!  TWN Versions&lt;br /&gt;
|-&lt;br /&gt;
| 00000001&lt;br /&gt;
| Unknown, very similar to SAFE_MODE_FIRM. Exists only on dev units and seems to only be used by SystemUpdaters.&lt;br /&gt;
| v0&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 00000002&lt;br /&gt;
| NATIVE_FIRM (Native Firmware)&lt;br /&gt;
| [[1.0.0-0|v432]], [[1.1.0-1|v1472]], [[2.0.0-2|v2516]], [[2.1.0-3|v3553]], [[2.2.0-X|v4595]], [[3.0.0-5|v5647]], [[4.0.0-7|v6677]], [[4.1.0-8|v7712]], [[5.0.0-11|v8758]], [[5.1.0-11|v9792]], [[6.0.0-11|v10833]], [[6.1.0-11|v11872]], [[7.0.0-13|v12916]], [[7.2.0-17|v13956]], v15043, [[8.0.0-18|v15047]], [[9.0.0-20|v17120]], [[9.3.0-21|v18182]], [[9.5.0-22|v19216]]&lt;br /&gt;
| Same as USA/EUR/JPN starting with the USA/EUR/JPN [[4.0.0-7]] title-version&lt;br /&gt;
| Same as CHN.&lt;br /&gt;
| Same as CHN.&lt;br /&gt;
|-&lt;br /&gt;
| 20000002&lt;br /&gt;
| [[New_3DS]] NATIVE_FIRM (Native Firmware)&lt;br /&gt;
| [[8.1.0-0_New3DS|v16085]], [[9.0.0-20|v17120]], [[9.3.0-21|v18182]], [[9.5.0-22|v19218]]&lt;br /&gt;
| N/A&lt;br /&gt;
| Same as CHN.&lt;br /&gt;
| Same as CHN.&lt;br /&gt;
|-&lt;br /&gt;
| 00000003&lt;br /&gt;
| SAFE_MODE_FIRM &lt;br /&gt;
| [[1.0.0-0|v432]], [[3.0.0-5|v5632]]&lt;br /&gt;
| Same as USA/EUR/JPN starting with the USA/EUR/JPN [[3.0.0-5]] title-version&lt;br /&gt;
| Same as CHN.&lt;br /&gt;
| Same as CHN.&lt;br /&gt;
|-&lt;br /&gt;
| 20000003&lt;br /&gt;
| [[New_3DS]] SAFE_MODE_FIRM &lt;br /&gt;
| [[8.1.0-0_New3DS|v16081]]&lt;br /&gt;
| N/A&lt;br /&gt;
| Same as CHN.&lt;br /&gt;
| Same as CHN.&lt;br /&gt;
|-&lt;br /&gt;
| 00000102 &lt;br /&gt;
| TWL_FIRM ( DSi Firmware )&lt;br /&gt;
| [[1.0.0-0|v432]], [[2.0.0-2|v1489]], [[3.0.0-5|v2565]], v3601, [[4.0.0-7|v4625]], [[4.4.0-10|v5681]], [[4.5.0-10|v6704]], [[6.0.0-11|v7762]], [[6.2.0-12|v8817]]&lt;br /&gt;
| Same as USA/EUR/JPN starting with the USA/EUR/JPN [[4.0.0-7]] title-version&lt;br /&gt;
| Same as CHN.&lt;br /&gt;
| Same as CHN.&lt;br /&gt;
|-&lt;br /&gt;
| 20000102 &lt;br /&gt;
| [[New_3DS]] TWL_FIRM ( DSi Firmware )&lt;br /&gt;
| [[8.1.0-0_New3DS|v9936]]&lt;br /&gt;
| N/A&lt;br /&gt;
| Same as CHN.&lt;br /&gt;
| Same as CHN.&lt;br /&gt;
|- &lt;br /&gt;
| 00000202&lt;br /&gt;
| AGB_FIRM ( GBA Firmware )&lt;br /&gt;
| [[3.0.0-5|v519]], v1553, [[4.0.0-7|v2576]], [[6.0.0-11|v3665]]&lt;br /&gt;
| [[4.0.0-7|v2576]]&lt;br /&gt;
| [[4.0.0-7|v2576]], [[6.0.0-11|v3665]]&lt;br /&gt;
| Same as CHN.&lt;br /&gt;
|- &lt;br /&gt;
| 20000202&lt;br /&gt;
| [[New_3DS]] AGB_FIRM ( GBA Firmware )&lt;br /&gt;
| [[8.1.0-0_New3DS|v4816]]&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== TWL System Titles ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Content Category&lt;br /&gt;
!  Bit Mask(s)&lt;br /&gt;
!  Category Bit Mask&lt;br /&gt;
|-&lt;br /&gt;
|  System Application&lt;br /&gt;
|  TWL&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;0x1&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;0x4&lt;br /&gt;
|  0x8005&lt;br /&gt;
|-&lt;br /&gt;
|  System Archive&lt;br /&gt;
|  TWL&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;0x1&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;0x2&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;0x4&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;0x8&lt;br /&gt;
|  0x800F&lt;br /&gt;
|}&lt;br /&gt;
Bitmask 0x1 for TWL titles determines whether the title will be updated during a System Update.&lt;br /&gt;
&lt;br /&gt;
=== 00048005 - System Applications===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  TitleID Low&lt;br /&gt;
!  Region&lt;br /&gt;
!  Description&lt;br /&gt;
!  Versions&lt;br /&gt;
!  Information&lt;br /&gt;
|-&lt;br /&gt;
| 42383841(B88A)&lt;br /&gt;
| ALL&lt;br /&gt;
| [[DS Internet]]&lt;br /&gt;
| v0, [[2.1.0-4|v1025]], [[3.0.0-5|v2048]]&lt;br /&gt;
| [[DS Internet]] is the DSi-mode application launched by [[System Settings]] for setting TWL wifi configuration. &lt;br /&gt;
|-&lt;br /&gt;
| 484E4441(HNDA)&lt;br /&gt;
| ALL&lt;br /&gt;
| [[Download Play]]&lt;br /&gt;
| v1024&lt;br /&gt;
| This [[Download Play]] application is the DS-mode Download Play client, launched by the 3DS-mode Download Play application.&lt;br /&gt;
|-&lt;br /&gt;
| 484E4443(HNDC)&lt;br /&gt;
| CHN&lt;br /&gt;
| [[Download Play]]&lt;br /&gt;
| v1024&lt;br /&gt;
| See Above Description.&lt;br /&gt;
|-&lt;br /&gt;
| 484E444B(HNDK)&lt;br /&gt;
| KOR&lt;br /&gt;
| [[Download Play]]&lt;br /&gt;
| v1024&lt;br /&gt;
| See Above Description.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 0004800F - System Data Archives===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  TitleID Low&lt;br /&gt;
!  Description&lt;br /&gt;
!  Versions&lt;br /&gt;
|-&lt;br /&gt;
| 484E4841(HNHA)&lt;br /&gt;
| [[Nintendo DS Cart Whitelist]]&lt;br /&gt;
| v0, [[2.0.0-2|v1026]], [[2.2.0-X|v2048]], [[3.0.0-5|v3072]], [[4.0.0-7|v4096]], [[4.2.0-9|v5120]], [[4.3.0-10|v6145]], [[4.4.0-10|v7168]], [[4.5.0-10|v8192]], [[5.0.0-11|v9216]], [[6.0.0-11|v10240]], [[7.0.0-13|v11264]]&lt;br /&gt;
|-&lt;br /&gt;
| 484E4C41(HNLA)&lt;br /&gt;
| [[Version Data]]&lt;br /&gt;
| v0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
New system updates only block DS flash-cards when the above whitelist was updated, or when TWL_FIRM was updated. The whitelist contains the data used for detecting flash-cards, this is used by TWL_FIRM.&lt;br /&gt;
&lt;br /&gt;
== Application Titles ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Content Category&lt;br /&gt;
!  Bit Mask(s)&lt;br /&gt;
!  Category Bit Mask&lt;br /&gt;
|-&lt;br /&gt;
|  [[Title list/eShop Titles|Application]] (eShop Title)&lt;br /&gt;
|  Normal&lt;br /&gt;
|  0x0000&lt;br /&gt;
|-&lt;br /&gt;
|  DLP Child&lt;br /&gt;
|  DlpChild&lt;br /&gt;
|  0x0001&lt;br /&gt;
|-&lt;br /&gt;
|  [[EShop Demos|Demo]]&lt;br /&gt;
|  Demo&lt;br /&gt;
|  0x0002&lt;br /&gt;
|-&lt;br /&gt;
|  [[Title list/Patches|Patch]]&lt;br /&gt;
|  CannotExecution&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;Patch&lt;br /&gt;
|  0x000E&lt;br /&gt;
|-&lt;br /&gt;
|  [[Title list/DLC|Add-on Content]] (DLC)&lt;br /&gt;
|  NotRequireRightForMount&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;CannotExecution&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;AddOnContents&lt;br /&gt;
|  0x008C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 00040001 - [[Download Play]] Titles ===&lt;br /&gt;
This titleID-high/programID-high is used for the titles sent over [[Download Play]]. Only one 00040001 Download Play title is installed to NAND /title at a time. There can be a maximum of 255 Download Play child titles per Unique ID, indexed by Title ID Variation. The legal index range: 0x0 - 0xff.&lt;br /&gt;
&lt;br /&gt;
== TWL Application Titles ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Content Category&lt;br /&gt;
!  Bit Mask(s)&lt;br /&gt;
!  Category Bit Mask&lt;br /&gt;
|-&lt;br /&gt;
|  Application (DSiWare)&lt;br /&gt;
|  TWL&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;0x4&lt;br /&gt;
|  0x8004&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 00048004 - DSiWare ===&lt;br /&gt;
Although these have a titleID high separate from DSi and a titleID is stored in the SRLs, the content of these SRLs are identical to DSi.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  TitleID Low&lt;br /&gt;
!  Region&lt;br /&gt;
!  Description&lt;br /&gt;
!  Versions&lt;br /&gt;
|-&lt;br /&gt;
| 4B4B5456(KKTV)&lt;br /&gt;
| EUR&lt;br /&gt;
| Cut the Rope&lt;br /&gt;
| v0, v64&lt;br /&gt;
|-&lt;br /&gt;
| 4B4E5256(KNRV)&lt;br /&gt;
| EUR&lt;br /&gt;
| A Little Bit of... Brain Training™: Maths Edition &lt;br /&gt;
| v0&lt;br /&gt;
|-&lt;br /&gt;
| 4B5A4C56(KZLV)&lt;br /&gt;
| EUR&lt;br /&gt;
| Plants vs. Zombies™&lt;br /&gt;
| v0&lt;br /&gt;
|-&lt;br /&gt;
| 4B454256(KEBV)&lt;br /&gt;
| EUR&lt;br /&gt;
| ELECTROPLANKTON (Hanenbow)&lt;br /&gt;
| v0&lt;br /&gt;
|-&lt;br /&gt;
| 4B513956(KQ9V)&lt;br /&gt;
| EUR&lt;br /&gt;
| Zelda: Four Swords Anniversary Edition&lt;br /&gt;
| v16&lt;br /&gt;
|-&lt;br /&gt;
| 4B574256(KWBV)&lt;br /&gt;
| EUR&lt;br /&gt;
| Mario Calculator &lt;br /&gt;
| v0&lt;br /&gt;
|-&lt;br /&gt;
| 4B574656(KWFV)&lt;br /&gt;
| EUR&lt;br /&gt;
| Mario Clock &lt;br /&gt;
| v0&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=11809</id>
		<title>NFC Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=11809"/>
		<updated>2015-03-02T22:05:50Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: /* Post-9.3.0-21 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The New3DS NFC module was added with [[8.1.0-0_New3DS]]. The Old3DS NFC module was added with [[9.3.0-21|9.3.0-X]].&lt;br /&gt;
&lt;br /&gt;
On New3DS NFC module uses the NFC hardware via the [[I2C_Services|i2c::NFC]] and [[GPIO_Services|gpio:NFC]] services. On Old3DS NFC module communicates with a NFC peripheral via IR with the IRUSER service.&lt;br /&gt;
&lt;br /&gt;
A total of 6 sessions can be open simultaneously for all of these services combined.&lt;br /&gt;
&lt;br /&gt;
=NFC services=&lt;br /&gt;
==NFC user service &amp;quot;nfc:u&amp;quot;==&lt;br /&gt;
This is the NFC service used by regular applications.&lt;br /&gt;
&lt;br /&gt;
This was first seen in the Super Smash Bros eShop demo (only in the exheader, the demo doesn&#039;t actually use it), but at that time no system-module was available for NFC on CDN. The first regular application to use this service was Super Smash Bros, with the v1.0.5 game-update, which used the new 9.3.0-21 command set.&lt;br /&gt;
&lt;br /&gt;
==NFC management service &amp;quot;nfc:m&amp;quot;==&lt;br /&gt;
This is used by the [[amiibo Settings]] applet.&lt;br /&gt;
&lt;br /&gt;
==NFC development service &amp;quot;nfc:dev&amp;quot;==&lt;br /&gt;
This service seems to be intended for use only on dev-units(or at least some of the command(s)).&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:p&amp;quot;==&lt;br /&gt;
This service is used by the mint library-applet, starting with [[9.3.0-21]]. This service was added to the mint service-access-control list with [[9.0.0-20]].&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:r&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:s&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
=&amp;quot;nfc:u&amp;quot; and &amp;quot;nfc:m&amp;quot; command set=&lt;br /&gt;
There are two different revisions of the NFC module. First version was introduced on New3DS only with firmware 8.1.0-0_New3DS. Second version made its appearance with 9.3.0-X, on both Old3DS and New3DS.&lt;br /&gt;
&lt;br /&gt;
These two versions are not interchangeable and not compatible, since the newer version uses a different command set and has no implemented commands from the older version. This does not introduce compatibility problems since no retail software used the NFC module before the Super Smash Bros for 3DS, whose NFC update required 9.3.0-21.&lt;br /&gt;
&lt;br /&gt;
==Post-9.3.0-21==&lt;br /&gt;
Commands for post-9.3.0-21 have been extracted by analyzing the amiibo Settings applet. Therefore this table may be missing commands. Note that the function name is actually a nickname for easeness of reading, as original function names have been stripped off the binaries.&lt;br /&gt;
&lt;br /&gt;
See [[IPC Command Structure]] for an explanation on how IPC communication works and how to use these functions.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Name&lt;br /&gt;
!  Input&lt;br /&gt;
!  Output&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| nfcInit&lt;br /&gt;
| u8 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020040&lt;br /&gt;
| nfcStop&lt;br /&gt;
| u8 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| ???&lt;br /&gt;
| u16 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090002&lt;br /&gt;
| ???&lt;br /&gt;
| u32 pid, u32 pidPlaceholder&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA, u32 unknownB&lt;br /&gt;
| amiibo applet ignores value unknownA. It doesn&#039;t even read it from the command buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA, u32 unknownB&lt;br /&gt;
| amiibo applet also ignores value unknownA for this command.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u8 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| u32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[24]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[8], u32 unknownB[2], u32 unknownC&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140384&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA, u32 unknownB, u8 unknownB[48], u32 pid, u32 pidPlaceholder, u32 (buffer_size &amp;lt;&amp;lt; 14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x00000002, void * buffer&lt;br /&gt;
| s32 result&lt;br /&gt;
| See [[IPC_Command_Structure|IPC parameter type 1]] for explanation on buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150040&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
| Uses something at TLS+0x180&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160242&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA, u8 unknownB[32], u32 (buffer_size &amp;lt;&amp;lt; 14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x00000002, void * buffer&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[42]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[16]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[8], u32 unknownB[4], u64 unknownC, u32 unknownD&lt;br /&gt;
| Apparently output is a struct&lt;br /&gt;
|-&lt;br /&gt;
| 0x040100C2&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA, u32 unknownB, u32 unknownC, u32 (sizeof(*buffer) &amp;lt;&amp;lt; 14 &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402), void * buffer&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04020000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[16]&lt;br /&gt;
| Output seems to be a struct&lt;br /&gt;
|-&lt;br /&gt;
| 0x04030000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[41]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04040A40&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA[41]&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04060000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04070000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04080000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x040D0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x040E0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA, u32 unknownB&lt;br /&gt;
| Again, amiibo applet ignores value unknownA.&lt;br /&gt;
|-&lt;br /&gt;
| 0x040F0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA, u32 unknownB&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Pre-9.3.0-21==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| Shutdown&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| GetNFCState. This writes an output u8 to cmdreply[2]: 0 = not initialized, 1 = just initialized, 5 = data transfer ready, ...&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| (u8 input)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this. cmdreply[2] = actual output data size?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080100&lt;br /&gt;
| (&amp;lt;0x10-bytes starting at cmdreq[1]&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0042&lt;br /&gt;
| (u32 size, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0044&lt;br /&gt;
| (u32 size, 0x20, &amp;lt;procid set by kernel&amp;gt;, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0040&lt;br /&gt;
| (u16 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000F00C2&lt;br /&gt;
| (u32 unk0, u32 unk1, u32 unk2, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x802), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| Writes an output u32 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140000&lt;br /&gt;
| This writes an output 0x30-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150000&lt;br /&gt;
| This writes an output 0x2C-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NFC module savedata=&lt;br /&gt;
* &amp;quot;/nfp_backup.dat&amp;quot; Going by the filename this seems to contain data backed up from amiibo.&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=11807</id>
		<title>NFC Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=11807"/>
		<updated>2015-03-02T21:45:34Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The New3DS NFC module was added with [[8.1.0-0_New3DS]]. The Old3DS NFC module was added with [[9.3.0-21|9.3.0-X]].&lt;br /&gt;
&lt;br /&gt;
On New3DS NFC module uses the NFC hardware via the [[I2C_Services|i2c::NFC]] and [[GPIO_Services|gpio:NFC]] services. On Old3DS NFC module communicates with a NFC peripheral via IR with the IRUSER service.&lt;br /&gt;
&lt;br /&gt;
A total of 6 sessions can be open simultaneously for all of these services combined.&lt;br /&gt;
&lt;br /&gt;
=NFC services=&lt;br /&gt;
==NFC user service &amp;quot;nfc:u&amp;quot;==&lt;br /&gt;
This is the NFC service used by regular applications.&lt;br /&gt;
&lt;br /&gt;
This was first seen in the Super Smash Bros eShop demo (only in the exheader, the demo doesn&#039;t actually use it), but at that time no system-module was available for NFC on CDN. The first regular application to use this service was Super Smash Bros, with the v1.0.5 game-update, which used the new 9.3.0-21 command set.&lt;br /&gt;
&lt;br /&gt;
==NFC management service &amp;quot;nfc:m&amp;quot;==&lt;br /&gt;
This is used by the [[amiibo Settings]] applet.&lt;br /&gt;
&lt;br /&gt;
==NFC development service &amp;quot;nfc:dev&amp;quot;==&lt;br /&gt;
This service seems to be intended for use only on dev-units(or at least some of the command(s)).&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:p&amp;quot;==&lt;br /&gt;
This service is used by the mint library-applet, starting with [[9.3.0-21]]. This service was added to the mint service-access-control list with [[9.0.0-20]].&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:r&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:s&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
=&amp;quot;nfc:u&amp;quot; and &amp;quot;nfc:m&amp;quot; command set=&lt;br /&gt;
There are two different revisions of the NFC module. First version was introduced on New3DS only with firmware 8.1.0-0_New3DS. Second version made its appearance with 9.3.0-X, on both Old3DS and New3DS.&lt;br /&gt;
&lt;br /&gt;
These two versions are not interchangeable and not compatible, since the newer version uses a different command set and has no implemented commands from the older version. This does not introduce compatibility problems since no retail software used the NFC module before the Super Smash Bros for 3DS, whose NFC update required 9.3.0-21.&lt;br /&gt;
&lt;br /&gt;
==Post-9.3.0-21==&lt;br /&gt;
Commands for post-9.3.0-21 have been extracted by analyzing the amiibo Settings applet. Therefore this table may be missing commands. Note that the function name is actually a nickname for easeness of reading, as original function names have been stripped off the binaries.&lt;br /&gt;
&lt;br /&gt;
See [[IPC Command Structure]] for an explanation on how IPC communication works and how to use these functions.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Name&lt;br /&gt;
!  Input&lt;br /&gt;
!  Output&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| nfcInit&lt;br /&gt;
| u8 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020040&lt;br /&gt;
| nfcStop&lt;br /&gt;
| u8 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| ???&lt;br /&gt;
| u16 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| ???&lt;br /&gt;
|&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090002&lt;br /&gt;
| ???&lt;br /&gt;
| u32 pid, u32 pidPlaceholder&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA, u32 unknownB&lt;br /&gt;
| amiibo applet ignores value unknownA. It doesn&#039;t even read it from the command buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA, u32 unknownB&lt;br /&gt;
| amiibo applet also ignores value unknownA for this command.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u8 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| u32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[24]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[8], u32 unknownB[2], u32 unknownC&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140384&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA, u32 unknownB, u8 unknownB[48], u32 pid, u32 pidPlaceholder, u32 (buffer_size &amp;lt;&amp;lt; 14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x00000002, void * buffer&lt;br /&gt;
| s32 result&lt;br /&gt;
| See [[IPC_Command_Structure|IPC parameter type 1]] for explanation on buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150040&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
| Uses something at TLS+0x180&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160242&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA, u8 unknownB[32], u32 (buffer_size &amp;lt;&amp;lt; 14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x00000002, void * buffer&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[42]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[16]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[8], u32 unknownB[4], u64 unknownC, u32 unknownD&lt;br /&gt;
| Apparently output is a struct&lt;br /&gt;
|-&lt;br /&gt;
| 0x040100C2&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA, u32 unknownB, u32 unknownC, u32 (sizeof(*buffer) &amp;lt;&amp;lt; 14 &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402), void * buffer&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04020000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[16]&lt;br /&gt;
| Output seems to be a struct&lt;br /&gt;
|-&lt;br /&gt;
| 0x04030000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[41]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04040A40&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA[41]&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04060000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04070000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04080000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x040D0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x040E0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA, u32 unknownB&lt;br /&gt;
| Again, amiibo applet ignores value unknownA.&lt;br /&gt;
|-&lt;br /&gt;
| 0x040F0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA, u32 unknownB&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Pre-9.3.0-21==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| Shutdown&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| GetNFCState. This writes an output u8 to cmdreply[2]: 0 = not initialized, 1 = just initialized, 5 = data transfer ready, ...&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| (u8 input)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this. cmdreply[2] = actual output data size?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080100&lt;br /&gt;
| (&amp;lt;0x10-bytes starting at cmdreq[1]&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0042&lt;br /&gt;
| (u32 size, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0044&lt;br /&gt;
| (u32 size, 0x20, &amp;lt;procid set by kernel&amp;gt;, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0040&lt;br /&gt;
| (u16 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000F00C2&lt;br /&gt;
| (u32 unk0, u32 unk1, u32 unk2, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x802), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| Writes an output u32 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140000&lt;br /&gt;
| This writes an output 0x30-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150000&lt;br /&gt;
| This writes an output 0x2C-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NFC module savedata=&lt;br /&gt;
* &amp;quot;/nfp_backup.dat&amp;quot; Going by the filename this seems to contain data backed up from amiibo.&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=11806</id>
		<title>NFC Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=11806"/>
		<updated>2015-03-02T21:44:42Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The New3DS NFC module was added with [[8.1.0-0_New3DS]]. The Old3DS NFC module was added with [[9.3.0-21|9.3.0-X]].&lt;br /&gt;
&lt;br /&gt;
On New3DS NFC module uses the NFC hardware via the [[I2C_Services|i2c::NFC]] and [[GPIO_Services|gpio:NFC]] services. On Old3DS NFC module communicates with a NFC peripheral via IR with the IRUSER service.&lt;br /&gt;
&lt;br /&gt;
A total of 6 sessions can be open simultaneously for all of these services combined.&lt;br /&gt;
&lt;br /&gt;
=NFC services=&lt;br /&gt;
==NFC user service &amp;quot;nfc:u&amp;quot;==&lt;br /&gt;
This is the NFC service used by regular applications.&lt;br /&gt;
&lt;br /&gt;
This was first seen in the Super Smash Bros eShop demo (only in the exheader, the demo doesn&#039;t actually use it), but at that time no system-module was available for NFC on CDN. The first regular application to use this service was Super Smash Bros, with the v1.0.5 game-update, which used the new 9.3.0-21 command set.&lt;br /&gt;
&lt;br /&gt;
==NFC management service &amp;quot;nfc:m&amp;quot;==&lt;br /&gt;
This is used by the [[amiibo Settings]] applet.&lt;br /&gt;
&lt;br /&gt;
==NFC development service &amp;quot;nfc:dev&amp;quot;==&lt;br /&gt;
This service seems to be intended for use only on dev-units(or at least some of the command(s)).&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:p&amp;quot;==&lt;br /&gt;
This service is used by the mint library-applet, starting with [[9.3.0-21]]. This service was added to the mint service-access-control list with [[9.0.0-20]].&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:r&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:s&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
=&amp;quot;nfc:u&amp;quot; and &amp;quot;nfc:m&amp;quot; command set=&lt;br /&gt;
There are two different revisions of the NFC module. First version was introduced on New3DS only with firmware 8.1.0-0_New3DS. Second version made its appearance with 9.3.0-X, on both Old3DS and New3DS.&lt;br /&gt;
&lt;br /&gt;
These two versions are not interchangeable and not compatible, since the newer version uses a different command set and has no implemented commands from the older version. This does not introduce compatibility problems since no retail software used the NFC module before the Super Smash Bros for 3DS, whose NFC update required 9.3.0-21.&lt;br /&gt;
&lt;br /&gt;
==Post-9.3.0-21==&lt;br /&gt;
Commands for post-9.3.0-21 have been extracted by analyzing the amiibo Settings applet. Therefore this table may be missing commands. Note that the function name is actually a nickname for easeness of reading, as original function names have been stripped off the binaries.&lt;br /&gt;
&lt;br /&gt;
See [[IPC Command Structure]] for an explanation on how IPC communication works and how to use these functions.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Name&lt;br /&gt;
!  Input&lt;br /&gt;
!  Output&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| nfcInit&lt;br /&gt;
| u8 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020040&lt;br /&gt;
| nfcStop&lt;br /&gt;
| u8 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| ???&lt;br /&gt;
| u16 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| ???&lt;br /&gt;
|&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090002&lt;br /&gt;
| ???&lt;br /&gt;
| u32 pid, u32 pidPlaceholder&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA, u32 unknownB&lt;br /&gt;
| amiibo applet ignores value unknownA. It doesn&#039;t even read it from the command buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA, u32 unknownB&lt;br /&gt;
| amiibo applet also ignores value unknownA for this command.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u8 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| u32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[24]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[8], u32 unknownB[2], u32 unknownC&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140384&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA, u32 unknownB, u8 unknownB[48], u32 pid, u32 pidPlaceholder, u32 (buffer_size &amp;lt;&amp;lt; 14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x00000002, void * buffer&lt;br /&gt;
| s32 result&lt;br /&gt;
| See [[IPC_Command_Structure|IPC parameter type 1]] for explanation on buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150040&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
| Uses something at TLS+0x180&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160242&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA, u8 unknownB[32], u32 (buffer_size &amp;lt;&amp;lt; 14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x00000002, void * buffer&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[42]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[16]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[8], u32 unknownB[4], u64 unknownC, u32 unknownD&lt;br /&gt;
| Apparently output is a struct&lt;br /&gt;
|-&lt;br /&gt;
| 0x040100C2&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA, u32 unknownB, u32 unknownC, u32 (sizeof(*buffer) &amp;lt;&amp;lt; 14 | 0x402), void * buffer&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04020000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[16]&lt;br /&gt;
| Output seems to be a struct&lt;br /&gt;
|-&lt;br /&gt;
| 0x04030000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[41]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04040A40&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA[41]&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04060000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04070000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04080000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x040D0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x040E0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA, u32 unknownB&lt;br /&gt;
| Again, amiibo applet ignores value unknownA.&lt;br /&gt;
|-&lt;br /&gt;
| 0x040F0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA, u32 unknownB&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Pre-9.3.0-21==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| Shutdown&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| GetNFCState. This writes an output u8 to cmdreply[2]: 0 = not initialized, 1 = just initialized, 5 = data transfer ready, ...&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| (u8 input)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this. cmdreply[2] = actual output data size?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080100&lt;br /&gt;
| (&amp;lt;0x10-bytes starting at cmdreq[1]&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0042&lt;br /&gt;
| (u32 size, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0044&lt;br /&gt;
| (u32 size, 0x20, &amp;lt;procid set by kernel&amp;gt;, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0040&lt;br /&gt;
| (u16 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000F00C2&lt;br /&gt;
| (u32 unk0, u32 unk1, u32 unk2, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x802), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| Writes an output u32 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140000&lt;br /&gt;
| This writes an output 0x30-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150000&lt;br /&gt;
| This writes an output 0x2C-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NFC module savedata=&lt;br /&gt;
* &amp;quot;/nfp_backup.dat&amp;quot; Going by the filename this seems to contain data backed up from amiibo.&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=IPC&amp;diff=11802</id>
		<title>IPC</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=IPC&amp;diff=11802"/>
		<updated>2015-03-02T15:57:20Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The IPC commands are written to the Thread Local Storage, at offset 0x80. Every IPC command sent to services starts with a u32 header code, and parameters, if any, are written after this header. If the kernel was able to dispatch the request, the server replies with an error code at TLS+0x84, and after this code there is the response data, if any.&lt;br /&gt;
&lt;br /&gt;
The command header is a 32-bit integer that can be decompossed in the following parts:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-5&lt;br /&gt;
| Number of translate parameters (=y)&lt;br /&gt;
|-&lt;br /&gt;
| 6-11&lt;br /&gt;
| Number of normal parameters (=x)&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Unused&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| Command ID&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The entire command has the following structure:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Word&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| x&lt;br /&gt;
| Normal parameters&lt;br /&gt;
|-&lt;br /&gt;
| x&lt;br /&gt;
| y&lt;br /&gt;
| Translate parameters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Translate parameters are modified/translated transparently by the kernel. They are used to transfer handles/buffers between the different processes.&lt;br /&gt;
&lt;br /&gt;
The type of parameter is described by the bits 1-3 in the translation descriptor. Parameter types accepted for sending by the kernel are: 0, 1, 2, 5, 6, 7. &lt;br /&gt;
Type 0 is used to send handles across processes:&lt;br /&gt;
 if desc &amp;amp; 0x30 == 0x20:&lt;br /&gt;
   write process id to value&lt;br /&gt;
 else:&lt;br /&gt;
   translate handle&lt;br /&gt;
   if desc &amp;amp; 0x30 == 0x10:&lt;br /&gt;
     close handle for caller&lt;br /&gt;
&lt;br /&gt;
For replies, only 0, 1, 5, 6, 7 are allowed. In other words any type 2 fields must be zeroed before calling svcReplyAndReceive on the server-side. For replies type 0, 1, 2 are ignored. Types 5, 6, 7 do something with the mem pointer upon reply. The type 0 descriptor can be used to ignore parameters. The number of parameters covered by a type-0 descriptor is (desc &amp;gt;&amp;gt; 26) + 1.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Type&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;150&amp;quot; |  Usual form&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0x00000000&lt;br /&gt;
&amp;lt;handle&amp;gt;&lt;br /&gt;
| The corresponding value is a KHandle, that should be closed in calling process. Or zero otherwise.&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0x00000010&lt;br /&gt;
&amp;lt;handle&amp;gt;&lt;br /&gt;
| The corresponding value is a KHandle, that will be duplicated. Or zero otherwise.&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0x00000020&lt;br /&gt;
&amp;lt;placeholder&amp;gt;&lt;br /&gt;
| Let kernel set value to calling process ProcessID.&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0x00000002 &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; (size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; (static_buffer_id&amp;lt;&amp;lt;10)&lt;br /&gt;
&amp;lt;ptr&amp;gt;&lt;br /&gt;
| The corresponding value contains a ptr to a buffer of said size, that should be copied to an already set-up buffer in destination process at [[Thread Local Storage]] offset 0x180 + static_buffer_id*8. The static_buffer_id is only 4 bits, making it possible for at most up to 16 buffers in total per thread.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 0x00000004 &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; (size&amp;lt;&amp;lt;4)&lt;br /&gt;
| This is used for PXI commands input/output buffers. The address written to the destination cmd-buf is a phys-addr for a table located in the BASE memregion. This table contains the phys-addrs for the actual data, the array entries have the following format: {u32 *datachunk_physaddr, u32 datachunk_bytesize}.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 0x00000006&lt;br /&gt;
| Does nothing?&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 0x00000008&lt;br /&gt;
| This command will cause a kernelpanic.&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;0x0000000A | (size&amp;lt;&amp;lt;4)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;ptr&amp;gt;&lt;br /&gt;
| The corresponding value contains a ptr to a buffer of said size. It is mapped R- in the destination process??&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 0x0000000C &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; (size&amp;lt;&amp;lt;4)&lt;br /&gt;
&amp;lt;ptr&amp;gt;&lt;br /&gt;
| The corresponding value contains a ptr to a buffer of said size. It is mapped -W in the destination process??&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 0x0000000E &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; (size&amp;lt;&amp;lt;4)&lt;br /&gt;
&amp;lt;ptr&amp;gt;&lt;br /&gt;
| The corresponding value contains a ptr to a buffer of said size. It is mapped RW in the destination process??&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Buffers from commands 5,6,7 will get mapped at virtual address 0x04000000+ in destination process.&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=11800</id>
		<title>NFC Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=11800"/>
		<updated>2015-03-02T15:27:38Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: /* Post-9.3.0-21 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The New3DS NFC module was added with [[8.1.0-0_New3DS]]. The Old3DS NFC module was added with [[9.3.0-21|9.3.0-X]].&lt;br /&gt;
&lt;br /&gt;
On New3DS NFC module uses the NFC hardware via the [[I2C_Services|i2c::NFC]] and [[GPIO_Services|gpio:NFC]] services. On Old3DS NFC module communicates with a NFC peripheral via IR with the IRUSER service.&lt;br /&gt;
&lt;br /&gt;
A total of 6 sessions can be open simultaneously for all of these services combined.&lt;br /&gt;
&lt;br /&gt;
=NFC services=&lt;br /&gt;
==NFC user service &amp;quot;nfc:u&amp;quot;==&lt;br /&gt;
This is the NFC service used by regular applications.&lt;br /&gt;
&lt;br /&gt;
This was first seen in the Super Smash Bros eShop demo (only in the exheader, the demo doesn&#039;t actually use it), but at that time no system-module was available for NFC on CDN. The first regular application to use this service was Super Smash Bros, with the v1.0.5 game-update, which used the new 9.3.0-21 command set.&lt;br /&gt;
&lt;br /&gt;
==NFC management service &amp;quot;nfc:m&amp;quot;==&lt;br /&gt;
This is used by the [[amiibo Settings]] applet.&lt;br /&gt;
&lt;br /&gt;
==NFC development service &amp;quot;nfc:dev&amp;quot;==&lt;br /&gt;
This service seems to be intended for use only on dev-units(or at least some of the command(s)).&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:p&amp;quot;==&lt;br /&gt;
This service is used by the mint library-applet, starting with [[9.3.0-21]]. This service was added to the mint service-access-control list with [[9.0.0-20]].&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:r&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:s&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
=&amp;quot;nfc:u&amp;quot; and &amp;quot;nfc:m&amp;quot; command set=&lt;br /&gt;
There are two different revisions of the NFC module. First version was introduced on New3DS only with firmware 8.1.0-0_New3DS. Second version made its appearance with 9.3.0-X, on both Old3DS and New3DS.&lt;br /&gt;
&lt;br /&gt;
These two versions are not interchangeable and not compatible, since the newer version uses a different command set and has no implemented commands from the older version. This does not introduce compatibility problems since no retail software used the NFC module before the Super Smash Bros for 3DS, whose NFC update required 9.3.0-21.&lt;br /&gt;
&lt;br /&gt;
==Post-9.3.0-21==&lt;br /&gt;
Commands for post-9.3.0-21 have been extracted by analyzing the amiibo Settings applet. Therefore this table may be missing commands.&lt;br /&gt;
&lt;br /&gt;
Command header is stored at [[Thread Local Storage|TLS]]+0x80. Input and output parameters, if any, are set at TLS+0x84 onwards. If the command specifies has a parameter named &amp;quot;pid&amp;quot;, this value has to be set to 0x20, as the kernel will replace the next word (&amp;quot;pidPlaceholder&amp;quot; - which can be left uninitialized) with the process&#039; real PID (see [[IPC_Command_Structure]]).&lt;br /&gt;
&lt;br /&gt;
Note that the function name is actually a nickname for easeness of reading, as original function names have been stripped off the binaries.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Name&lt;br /&gt;
!  Input&lt;br /&gt;
!  Output&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| nfcInit&lt;br /&gt;
| u8 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020040&lt;br /&gt;
| nfcStop&lt;br /&gt;
| u8 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| ???&lt;br /&gt;
| u16 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| ???&lt;br /&gt;
|&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090002&lt;br /&gt;
| ???&lt;br /&gt;
| u32 pid, u32 pidPlaceholder&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u8 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| u32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[24]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[8], u32 unknownB[2], u32 unknownC&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140384&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA, u32 unknownB, u8 unknownB[48], u32 pid, u32 pidPlaceholder, u32 (buffer_size &amp;lt;&amp;lt; 14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x00000002, void * buffer&lt;br /&gt;
| s32 result&lt;br /&gt;
| See [[IPC_Command_Structure|IPC parameter type 1]] for explanation on buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150040&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
| Uses something at TLS+0x180&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[42]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[16]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[8], u32 unknownB[4], u64 unknownC, u32 unknownD&lt;br /&gt;
| Apparently output is a struct&lt;br /&gt;
|-&lt;br /&gt;
| 0x04060000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Pre-9.3.0-21==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| Shutdown&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| GetNFCState. This writes an output u8 to cmdreply[2]: 0 = not initialized, 1 = just initialized, 5 = data transfer ready, ...&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| (u8 input)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this. cmdreply[2] = actual output data size?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080100&lt;br /&gt;
| (&amp;lt;0x10-bytes starting at cmdreq[1]&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0042&lt;br /&gt;
| (u32 size, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0044&lt;br /&gt;
| (u32 size, 0x20, &amp;lt;procid set by kernel&amp;gt;, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0040&lt;br /&gt;
| (u16 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000F00C2&lt;br /&gt;
| (u32 unk0, u32 unk1, u32 unk2, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x802), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| Writes an output u32 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140000&lt;br /&gt;
| This writes an output 0x30-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150000&lt;br /&gt;
| This writes an output 0x2C-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NFC module savedata=&lt;br /&gt;
* &amp;quot;/nfp_backup.dat&amp;quot; Going by the filename this seems to contain data backed up from amiibo.&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=11799</id>
		<title>NFC Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=11799"/>
		<updated>2015-03-02T15:21:21Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: /* Post-9.3.0-21 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The New3DS NFC module was added with [[8.1.0-0_New3DS]]. The Old3DS NFC module was added with [[9.3.0-21|9.3.0-X]].&lt;br /&gt;
&lt;br /&gt;
On New3DS NFC module uses the NFC hardware via the [[I2C_Services|i2c::NFC]] and [[GPIO_Services|gpio:NFC]] services. On Old3DS NFC module communicates with a NFC peripheral via IR with the IRUSER service.&lt;br /&gt;
&lt;br /&gt;
A total of 6 sessions can be open simultaneously for all of these services combined.&lt;br /&gt;
&lt;br /&gt;
=NFC services=&lt;br /&gt;
==NFC user service &amp;quot;nfc:u&amp;quot;==&lt;br /&gt;
This is the NFC service used by regular applications.&lt;br /&gt;
&lt;br /&gt;
This was first seen in the Super Smash Bros eShop demo (only in the exheader, the demo doesn&#039;t actually use it), but at that time no system-module was available for NFC on CDN. The first regular application to use this service was Super Smash Bros, with the v1.0.5 game-update, which used the new 9.3.0-21 command set.&lt;br /&gt;
&lt;br /&gt;
==NFC management service &amp;quot;nfc:m&amp;quot;==&lt;br /&gt;
This is used by the [[amiibo Settings]] applet.&lt;br /&gt;
&lt;br /&gt;
==NFC development service &amp;quot;nfc:dev&amp;quot;==&lt;br /&gt;
This service seems to be intended for use only on dev-units(or at least some of the command(s)).&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:p&amp;quot;==&lt;br /&gt;
This service is used by the mint library-applet, starting with [[9.3.0-21]]. This service was added to the mint service-access-control list with [[9.0.0-20]].&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:r&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:s&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
=&amp;quot;nfc:u&amp;quot; and &amp;quot;nfc:m&amp;quot; command set=&lt;br /&gt;
There are two different revisions of the NFC module. First version was introduced on New3DS only with firmware 8.1.0-0_New3DS. Second version made its appearance with 9.3.0-X, on both Old3DS and New3DS.&lt;br /&gt;
&lt;br /&gt;
These two versions are not interchangeable and not compatible, since the newer version uses a different command set and has no implemented commands from the older version. This does not introduce compatibility problems since no retail software used the NFC module before the Super Smash Bros for 3DS, whose NFC update required 9.3.0-21.&lt;br /&gt;
&lt;br /&gt;
==Post-9.3.0-21==&lt;br /&gt;
Commands for post-9.3.0-21 have been extracted by analyzing the amiibo Settings applet. Therefore this table may be missing commands.&lt;br /&gt;
&lt;br /&gt;
Command header is stored at [[Thread Local Storage|TLS]]+0x80. Input and output parameters, if any, are set at TLS+0x84 onwards. If the command specifies has a parameter named &amp;quot;pid&amp;quot;, this value has to be set to 0x20, as the kernel will replace the next word (&amp;quot;pidPlaceholder&amp;quot; - which can be left uninitialized) with the process&#039; real PID (see [[IPC_Command_Structure]]).&lt;br /&gt;
&lt;br /&gt;
Note that the function name is actually a nickname for easeness of reading, as original function names have been stripped off the binaries.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Name&lt;br /&gt;
!  Input&lt;br /&gt;
!  Output&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| nfcInit&lt;br /&gt;
| u8 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020040&lt;br /&gt;
| nfcStop&lt;br /&gt;
| u8 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| ???&lt;br /&gt;
| u16 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| ???&lt;br /&gt;
|&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090002&lt;br /&gt;
| ???&lt;br /&gt;
| u32 pid, u32 pidPlaceholder&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u8 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| u32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[24]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[8], u32 unknownB[2], u32 unknownC&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140384&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA, u32 unknownB, u8 unknownB[48], u32 pid, u32 pidPlaceholder, u32 (buffer_size &amp;lt;&amp;lt; 14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x00000002, void * buffer&lt;br /&gt;
| s32 result&lt;br /&gt;
| See [[IPC_Command_Structure|IPC parameter type 1]] for explanation on buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150040&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[42]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[16]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[8], u32 unknownB[4], u64 unknownC, u32 unknownD&lt;br /&gt;
| Apparently output is a struct&lt;br /&gt;
|-&lt;br /&gt;
| 0x04060000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Pre-9.3.0-21==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| Shutdown&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| GetNFCState. This writes an output u8 to cmdreply[2]: 0 = not initialized, 1 = just initialized, 5 = data transfer ready, ...&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| (u8 input)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this. cmdreply[2] = actual output data size?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080100&lt;br /&gt;
| (&amp;lt;0x10-bytes starting at cmdreq[1]&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0042&lt;br /&gt;
| (u32 size, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0044&lt;br /&gt;
| (u32 size, 0x20, &amp;lt;procid set by kernel&amp;gt;, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0040&lt;br /&gt;
| (u16 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000F00C2&lt;br /&gt;
| (u32 unk0, u32 unk1, u32 unk2, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x802), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| Writes an output u32 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140000&lt;br /&gt;
| This writes an output 0x30-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150000&lt;br /&gt;
| This writes an output 0x2C-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NFC module savedata=&lt;br /&gt;
* &amp;quot;/nfp_backup.dat&amp;quot; Going by the filename this seems to contain data backed up from amiibo.&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=11798</id>
		<title>NFC Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=11798"/>
		<updated>2015-03-02T15:13:05Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: /* Post-9.3.0-21 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The New3DS NFC module was added with [[8.1.0-0_New3DS]]. The Old3DS NFC module was added with [[9.3.0-21|9.3.0-X]].&lt;br /&gt;
&lt;br /&gt;
On New3DS NFC module uses the NFC hardware via the [[I2C_Services|i2c::NFC]] and [[GPIO_Services|gpio:NFC]] services. On Old3DS NFC module communicates with a NFC peripheral via IR with the IRUSER service.&lt;br /&gt;
&lt;br /&gt;
A total of 6 sessions can be open simultaneously for all of these services combined.&lt;br /&gt;
&lt;br /&gt;
=NFC services=&lt;br /&gt;
==NFC user service &amp;quot;nfc:u&amp;quot;==&lt;br /&gt;
This is the NFC service used by regular applications.&lt;br /&gt;
&lt;br /&gt;
This was first seen in the Super Smash Bros eShop demo (only in the exheader, the demo doesn&#039;t actually use it), but at that time no system-module was available for NFC on CDN. The first regular application to use this service was Super Smash Bros, with the v1.0.5 game-update, which used the new 9.3.0-21 command set.&lt;br /&gt;
&lt;br /&gt;
==NFC management service &amp;quot;nfc:m&amp;quot;==&lt;br /&gt;
This is used by the [[amiibo Settings]] applet.&lt;br /&gt;
&lt;br /&gt;
==NFC development service &amp;quot;nfc:dev&amp;quot;==&lt;br /&gt;
This service seems to be intended for use only on dev-units(or at least some of the command(s)).&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:p&amp;quot;==&lt;br /&gt;
This service is used by the mint library-applet, starting with [[9.3.0-21]]. This service was added to the mint service-access-control list with [[9.0.0-20]].&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:r&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:s&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
=&amp;quot;nfc:u&amp;quot; and &amp;quot;nfc:m&amp;quot; command set=&lt;br /&gt;
There are two different revisions of the NFC module. First version was introduced on New3DS only with firmware 8.1.0-0_New3DS. Second version made its appearance with 9.3.0-X, on both Old3DS and New3DS.&lt;br /&gt;
&lt;br /&gt;
These two versions are not interchangeable and not compatible, since the newer version uses a different command set and has no implemented commands from the older version. This does not introduce compatibility problems since no retail software used the NFC module before the Super Smash Bros for 3DS, whose NFC update required 9.3.0-21.&lt;br /&gt;
&lt;br /&gt;
==Post-9.3.0-21==&lt;br /&gt;
Commands for post-9.3.0-21 have been extracted by analyzing the amiibo Settings applet. Therefore this table may be missing commands.&lt;br /&gt;
&lt;br /&gt;
Command header is stored at [[Thread Local Storage|TLS]]+0x80. Input and output parameters, if any, are set at TLS+0x84 onwards. If the command specifies has a parameter named &amp;quot;pid&amp;quot;, this value has to be set to 0x20, as the kernel will replace the next word (&amp;quot;pidPlaceholder&amp;quot; - which can be left uninitialized) with the process&#039; real PID (see [[IPC_Command_Structure]]).&lt;br /&gt;
&lt;br /&gt;
Note that the function name is actually a nickname for easeness of reading, as original function names have been stripped off the binaries.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Name&lt;br /&gt;
!  Input&lt;br /&gt;
!  Output&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| nfcInit&lt;br /&gt;
| u8 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020040&lt;br /&gt;
| nfcStop&lt;br /&gt;
| u8 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| ???&lt;br /&gt;
| u16 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| ???&lt;br /&gt;
|&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090002&lt;br /&gt;
| ???&lt;br /&gt;
| u32 pid, u32 pidPlaceholder&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u8 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| u32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[24]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[8], u32 unknownB[2], u32 unknownC&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140384&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA, u32 unknownB, u8 unknownB[48], u32 pid, u32 pidPlaceholder, u32 (buffer_size &amp;lt;&amp;lt; 14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x00000002, void * buffer&lt;br /&gt;
| s32 result&lt;br /&gt;
| See [[IPC_Command_Structure|IPC parameter type 1]] for explanation on buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150040&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[42]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[16]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04060000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Pre-9.3.0-21==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| Shutdown&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| GetNFCState. This writes an output u8 to cmdreply[2]: 0 = not initialized, 1 = just initialized, 5 = data transfer ready, ...&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| (u8 input)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this. cmdreply[2] = actual output data size?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080100&lt;br /&gt;
| (&amp;lt;0x10-bytes starting at cmdreq[1]&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0042&lt;br /&gt;
| (u32 size, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0044&lt;br /&gt;
| (u32 size, 0x20, &amp;lt;procid set by kernel&amp;gt;, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0040&lt;br /&gt;
| (u16 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000F00C2&lt;br /&gt;
| (u32 unk0, u32 unk1, u32 unk2, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x802), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| Writes an output u32 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140000&lt;br /&gt;
| This writes an output 0x30-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150000&lt;br /&gt;
| This writes an output 0x2C-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NFC module savedata=&lt;br /&gt;
* &amp;quot;/nfp_backup.dat&amp;quot; Going by the filename this seems to contain data backed up from amiibo.&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=11797</id>
		<title>NFC Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=11797"/>
		<updated>2015-03-02T15:12:01Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The New3DS NFC module was added with [[8.1.0-0_New3DS]]. The Old3DS NFC module was added with [[9.3.0-21|9.3.0-X]].&lt;br /&gt;
&lt;br /&gt;
On New3DS NFC module uses the NFC hardware via the [[I2C_Services|i2c::NFC]] and [[GPIO_Services|gpio:NFC]] services. On Old3DS NFC module communicates with a NFC peripheral via IR with the IRUSER service.&lt;br /&gt;
&lt;br /&gt;
A total of 6 sessions can be open simultaneously for all of these services combined.&lt;br /&gt;
&lt;br /&gt;
=NFC services=&lt;br /&gt;
==NFC user service &amp;quot;nfc:u&amp;quot;==&lt;br /&gt;
This is the NFC service used by regular applications.&lt;br /&gt;
&lt;br /&gt;
This was first seen in the Super Smash Bros eShop demo (only in the exheader, the demo doesn&#039;t actually use it), but at that time no system-module was available for NFC on CDN. The first regular application to use this service was Super Smash Bros, with the v1.0.5 game-update, which used the new 9.3.0-21 command set.&lt;br /&gt;
&lt;br /&gt;
==NFC management service &amp;quot;nfc:m&amp;quot;==&lt;br /&gt;
This is used by the [[amiibo Settings]] applet.&lt;br /&gt;
&lt;br /&gt;
==NFC development service &amp;quot;nfc:dev&amp;quot;==&lt;br /&gt;
This service seems to be intended for use only on dev-units(or at least some of the command(s)).&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:p&amp;quot;==&lt;br /&gt;
This service is used by the mint library-applet, starting with [[9.3.0-21]]. This service was added to the mint service-access-control list with [[9.0.0-20]].&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:r&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:s&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
=&amp;quot;nfc:u&amp;quot; and &amp;quot;nfc:m&amp;quot; command set=&lt;br /&gt;
There are two different revisions of the NFC module. First version was introduced on New3DS only with firmware 8.1.0-0_New3DS. Second version made its appearance with 9.3.0-X, on both Old3DS and New3DS.&lt;br /&gt;
&lt;br /&gt;
These two versions are not interchangeable and not compatible, since the newer version uses a different command set and has no implemented commands from the older version. This does not introduce compatibility problems since no retail software used the NFC module before the Super Smash Bros for 3DS, whose NFC update required 9.3.0-21.&lt;br /&gt;
&lt;br /&gt;
==Post-9.3.0-21==&lt;br /&gt;
Commands for post-9.3.0-21 have been extracted by analyzing the amiibo Settings applet. Therefore this table may be missing commands.&lt;br /&gt;
&lt;br /&gt;
Command header is stored at [[Thread Local Storage|TLS]]+0x80. Input and output parameters, if any, are set at TLS+0x84 onwards. If the command specifies has a parameter named &amp;quot;pid&amp;quot;, this value has to be set to 0x20, as the kernel will replace the next word (&amp;quot;pidPlaceholder&amp;quot;) with the process&#039; real PID (see [[IPC_Command_Structure]]).&lt;br /&gt;
&lt;br /&gt;
Note that the function name is actually a nickname for easeness of reading, as original function names have been stripped off the binaries.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Name&lt;br /&gt;
!  Input&lt;br /&gt;
!  Output&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| nfcInit&lt;br /&gt;
| u8 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020040&lt;br /&gt;
| nfcStop&lt;br /&gt;
| u8 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| ???&lt;br /&gt;
| u16 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| ???&lt;br /&gt;
|&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090002&lt;br /&gt;
| ???&lt;br /&gt;
| u32 pid, u32 pidPlaceholder&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u8 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| u32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[24]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[8], u32 unknownB[2], u32 unknownC&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140384&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA, u32 unknownB, u8 unknownB[48], u32 pid, u32 pidPlaceholder, u32 (buffer_size &amp;lt;&amp;lt; 14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x00000002, void * buffer&lt;br /&gt;
| s32 result&lt;br /&gt;
| See [[IPC_Command_Structure|IPC parameter type 1]] for explanation on buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150040&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[42]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[16]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04060000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Pre-9.3.0-21==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| Shutdown&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| GetNFCState. This writes an output u8 to cmdreply[2]: 0 = not initialized, 1 = just initialized, 5 = data transfer ready, ...&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| (u8 input)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this. cmdreply[2] = actual output data size?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080100&lt;br /&gt;
| (&amp;lt;0x10-bytes starting at cmdreq[1]&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0042&lt;br /&gt;
| (u32 size, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0044&lt;br /&gt;
| (u32 size, 0x20, &amp;lt;procid set by kernel&amp;gt;, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0040&lt;br /&gt;
| (u16 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000F00C2&lt;br /&gt;
| (u32 unk0, u32 unk1, u32 unk2, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x802), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| Writes an output u32 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140000&lt;br /&gt;
| This writes an output 0x30-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150000&lt;br /&gt;
| This writes an output 0x2C-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NFC module savedata=&lt;br /&gt;
* &amp;quot;/nfp_backup.dat&amp;quot; Going by the filename this seems to contain data backed up from amiibo.&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=11795</id>
		<title>NFC Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=11795"/>
		<updated>2015-03-02T11:29:53Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The New3DS NFC module was added with [[8.1.0-0_New3DS]]. The Old3DS NFC module was added with [[9.3.0-21|9.3.0-X]].&lt;br /&gt;
&lt;br /&gt;
On New3DS NFC module uses the NFC hardware via the [[I2C_Services|i2c::NFC]] and [[GPIO_Services|gpio:NFC]] services. On Old3DS NFC module communicates with a NFC peripheral via IR with the IRUSER service.&lt;br /&gt;
&lt;br /&gt;
A total of 6 sessions can be open simultaneously for all of these services combined.&lt;br /&gt;
&lt;br /&gt;
=NFC services=&lt;br /&gt;
==NFC user service &amp;quot;nfc:u&amp;quot;==&lt;br /&gt;
This is the NFC service used by regular applications.&lt;br /&gt;
&lt;br /&gt;
This was first seen in the Super Smash Bros eShop demo (only in the exheader, the demo doesn&#039;t actually use it), but at that time no system-module was available for NFC on CDN. The first regular application to use this service was Super Smash Bros, with the v1.0.5 game-update, which used the new 9.3.0-21 command set.&lt;br /&gt;
&lt;br /&gt;
==NFC management service &amp;quot;nfc:m&amp;quot;==&lt;br /&gt;
This is used by the [[amiibo Settings]] applet.&lt;br /&gt;
&lt;br /&gt;
==NFC development service &amp;quot;nfc:dev&amp;quot;==&lt;br /&gt;
This service seems to be intended for use only on dev-units(or at least some of the command(s)).&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:p&amp;quot;==&lt;br /&gt;
This service is used by the mint library-applet, starting with [[9.3.0-21]]. This service was added to the mint service-access-control list with [[9.0.0-20]].&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:r&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:s&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
=&amp;quot;nfc:u&amp;quot; and &amp;quot;nfc:m&amp;quot; command set=&lt;br /&gt;
There are two different revisions of the NFC module. First version was introduced on New3DS only with firmware 8.1.0-0_New3DS. Second version made its appearance with 9.3.0-X, on both Old3DS and New3DS.&lt;br /&gt;
&lt;br /&gt;
These two versions are not interchangeable and not compatible, since the newer version uses a different command set and has no implemented commands from the older version. This does not introduce compatibility problems since no retail software used the NFC module before the Super Smash Bros for 3DS, whose NFC update required 9.3.0-21.&lt;br /&gt;
&lt;br /&gt;
==Post-9.3.0-21==&lt;br /&gt;
Commands for post-9.3.0-21 have been extracted by analyzing the amiibo Settings applet. Therefore this table may be missing commands.&lt;br /&gt;
&lt;br /&gt;
Command header is stored at [[Thread Local Storage|TLS]]+0x80. Input and output parameters, if any, are set at TLS+0x84 onwards. If the command specifies has a parameter named &amp;quot;pid&amp;quot;, this value has to be set to 0x20, as the kernel will replace the next word (&amp;quot;pidPlaceholder&amp;quot;) with the process&#039; real PID (see [[IPC_Command_Structure]]).&lt;br /&gt;
&lt;br /&gt;
Note that the function name is actually a nickname for easeness of reading, as original function names have been stripped off the binaries.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Name&lt;br /&gt;
!  Input&lt;br /&gt;
!  Output&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| nfcInit&lt;br /&gt;
| u8 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020040&lt;br /&gt;
| nfcStop&lt;br /&gt;
| u8 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| ???&lt;br /&gt;
| u16 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090002&lt;br /&gt;
| ???&lt;br /&gt;
| u32 pid, u32 pidPlaceholder&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| u32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u8 unknownA[0x60]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[8], u32 unknownB[2], u32 unknownC&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140384&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA, u32 unknownB, u8 unknownB[0x30], u32 pid, u32 pidPlaceholder, u32 (buffer_size &amp;lt;&amp;lt; 14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x00000002, u32 * buffer&lt;br /&gt;
| s32 result&lt;br /&gt;
| See [[IPC_Command_Structure|IPC parameter type 1]] for explanation on buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150040&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u8 unknownA[0xA8]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04060000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Pre-9.3.0-21==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| Shutdown&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| GetNFCState. This writes an output u8 to cmdreply[2]: 0 = not initialized, 1 = just initialized, 5 = data transfer ready, ...&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| (u8 input)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this. cmdreply[2] = actual output data size?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080100&lt;br /&gt;
| (&amp;lt;0x10-bytes starting at cmdreq[1]&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0042&lt;br /&gt;
| (u32 size, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0044&lt;br /&gt;
| (u32 size, 0x20, &amp;lt;procid set by kernel&amp;gt;, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0040&lt;br /&gt;
| (u16 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000F00C2&lt;br /&gt;
| (u32 unk0, u32 unk1, u32 unk2, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x802), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| Writes an output u32 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140000&lt;br /&gt;
| This writes an output 0x30-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150000&lt;br /&gt;
| This writes an output 0x2C-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NFC module savedata=&lt;br /&gt;
* &amp;quot;/nfp_backup.dat&amp;quot; Going by the filename this seems to contain data backed up from amiibo.&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=11794</id>
		<title>NFC Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=11794"/>
		<updated>2015-03-02T10:24:26Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The New3DS NFC module was added with [[8.1.0-0_New3DS]]. The Old3DS NFC module was added with [[9.3.0-21|9.3.0-X]].&lt;br /&gt;
&lt;br /&gt;
On New3DS NFC module uses the NFC hardware via the [[I2C_Services|i2c::NFC]] and [[GPIO_Services|gpio:NFC]] services. On Old3DS NFC module communicates with a NFC peripheral via IR with the IRUSER service.&lt;br /&gt;
&lt;br /&gt;
A total of 6 sessions can be open simultaneously for all of these services combined.&lt;br /&gt;
&lt;br /&gt;
=NFC services=&lt;br /&gt;
==NFC user service &amp;quot;nfc:u&amp;quot;==&lt;br /&gt;
This is the NFC service used by regular applications.&lt;br /&gt;
&lt;br /&gt;
This was first seen in the Super Smash Bros eShop demo (only in the exheader, the demo doesn&#039;t actually use it), but at that time no system-module was available for NFC on CDN. The first regular application to use this service was Super Smash Bros, with the v1.0.5 game-update, which used the new 9.3.0-21 command set.&lt;br /&gt;
&lt;br /&gt;
==NFC management service &amp;quot;nfc:m&amp;quot;==&lt;br /&gt;
This is used by the [[amiibo Settings]] applet.&lt;br /&gt;
&lt;br /&gt;
==NFC development service &amp;quot;nfc:dev&amp;quot;==&lt;br /&gt;
This service seems to be intended for use only on dev-units(or at least some of the command(s)).&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:p&amp;quot;==&lt;br /&gt;
This service is used by the mint library-applet, starting with [[9.3.0-21]]. This service was added to the mint service-access-control list with [[9.0.0-20]].&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:r&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:s&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
=&amp;quot;nfc:u&amp;quot; and &amp;quot;nfc:m&amp;quot; command set=&lt;br /&gt;
There are two different revisions of the NFC module. First version was introduced on New3DS only with firmware 8.1.0-0_New3DS. Second version made its appearance with 9.3.0-X, on both Old3DS and New3DS.&lt;br /&gt;
&lt;br /&gt;
These two versions are not interchangeable and not compatible, since the newer version uses a different command set and has no implemented commands from the older version. This does not introduce compatibility problems since no retail software used the NFC module before the Super Smash Bros for 3DS, whose NFC update required 9.3.0-21.&lt;br /&gt;
&lt;br /&gt;
==Post-9.3.0-21==&lt;br /&gt;
Commands for post-9.3.0-21 have been extracted by analyzing the amiibo Settings applet. Therefore this table may be missing commands.&lt;br /&gt;
&lt;br /&gt;
Command header is stored at TLS+0x80. Input and output parameters, if any, are set at TLS+0x84 onwards. If the command specifies has a parameter named &amp;quot;pid&amp;quot;, this value has to be set to 0x20, as the kernel will replace this magic value with the process&#039; real PID.&lt;br /&gt;
&lt;br /&gt;
Note that the function name is actually a nickname for easeness of reading, as original function names have been stripped off the binaries.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Name&lt;br /&gt;
!  Input&lt;br /&gt;
!  Output&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| nfcInit&lt;br /&gt;
| u8 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020040&lt;br /&gt;
| nfcStop&lt;br /&gt;
| u8 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| ???&lt;br /&gt;
| u16 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090002&lt;br /&gt;
| ???&lt;br /&gt;
| u32 pid&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| u32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u8 unknownA[0x60]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[8], u32 unknownB[2], u32 unknownC&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150040&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u8 unknownA[0xA8]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04060000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Pre-9.3.0-21==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| Shutdown&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| GetNFCState. This writes an output u8 to cmdreply[2]: 0 = not initialized, 1 = just initialized, 5 = data transfer ready, ...&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| (u8 input)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this. cmdreply[2] = actual output data size?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080100&lt;br /&gt;
| (&amp;lt;0x10-bytes starting at cmdreq[1]&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0042&lt;br /&gt;
| (u32 size, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0044&lt;br /&gt;
| (u32 size, 0x20, &amp;lt;procid set by kernel&amp;gt;, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0040&lt;br /&gt;
| (u16 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000F00C2&lt;br /&gt;
| (u32 unk0, u32 unk1, u32 unk2, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x802), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| Writes an output u32 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140000&lt;br /&gt;
| This writes an output 0x30-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150000&lt;br /&gt;
| This writes an output 0x2C-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NFC module savedata=&lt;br /&gt;
* &amp;quot;/nfp_backup.dat&amp;quot; Going by the filename this seems to contain data backed up from amiibo.&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=11793</id>
		<title>NFC Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=11793"/>
		<updated>2015-03-01T22:13:06Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The New3DS NFC module was added with [[8.1.0-0_New3DS]]. The Old3DS NFC module was added with [[9.3.0-21|9.3.0-X]].&lt;br /&gt;
&lt;br /&gt;
On New3DS NFC module uses the NFC hardware via the [[I2C_Services|i2c::NFC]] and [[GPIO_Services|gpio:NFC]] services. On Old3DS NFC module communicates with a NFC peripheral via IR with the IRUSER service.&lt;br /&gt;
&lt;br /&gt;
A total of 6 sessions can be open simultaneously for all of these services combined.&lt;br /&gt;
&lt;br /&gt;
=NFC services=&lt;br /&gt;
==NFC user service &amp;quot;nfc:u&amp;quot;==&lt;br /&gt;
This is the NFC service used by regular applications.&lt;br /&gt;
&lt;br /&gt;
This was first seen in the Super Smash Bros eShop demo (only in the exheader, the demo doesn&#039;t actually use it), but at that time no system-module was available for NFC on CDN. The first regular application to use this service was Super Smash Bros, with the v1.0.5 game-update, which used the new 9.3.0-21 command set.&lt;br /&gt;
&lt;br /&gt;
==NFC management service &amp;quot;nfc:m&amp;quot;==&lt;br /&gt;
This is used by the [[amiibo Settings]] applet.&lt;br /&gt;
&lt;br /&gt;
==NFC development service &amp;quot;nfc:dev&amp;quot;==&lt;br /&gt;
This service seems to be intended for use only on dev-units(or at least some of the command(s)).&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:p&amp;quot;==&lt;br /&gt;
This service is used by the mint library-applet, starting with [[9.3.0-21]]. This service was added to the mint service-access-control list with [[9.0.0-20]].&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:r&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:s&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
=&amp;quot;nfc:u&amp;quot; and &amp;quot;nfc:m&amp;quot; command set=&lt;br /&gt;
There are two different revisions of the NFC module. First version was introduced on New3DS only with firmware 8.1.0-0_New3DS. Second version made its appearance with 9.3.0-X, on both Old3DS and New3DS.&lt;br /&gt;
&lt;br /&gt;
These two versions are not interchangeable and not compatible, since the newer version uses a different command set and has no implemented commands from the older version. This does not introduce compatibility problems since no retail software used the NFC module before the Super Smash Bros for 3DS, whose NFC update required 9.3.0-21.&lt;br /&gt;
&lt;br /&gt;
==Post-9.3.0-21==&lt;br /&gt;
Commands for post-9.3.0-21 have been extracted by analyzing the amiibo Settings applet. Therefore this table may be missing commands.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Name&lt;br /&gt;
!  Input&lt;br /&gt;
!  Output&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| nfcInit&lt;br /&gt;
| u8 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020040&lt;br /&gt;
| nfcStop&lt;br /&gt;
| u8 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| ???&lt;br /&gt;
| u16 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090002&lt;br /&gt;
| ???&lt;br /&gt;
| u32 pid&lt;br /&gt;
| s32 result&lt;br /&gt;
| &amp;quot;pid&amp;quot; must be set to 0x20&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| u32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[8], u32 unknownB[2], u32 unknownC&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150040&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04060000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Pre-9.3.0-21==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| Shutdown&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| GetNFCState. This writes an output u8 to cmdreply[2]: 0 = not initialized, 1 = just initialized, 5 = data transfer ready, ...&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| (u8 input)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this. cmdreply[2] = actual output data size?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080100&lt;br /&gt;
| (&amp;lt;0x10-bytes starting at cmdreq[1]&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0042&lt;br /&gt;
| (u32 size, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0044&lt;br /&gt;
| (u32 size, 0x20, &amp;lt;procid set by kernel&amp;gt;, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0040&lt;br /&gt;
| (u16 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000F00C2&lt;br /&gt;
| (u32 unk0, u32 unk1, u32 unk2, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x802), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| Writes an output u32 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140000&lt;br /&gt;
| This writes an output 0x30-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150000&lt;br /&gt;
| This writes an output 0x2C-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NFC module savedata=&lt;br /&gt;
* &amp;quot;/nfp_backup.dat&amp;quot; Going by the filename this seems to contain data backed up from amiibo.&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=11792</id>
		<title>NFC Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=11792"/>
		<updated>2015-03-01T22:04:42Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The New3DS NFC module was added with [[8.1.0-0_New3DS]]. The Old3DS NFC module was added with [[9.3.0-21|9.3.0-X]].&lt;br /&gt;
&lt;br /&gt;
On New3DS NFC module uses the NFC hardware via the [[I2C_Services|i2c::NFC]] and [[GPIO_Services|gpio:NFC]] services. On Old3DS NFC module communicates with a NFC peripheral via IR with the IRUSER service.&lt;br /&gt;
&lt;br /&gt;
A total of 6 sessions can be open simultaneously for all of these services combined.&lt;br /&gt;
&lt;br /&gt;
=NFC services=&lt;br /&gt;
==NFC user service &amp;quot;nfc:u&amp;quot;==&lt;br /&gt;
This is the NFC service used by regular applications.&lt;br /&gt;
&lt;br /&gt;
This was first seen in the Super Smash Bros eShop demo (only in the exheader, the demo doesn&#039;t actually use it), but at that time no system-module was available for NFC on CDN. The first regular application to use this service was Super Smash Bros, with the v1.0.5 game-update, which used the new 9.3.0-21 command set.&lt;br /&gt;
&lt;br /&gt;
==NFC management service &amp;quot;nfc:m&amp;quot;==&lt;br /&gt;
This is used by the [[amiibo Settings]] applet.&lt;br /&gt;
&lt;br /&gt;
==NFC development service &amp;quot;nfc:dev&amp;quot;==&lt;br /&gt;
This service seems to be intended for use only on dev-units(or at least some of the command(s)).&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:p&amp;quot;==&lt;br /&gt;
This service is used by the mint library-applet, starting with [[9.3.0-21]]. This service was added to the mint service-access-control list with [[9.0.0-20]].&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:r&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:s&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
=&amp;quot;nfc:u&amp;quot; and &amp;quot;nfc:m&amp;quot; command set=&lt;br /&gt;
There are two different revisions of the NFC module. First version was introduced on New3DS only with firmware 8.1.0-0_New3DS. Second version made its appearance with 9.3.0-X, on both Old3DS and New3DS.&lt;br /&gt;
&lt;br /&gt;
These two versions are not interchangeable and not compatible, since the newer version uses a different command set and has no implemented commands from the older version. This does not introduce compatibility problems since no retail software used the NFC module before the Super Smash Bros for 3DS, whose NFC update required 9.3.0-21.&lt;br /&gt;
&lt;br /&gt;
==Post-9.3.0-21==&lt;br /&gt;
Commands for post-9.3.0-21 have been extracted by analyzing the amiibo Settings applet. Therefore this table may be missing commands.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Name&lt;br /&gt;
!  Input&lt;br /&gt;
!  Output&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| nfcInit&lt;br /&gt;
| u8 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020040&lt;br /&gt;
| nfcStop&lt;br /&gt;
| u8 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| ???&lt;br /&gt;
| u16 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| u32 result, u32 unknownA&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[8], u32 unknownB[2], u32 unknownC&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150040&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA&lt;br /&gt;
| s32 result&lt;br /&gt;
|-&lt;br /&gt;
| 0x04060000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Pre-9.3.0-21==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| Shutdown&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| GetNFCState. This writes an output u8 to cmdreply[2]: 0 = not initialized, 1 = just initialized, 5 = data transfer ready, ...&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| (u8 input)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this. cmdreply[2] = actual output data size?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080100&lt;br /&gt;
| (&amp;lt;0x10-bytes starting at cmdreq[1]&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0042&lt;br /&gt;
| (u32 size, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0044&lt;br /&gt;
| (u32 size, 0x20, &amp;lt;procid set by kernel&amp;gt;, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0040&lt;br /&gt;
| (u16 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000F00C2&lt;br /&gt;
| (u32 unk0, u32 unk1, u32 unk2, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x802), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| Writes an output u32 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140000&lt;br /&gt;
| This writes an output 0x30-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150000&lt;br /&gt;
| This writes an output 0x2C-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NFC module savedata=&lt;br /&gt;
* &amp;quot;/nfp_backup.dat&amp;quot; Going by the filename this seems to contain data backed up from amiibo.&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=11791</id>
		<title>NFC Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=11791"/>
		<updated>2015-03-01T20:57:05Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The New3DS NFC module was added with [[8.1.0-0_New3DS]]. The Old3DS NFC module was added with [[9.3.0-21|9.3.0-X]].&lt;br /&gt;
&lt;br /&gt;
On New3DS NFC module uses the NFC hardware via the [[I2C_Services|i2c::NFC]] and [[GPIO_Services|gpio:NFC]] services. On Old3DS NFC module communicates with a NFC peripheral via IR with the IRUSER service.&lt;br /&gt;
&lt;br /&gt;
A total of 6 sessions can be open simultaneously for all of these services combined.&lt;br /&gt;
&lt;br /&gt;
=NFC services=&lt;br /&gt;
==NFC user service &amp;quot;nfc:u&amp;quot;==&lt;br /&gt;
This is the NFC service used by regular applications.&lt;br /&gt;
&lt;br /&gt;
This was first seen in the Super Smash Bros eShop demo (only in the exheader, the demo doesn&#039;t actually use it), but at that time no system-module was available for NFC on CDN. The first regular application to use this service was Super Smash Bros, with the v1.0.5 game-update, which used the new 9.3.0-21 command set.&lt;br /&gt;
&lt;br /&gt;
==NFC management service &amp;quot;nfc:m&amp;quot;==&lt;br /&gt;
This is used by the [[amiibo Settings]] applet.&lt;br /&gt;
&lt;br /&gt;
==NFC development service &amp;quot;nfc:dev&amp;quot;==&lt;br /&gt;
This service seems to be intended for use only on dev-units(or at least some of the command(s)).&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:p&amp;quot;==&lt;br /&gt;
This service is used by the mint library-applet, starting with [[9.3.0-21]]. This service was added to the mint service-access-control list with [[9.0.0-20]].&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:r&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:s&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
=&amp;quot;nfc:u&amp;quot; and &amp;quot;nfc:m&amp;quot; command set=&lt;br /&gt;
There are two different revisions of the NFC module. First version was introduced on New3DS only with firmware 8.1.0-0_New3DS. Second version made its appearance with 9.3.0-X, on both Old3DS and New3DS.&lt;br /&gt;
&lt;br /&gt;
These two versions are not interchangeable and not compatible, since the newer version uses a different command set and has no implemented commands from the older version. This does not introduce compatibility problems since no retail software used the NFC module before the Super Smash Bros for 3DS, whose NFC update required 9.3.0-21.&lt;br /&gt;
&lt;br /&gt;
==Post-9.3.0-21==&lt;br /&gt;
Commands for post-9.3.0-21 have been extracted by analyzing the amiibo Settings applet. Therefore this table may be missing commands.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Name&lt;br /&gt;
!  Input&lt;br /&gt;
!  Output&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| nfcInit&lt;br /&gt;
| u8 ???&lt;br /&gt;
| u32 result&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020040&lt;br /&gt;
| nfcStop&lt;br /&gt;
| u8 ???&lt;br /&gt;
| u32 result&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| ???&lt;br /&gt;
| u16 ???&lt;br /&gt;
| u32 result&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| u32 result&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| u32 result&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| ???&lt;br /&gt;
| u32 ???&lt;br /&gt;
| u32 result&lt;br /&gt;
|-&lt;br /&gt;
| 0x04060000&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| u32 result&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Pre-9.3.0-21==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| Shutdown&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| GetNFCState. This writes an output u8 to cmdreply[2]: 0 = not initialized, 1 = just initialized, 5 = data transfer ready, ...&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| (u8 input)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this. cmdreply[2] = actual output data size?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080100&lt;br /&gt;
| (&amp;lt;0x10-bytes starting at cmdreq[1]&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0042&lt;br /&gt;
| (u32 size, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0044&lt;br /&gt;
| (u32 size, 0x20, &amp;lt;procid set by kernel&amp;gt;, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0040&lt;br /&gt;
| (u16 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000F00C2&lt;br /&gt;
| (u32 unk0, u32 unk1, u32 unk2, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x802), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| Writes an output u32 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140000&lt;br /&gt;
| This writes an output 0x30-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150000&lt;br /&gt;
| This writes an output 0x2C-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NFC module savedata=&lt;br /&gt;
* &amp;quot;/nfp_backup.dat&amp;quot; Going by the filename this seems to contain data backed up from amiibo.&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=11790</id>
		<title>NFC Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=11790"/>
		<updated>2015-03-01T20:34:11Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: /* Post-9.3.0-21 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The New3DS NFC module was added with [[8.1.0-0_New3DS]]. The Old3DS NFC module was added with [[9.3.0-21|9.3.0-X]].&lt;br /&gt;
&lt;br /&gt;
On New3DS NFC module uses the NFC hardware via the [[I2C_Services|i2c::NFC]] and [[GPIO_Services|gpio:NFC]] services. On Old3DS NFC module communicates with a NFC peripheral via IR with the IRUSER service.&lt;br /&gt;
&lt;br /&gt;
A total of 6 sessions can be open simultaneously for all of these services combined.&lt;br /&gt;
&lt;br /&gt;
=NFC services=&lt;br /&gt;
==NFC user service &amp;quot;nfc:u&amp;quot;==&lt;br /&gt;
This is the NFC service used by regular applications.&lt;br /&gt;
&lt;br /&gt;
This was first seen in the Super Smash Bros eShop demo (only in the exheader, the demo doesn&#039;t actually use it), but at that time no system-module was available for NFC on CDN. The first regular application to use this service was Super Smash Bros, with the v1.0.5 game-update, which used the new 9.3.0-21 command set.&lt;br /&gt;
&lt;br /&gt;
==NFC management service &amp;quot;nfc:m&amp;quot;==&lt;br /&gt;
This is used by the [[amiibo Settings]] applet.&lt;br /&gt;
&lt;br /&gt;
==NFC development service &amp;quot;nfc:dev&amp;quot;==&lt;br /&gt;
This service seems to be intended for use only on dev-units(or at least some of the command(s)).&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:p&amp;quot;==&lt;br /&gt;
This service is used by the mint library-applet, starting with [[9.3.0-21]]. This service was added to the mint service-access-control list with [[9.0.0-20]].&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:r&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:s&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
=&amp;quot;nfc:u&amp;quot; and &amp;quot;nfc:m&amp;quot; command set=&lt;br /&gt;
There are two different revisions of the NFC module. First version was introduced on New3DS only with firmware 8.1.0-0_New3DS. Second version made its appearance with 9.3.0-X, on both Old3DS and New3DS.&lt;br /&gt;
&lt;br /&gt;
These two versions are not interchangeable and not compatible, since the newer version uses a different command set and has no implemented commands from the older version. This does not introduce compatibility problems since no retail software used the NFC module before the Super Smash Bros for 3DS, whose NFC update required 9.3.0-21.&lt;br /&gt;
&lt;br /&gt;
==Post-9.3.0-21==&lt;br /&gt;
Commands for post-9.3.0-21 have been extracted by analyzing the amiibo Settings applet. Therefore this table may be missing commands.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| nfcInit(void)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020040&lt;br /&gt;
| nfcStop(void)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04060000&lt;br /&gt;
| ???(void)&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Pre-9.3.0-21==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| Shutdown&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| GetNFCState. This writes an output u8 to cmdreply[2]: 0 = not initialized, 1 = just initialized, 5 = data transfer ready, ...&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| (u8 input)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this. cmdreply[2] = actual output data size?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080100&lt;br /&gt;
| (&amp;lt;0x10-bytes starting at cmdreq[1]&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0042&lt;br /&gt;
| (u32 size, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0044&lt;br /&gt;
| (u32 size, 0x20, &amp;lt;procid set by kernel&amp;gt;, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0040&lt;br /&gt;
| (u16 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000F00C2&lt;br /&gt;
| (u32 unk0, u32 unk1, u32 unk2, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x802), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| Writes an output u32 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140000&lt;br /&gt;
| This writes an output 0x30-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150000&lt;br /&gt;
| This writes an output 0x2C-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NFC module savedata=&lt;br /&gt;
* &amp;quot;/nfp_backup.dat&amp;quot; Going by the filename this seems to contain data backed up from amiibo.&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=11788</id>
		<title>NFC Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=11788"/>
		<updated>2015-03-01T20:31:43Z</updated>

		<summary type="html">&lt;p&gt;Socram8888: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The New3DS NFC module was added with [[8.1.0-0_New3DS]]. The Old3DS NFC module was added with [[9.3.0-21|9.3.0-X]].&lt;br /&gt;
&lt;br /&gt;
On New3DS NFC module uses the NFC hardware via the [[I2C_Services|i2c::NFC]] and [[GPIO_Services|gpio:NFC]] services. On Old3DS NFC module communicates with a NFC peripheral via IR with the IRUSER service.&lt;br /&gt;
&lt;br /&gt;
A total of 6 sessions can be open simultaneously for all of these services combined.&lt;br /&gt;
&lt;br /&gt;
=NFC services=&lt;br /&gt;
==NFC user service &amp;quot;nfc:u&amp;quot;==&lt;br /&gt;
This is the NFC service used by regular applications.&lt;br /&gt;
&lt;br /&gt;
This was first seen in the Super Smash Bros eShop demo (only in the exheader, the demo doesn&#039;t actually use it), but at that time no system-module was available for NFC on CDN. The first regular application to use this service was Super Smash Bros, with the v1.0.5 game-update, which used the new 9.3.0-21 command set.&lt;br /&gt;
&lt;br /&gt;
==NFC management service &amp;quot;nfc:m&amp;quot;==&lt;br /&gt;
This is used by the [[amiibo Settings]] applet.&lt;br /&gt;
&lt;br /&gt;
==NFC development service &amp;quot;nfc:dev&amp;quot;==&lt;br /&gt;
This service seems to be intended for use only on dev-units(or at least some of the command(s)).&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:p&amp;quot;==&lt;br /&gt;
This service is used by the mint library-applet, starting with [[9.3.0-21]]. This service was added to the mint service-access-control list with [[9.0.0-20]].&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:r&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:s&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
=&amp;quot;nfc:u&amp;quot; and &amp;quot;nfc:m&amp;quot; command set=&lt;br /&gt;
There are two different revisions of the NFC module. First version was introduced on New3DS only with firmware 8.1.0-0_New3DS. Second version made its appearance with 9.3.0-X, on both Old3DS and New3DS.&lt;br /&gt;
&lt;br /&gt;
These two versions are not interchangeable and not compatible, since the newer version uses a different command set and has no implemented commands from the older version. This does not introduce compatibility problems since no retail software used the NFC module before the Super Smash Bros for 3DS, whose NFC update required 9.3.0-21.&lt;br /&gt;
&lt;br /&gt;
==Post-9.3.0-21==&lt;br /&gt;
Commands for post-9.3.0-21 have been extracted by analyzing the amiibo Settings applet. Therefore this table may be missing commands.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Command&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| nfcInit(void)&lt;br /&gt;
| Initializes the NFC service.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020040&lt;br /&gt;
| nfcStop(void)&lt;br /&gt;
| Deinitializes the NFC service.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04060000&lt;br /&gt;
| ???(void)&lt;br /&gt;
| ???&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Pre-9.3.0-21==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| Shutdown&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| GetNFCState. This writes an output u8 to cmdreply[2]: 0 = not initialized, 1 = just initialized, 5 = data transfer ready, ...&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| (u8 input)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this. cmdreply[2] = actual output data size?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080100&lt;br /&gt;
| (&amp;lt;0x10-bytes starting at cmdreq[1]&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0042&lt;br /&gt;
| (u32 size, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0044&lt;br /&gt;
| (u32 size, 0x20, &amp;lt;procid set by kernel&amp;gt;, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0040&lt;br /&gt;
| (u16 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000F00C2&lt;br /&gt;
| (u32 unk0, u32 unk1, u32 unk2, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x802), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| Writes an output u32 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140000&lt;br /&gt;
| This writes an output 0x30-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150000&lt;br /&gt;
| This writes an output 0x2C-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NFC module savedata=&lt;br /&gt;
* &amp;quot;/nfp_backup.dat&amp;quot; Going by the filename this seems to contain data backed up from amiibo.&lt;/div&gt;</summary>
		<author><name>Socram8888</name></author>
	</entry>
</feed>