While working on some projects for APRS, I had the need for some more USB audio devices. LONG ago, I had purchased some “3D Sound” USB devices on eBay. These old devices used a chipset (Tenx TP6911) designed for “headsets” and have a fairly poor ADC, with a max of 24 KHz resolution (pretty low). The C-Media 108 chipset has long been considered a decent value chipset, so I went to eBay to find some CM108 based USB devices. I found a listing that was explicitly stating that it had this chipset.
I had heard about fake chips being out there, and knew that it was a strong chance of this being the case. But hey, these are plenty cheap and it was a low risk experiment!
I plugged one into my Raspberry Pi and ran dmesg
[ 136.786975] usb 1-1.3: new full-speed USB device number 3 using xhci_hcd
[ 136.933737] usb 1-1.3: New USB device found, idVendor=08bb, idProduct=2902, bcdDevice= 1.00
[ 136.933757] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 136.933774] usb 1-1.3: Product: USB PnP Sound Device
[ 136.933789] usb 1-1.3: Manufacturer: C-Media Electronics Inc.
[ 136.956376] input: C-Media Electronics Inc. USB PnP Sound Device as /devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.3/1-1.3:1.3/0003:08BB:2902.0001/input/input0
[ 137.017913] hid-generic 0003:08BB:2902.0001: input,hidraw0: USB HID v1.00 Device [C-Media Electronics Inc. USB PnP Sound Device] on usb-0000:01:00.0-1.3/input3
[ 137.110053] usbcore: registered new interface driver snd-usb-audio
So far, it seems to be OK. dmesg is clearly saying this is a C-Media device that has been detected. Next I ran lsusb:
pi@raspberrypi:~ $ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 08bb:2902 Texas Instruments PCM2902 Audio Codec
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
pi@raspberrypi:~ $
Hmmm, that doesn’t look like C-Media! It clearly shows that it is a TI PCM2902 chipset! Well, let’s try another command, which is likely looking at similar datapoint:
pi@raspberrypi:~ $ inxi --audio
Audio: Device-1: bcm2835-audio driver: bcm2835_audio
Device-2: bcm2711-hdmi0 driver: N/A
Device-3: bcm2711-hdmi1 driver: N/A
Device-4: Texas Instruments PCM2902 Audio Codec type: USB driver: hid-generic,snd-usb-audio,usbhid
Sound Server: ALSA v: k5.4.83-v7l+
pi@raspberrypi:~ $
If you look at the PID and VID from the dmesg and lsusb outputs, it shows “08bb:2902”. Doing some independent Google searches and you’ll see that it is indeed referencing the PCM2902 chipset.
So, we seem to have devices that are PCM2902 and NOT the CM108. Presumably, the eBay seller altered the firmware to display the C-Media in the labeling. If someone plugs these into a Windows machine, they would just see the C-Media labeling and be unaware of what is actually being used. Because most USB audio devices use a universal standard, there isn’t a driver confusion that would have made it obvious.
How do these chipsets compare?
C-Media CM108 | Texas Instruments PCM2902 | Tenx TP6911 | |
DAC Sampling Rate | 48 / 44.1KHz | 48 / 44.1 / 32KHz | 48 KHz |
ADC Sampling Rate | 48 / 44.1KHz | 48 / 44.1 / 32 / 22.05 / 16 / 11.025 / 8 KHz | 24 KHz |
DAC SNR | 93 dB | 96 dB | ? |
DAC Dynamic Range | 92 dB | 93 dB | ? |
ADC SNR | 90 dB | 89 dB | ? |
ADC Dynamic Range | 88.5 dB | 89 dB | ? |
Resolution | 16 bit | 16 bit | ? |
Based on these specs, the PCM2902 isn’t a whole lot different than the CM108. There are certainly other things to consider when comparing. I included the TP6911, as that was what I was initially trying to replace and improve. Clearly either of the PCM2902 and CM108 are going to be better. I couldn’t even find more details or specs on the TP6911, even on the official datasheet!
For now, I plan to just use these PCM2902 and see how they perform. They may not be what I expected to receive, but they should get the job done.