Raspberry Pi Pico USB Issues on ChromeOS Crostini: Complete Troubleshooting Guide
The "MicroPython board in FS Mode" showing in lsusb after disconnection indicates a USB device caching issue in ChromeOS/Crostini, not a hardware problem with the Pico. This comprehensive guide provides systematic solutions to restore proper USB connectivity for your Raspberry Pi Pico and Thonny IDE on ChromeOS Linux containers.
Understanding the core issue
Critical insight: "MicroPython board in FS Mode" is the normal, expected state when MicroPython firmware is running properly on your Pico. The problem isn't a "stuck" Pico, but rather ChromeOS/Crostini's USB subsystem not properly detecting the disconnection. This creates phantom device entries that prevent new connections from working correctly.
Device identification: Your Pico appears with USB ID 2E8A:0005
in MicroPython mode and shows as a serial device at /dev/ttyACM0
. The persistent lsusb listing suggests the Crostini container hasn't updated its USB device cache after disconnection.
Immediate diagnostic steps
Start with these commands to assess the current state:
1 2 3 4 5 6 7 8 |
|
If dmesg shows no disconnect events when unplugging, the issue is confirmed as container-level USB caching.
Step-by-step resolution procedures
Method 1: Container restart (recommended first attempt)
ChromeOS Crostini uses a layered architecture where USB devices are forwarded from the host through the Termina VM to your Penguin container. Restarting the container often clears cached USB device state.
1 2 3 4 |
|
Alternative container restart via crosh:
1 2 3 4 |
|
Method 2: USB subsystem reset within container
If container restart doesn't resolve the issue, force a USB subsystem refresh:
1 2 3 4 5 6 7 8 9 10 |
|
Method 3: ChromeOS USB device management
ChromeOS requires explicit USB device sharing with Linux containers. Reset the sharing configuration:
- Navigate to: ChromeOS Settings → Advanced → Developers → Linux development environment → Manage USB devices
- If "Board in FS Mode" or similar Pico device is listed, toggle it OFF then ON
- If no Pico device appears, physically reconnect while holding BOOTSEL button
- The Pico should appear as "RPI-RP2" drive first, then as "MicroPython board" after releasing BOOTSEL
Enable advanced USB support via Chrome flags:
1 |
|
Method 4: Complete VM restart
For persistent issues, restart the entire Termina VM:
1 2 3 4 |
|
This performs a complete reset of the USB forwarding layer between ChromeOS and your container.
Thonny IDE connectivity restoration
Once USB device caching is resolved, configure Thonny for reliable Pico connectivity:
Install Thonny correctly on ChromeOS
1 2 3 4 5 6 7 8 |
|
Configure serial port permissions
1 2 3 4 5 6 7 8 9 |
|
Set up Thonny interpreter
- Launch Thonny:
~/apps/thonny/bin/thonny
- Go to Run → Select interpreter
- Choose MicroPython (Raspberry Pi Pico) or MicroPython (generic)
- If using generic, manually select port:
/dev/ttyACM0
- Test connection:
1 2
print("Hello from Pico!") help()
Advanced troubleshooting for persistent issues
Fix udev rules and permissions
Create comprehensive USB permission rules:
1 2 3 4 5 6 7 8 9 10 11 |
|
Hardware-level Pico reset procedures
If the Pico appears genuinely unresponsive (rare), perform a hardware reset:
Method 1 - BOOTSEL reset: 1. Hold BOOTSEL button on Pico 2. Connect USB cable (or press/release reset button if available) 3. Release BOOTSEL button 4. Pico appears as "RPI-RP2" drive 5. Install fresh MicroPython firmware from https://micropython.org/download/rp2-pico/
Method 2 - Software reset from MicroPython:
1 2 3 |
|
Comprehensive system verification
Create a verification script to check all components:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Prevention and monitoring
Set up USB monitoring
Monitor USB events to catch future issues early:
1 2 3 |
|
Disable problematic power management
USB autosuspend can cause connectivity issues:
1 2 3 4 5 |
|
When all else fails
Alternative development approaches
Web-based development: If USB continues to fail, use web-based MicroPython IDEs: - BIPES (https://bipes.net.br/) - Full web-based MicroPython IDE - BeagleTerm Chrome extension for REPL access
Network-based solutions: Configure MicroPython for WiFi connectivity (Pico W) and use network-based development tools.
Enterprise/school Chromebook considerations
Managed ChromeOS devices may have USB restrictions:
- Contact IT administrator to whitelist Raspberry Pi Pico devices
- Request addition of USB ID 2e8a:0005
to approved device list
- Alternative: Use web-based development tools that don't require USB access
Resolution verification checklist
After implementing fixes, verify resolution:
- [ ]
lsusb
shows correct USB device state when connected/disconnected - [ ]
/dev/ttyACM0
appears when Pico is connected, disappears when unplugged - [ ] dmesg shows proper connect/disconnect events
- [ ] Thonny can connect to Pico and access REPL
- [ ] User is member of dialout and plugdev groups
- [ ] ChromeOS USB sharing is properly configured
- [ ] No phantom devices persist after physical disconnection
Success indicators: When working correctly, connecting your Pico should show connection messages in dmesg, create /dev/ttyACM0
, and allow Thonny to immediately detect and connect to the device. Disconnection should remove the device from /dev/
and clear it from active USB listings.
The root cause of "MicroPython board in FS Mode" persisting in lsusb output is ChromeOS/Crostini USB device caching, not a hardware problem with your Pico. Following this systematic troubleshooting approach should restore proper USB connectivity for your development workflow.