Go library for controlling SDWireC & SDWire3 devices - USB-controlled SD card multiplexers for automated testing and development.
π SD Card Switching - Switch SD cards between target device and host computer
π Device Discovery - Automatically find and enumerate connected devices
πΎ Device Information - Access device serial, product, and manufacturer details
go get github.com/fcjr/sdwirepackage main
import (
"log"
"github.com/fcjr/sdwire"
)
func main() {
// Connect to the first available SDWireC device
device, err := sdwire.New()
if err != nil {
log.Fatal(err)
}
defer device.Close()
// Switch SD card to host computer for flashing
device.SetMode(sdwire.ModeHost)
// Flash your image here...
// Switch SD card to target device for testing
device.SetMode(sdwire.ModeTarget)
}device, err := sdwire.New()
if err != nil {
log.Fatal(err)
}
defer device.Close()
// Switch to Host (for flashing/accessing SD card)
err = device.SetMode(sdwire.ModeHost)
if err != nil {
log.Fatal(err)
}
// Switch to Target (for testing)
err = device.SetMode(sdwire.ModeTarget)
if err != nil {
log.Fatal(err)
}import (
"fmt"
"log"
"github.com/fcjr/sdwire"
)
device, err := sdwire.New()
if err != nil {
log.Fatal(err)
}
defer device.Close()
// Get device information
fmt.Printf("Device: %s [%s::%s]\n",
device.GetSerial(),
device.GetProduct(),
device.GetManufacturer())import (
"fmt"
"log"
"github.com/fcjr/sdwire"
)
// List all connected SDWireC devices
devices, err := sdwire.ListDevices()
if err != nil {
log.Fatal(err)
}
for i, info := range devices {
fmt.Printf("Device %d: %s [%s::%s]\n",
i+1, info.Serial, info.Product, info.Manufacturer)
}
// Connect to a specific device by serial number
device, err := sdwire.NewWithSerial(devices[0].Serial)
if err != nil {
log.Fatal(err)
}
defer device.Close()type SDWireC struct {
// Represents a connected SDWireC device
}
type SwitchMode int
const (
ModeTarget SwitchMode = iota // Target device mode
ModeHost // Host computer mode
)
type DeviceInfo struct {
Serial string
Product string
Manufacturer string
}| Function | Description |
|---|---|
New() (*SDWireC, error) |
Connect to the first available device |
NewWithSerial(serial string) (*SDWireC, error) |
Connect to device by serial number |
ListDevices() ([]*DeviceInfo, error) |
List all connected devices |
Close() error |
Close device connection |
| Function | Description |
|---|---|
SetMode(mode SwitchMode) error |
Switch to specified mode |
| Function | Description |
|---|---|
GetSerial() string |
Get device serial number |
GetProduct() string |
Get device product name |
GetManufacturer() string |
Get device manufacturer |
const (
ModeTarget // Connects SD card to target device
ModeHost // Connects SD card to host computer
)- SDWireC device (USB-controlled SD card multiplexer)
- USB connection to host computer
- Proper USB permissions (see Troubleshooting)
- Linux β (Tested on Ubuntu, Debian)
- macOS β (Tested on macOS 10.15+)
- Windows β (Tested on Windows 10+)
If ListDevices() returns no devices:
- Check USB connection - Ensure the SDWireC is properly connected
- Check VID/PID - SDWireC should appear as
04E8:6001when listing USB devices - Verify permissions - Ensure you have proper USB device access permissions
If you get permission errors on Linux:
-
Add udev rules - Create
/etc/udev/rules.d/99-sdwire.rules:SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6001", MODE="0666" -
Reload udev rules:
sudo udevadm control --reload-rules sudo udevadm trigger
-
Add user to plugdev group:
sudo usermod -a -G plugdev $USER
When using multiple SDWireC devices:
devices, err := sdwire.ListDevices()
if err != nil {
log.Fatal(err)
}
for _, info := range devices {
device, err := sdwire.NewWithSerial(info.Serial)
if err != nil {
continue
}
defer device.Close()
// Use device...
device.SetMode(sdwire.ModeTarget)
}Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
MIT License - see LICENSE file for details.
- sdwire-cli - Python CLI tool for SDWireC
- ykush3 - Go library for YKUSH3 USB switches
Made with β€οΈ at the @recursecenter