<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[⚠️ I2S Bus conflict for M5Stack Core2 v1.3 + ES8388 (M144) Audio Module + Bottom2 (A014-C)]]></title><description><![CDATA[<p dir="auto">I am working on a project that involve ES8388 Audio Module and the Bottom2 as portability is a key feature.<br />
At some point, I got stuck into an audio issue that appeared only when I stacked the Bottom 2 to the Core2+Audio Module.<br />
After intensive debugging, I found the culprit by studying the pdf schematics for each module.</p>
<p dir="auto"><strong>The investigation pointed to an I2S conflict on Pin 26 of the M5 BUS:</strong></p>
<p dir="auto">On one side, the Bottom2 module exposes on this Pin the <strong>DAT</strong> signal from the SPM1423 MEMS microphone, while on the other side, the Audio Module uses the same line for <strong>I2S_MAIN_DIN</strong> (ASDOUT from the ES8388 codec).</p>
<p dir="auto">The problem is that the MEMS microphone is always active, continuously driving the data line. As a result, when the Audio Module is used together with Bottom2, the operation of the ES8388 is severely affected, leading to malfunction or unreliable behavior.</p>
<p dir="auto">As a workaround, I physically removed the SPM1423 microphone from the Bottom2 PCB, which resolves the issue.<br />
A more elegant solution would be a revision of the Bottom2 hardware design, such as:</p>
<ol>
<li>adding a hardware switch to disconnect the microphone, or</li>
<li>routing the SPM1423 SELECT pin to a free GPIO (for example, GPIO36), allowing the microphone to be enabled/disabled via software. This will impact J2 Socket on Bottom2 but will allow the FW to switch the MEMS Microphone.<br />
<strong>3.....  ???? ANYONE WITH IDEEAS?</strong></li>
</ol>
<p dir="auto">I will still investigate in search for a more elegant solution.</p>
<p dir="auto">Cheers,<br />
Adrian</p>
]]></description><link>https://community.m5stack.com/topic/8262/i2s-bus-conflict-for-m5stack-core2-v1.3-es8388-m144-audio-module-bottom2-a014-c</link><generator>RSS for Node</generator><lastBuildDate>Thu, 18 Jun 2026 06:58:27 GMT</lastBuildDate><atom:link href="https://community.m5stack.com/topic/8262.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 14 Jun 2026 12:56:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ⚠️ I2S Bus conflict for M5Stack Core2 v1.3 + ES8388 (M144) Audio Module + Bottom2 (A014-C) on Mon, 15 Jun 2026 10:17:16 GMT]]></title><description><![CDATA[<h2>Root Cause Analysis</h2>
<p dir="auto">A detailed schematic review revealed the source of the problem.<br />
All three components — Core2, Audio Module, and Bottom2 — are interconnected through the shared M5 BUS.<br />
The Bottom2 module includes a SPM1423 MEMS microphone, which uses:</p>
<p dir="auto">GPIO0 (BUS pin 24) for the clock signal (CLK)<br />
GPIO34 (BUS pin 26) for the data signal (DAT, digital output)</p>
<p dir="auto">The Audio Module, based on the ES8388 codec, uses:</p>
<p dir="auto">GPIO0 (BUS pin 24) for I2S_MCLK<br />
GPIO34 (BUS pin 26) for I2S_MAIN_DIN</p>
<p dir="auto"><strong>This creates a fundamental hardware conflict on the I2S bus.</strong></p>
<h2>The Core Conflict</h2>
<p dir="auto">Two independent devices attempt to drive the same data line:</p>
<p dir="auto">The ES8388 (M144 Audio Module) uses GPIO34 to send digitized audio data from its ADC (line-in or microphone) to the ESP32 via I2S.<br />
The SPM1423 (Bottom2) uses the same GPIO34 to output PDM audio data from its internal MEMS microphone.</p>
<p dir="auto">From the ESP32’s perspective:</p>
<p dir="auto">GPIO34 is input-only</p>
<p dir="auto">However, on the physical PCB traces, both devices are electrically connected to this same line and actively drive it.<br />
This results in a classic and severe bus contention scenario:</p>
<p dir="auto">Two outputs connected together</p>
<ul>
<li>No arbitration</li>
<li>No isolation</li>
<li>No possibility for coexistence</li>
</ul>
<h2>Why This Cannot Be Solved in Software</h2>
<p dir="auto">At first glance, one might consider disabling the microphone via software. Unfortunately, this is not feasible due to both architectural and hardware constraints.<br />
The Bottom2 <strong>doesn’t expose the SPM1423 MEMS dedicated enable/disable (chip select</strong>) pin.<br />
The only way to silence it — effectively forcing its data output into a high-impedance (Hi-Z) state — is to stop its clock signal on GPIO0.<br />
This leads directly to a deadlock:<br />
If the M144 switch is set to position A:<br />
GPIO0 is used as MCLK (mandatory master clock for ES8388 operation, typically 12.288 MHz)</p>
<p dir="auto">If the switch is set to position B:<br />
GPIO0 becomes I2S SCLK (bit clock)</p>
<p dir="auto">Additionally:<br />
The internal amplifier of the Core2 (NS4168) also uses GPIO0 for BCLK</p>
<p dir="auto">In other words, GPIO0 is always actively used in any valid configuration.<br />
Stopping the clock to disable the microphone would simultaneously break:</p>
<ul>
<li>the ES8388 codec</li>
<li>or the Core2 internal audio path</li>
</ul>
<p dir="auto"><strong>Thus, there is no viable way to control the microphone via software without disrupting essential system functionality.</strong></p>
<h2>Design Oversight</h2>
<p dir="auto">The A/B switch on the M144 Audio Module was clearly designed to avoid clock conflicts (MCLK vs SCLK) with other peripherals.<br />
However, the design completely overlooks the data line conflict on GPIO34.<br />
This is particularly problematic because:</p>
<ul>
<li>the Bottom2 module is an official M5Stack accessory</li>
<li>the SPM1423 microphone is always active by default</li>
<li>both modules are intended to be used within the same ecosystem</li>
</ul>
<p dir="auto">Despite this, their coexistence leads to a non-functional configuration when using the ES8388 input path.</p>
<h2>Conclusion</h2>
<p dir="auto">This issue is not a matter of configuration, firmware, or library incompatibility. It is a fundamental hardware design conflict on the shared M5 BUS.<br />
When Bottom2 is attached:</p>
<ul>
<li>the SPM1423 microphone continuously drives the I2S data line</li>
<li>the ES8388 is unable to deliver valid audio data</li>
<li>the result is severe noise and corrupted signal</li>
</ul>
<p dir="auto">There is no reliable software workaround.<br />
The only effective solutions are hardware-level:</p>
<ul>
<li>physically removing or isolating the SPM1423 microphone</li>
<li>redesigning the Bottom2 PCB to include a switch or gating mechanism</li>
<li>routing the microphone control (e.g., SELECT or enable logic) to a dedicated GPIO</li>
</ul>
<p dir="auto">Until such changes are implemented, the ES8388 input functionality cannot be used in conjunction with the Bottom2 module in a stable and predictable way.<br />
<strong>My solution was to remove the SPM1423 Microphone from the PCB.<br />
Another solution is to cut the relevant pins from the Bottom2 BUS with the same effect - removing SPM1423 from the circuit.</strong></p>
]]></description><link>https://community.m5stack.com/post/31075</link><guid isPermaLink="true">https://community.m5stack.com/post/31075</guid><dc:creator><![CDATA[YO3HJV]]></dc:creator><pubDate>Mon, 15 Jun 2026 10:17:16 GMT</pubDate></item></channel></rss>