SL-9950 USB sound card solution



There is mini USB sound card - Speed Link SL-8850 - which I found to be very easily adopted.


Fig. 1: SL-8850 view.

This gadget is slowly disappearing from market, but I hope it will have replacement or upgrade.

Core of the device is C-Media chip CM-108. Chip data sheet is also available.

Selected technical parameters of the CM-108:

  • 1 (microphone) mono input with boost
  • 2 low power stereo outputs
  • 16-bit A/D
  • 48K/44.1KHz sampling rate for both playback and recording
  • compliant with USB 2.0 full speed operation

Results of analysis

I've analyzed, with a good magnifying glass and ohmmeter, schematics of the CM-108 and PCB of the SL-8850. I found very good correlation. To be exact - real board is using exactly the same components labelling, some components are, however, missing due to reduced functionality required for headset design.

Original SL-8850 schematics (only important part):

SL-8850 original

Fig. 2: Original SL-8850 schematics

Microphone input is done the standard way. Earphones output is a bit unusual - there are no electrolytic condensers - special pin of chip is used instead - "LOBS" - "DC 2.25V Output for Line Out Bias" (pin 31).

It was found, that microphone input on pin 27 - "MICIN" - accepts DC input and it requires 2.2V DC to get zero output DC.

Possibility of DC input solution

To apply OpAmp solution described in the original project would require to add some additional components. The main problem, however, is feeding - there is no negative power -5V available on USB socket (and it is not easy to get it from notebook without braking in...).

New idea is to change DC bias of "ground" instead of touching input:

CM108 hack

Fig. 3: DC bias of "ground".

It seems simple to get adjustable DC stabiliser chip (LM317LZ, for example) and create DC-shifted ground.

But detailed view on CM108 schematics is showing, that everything is already in!

CM108 modified

Fig. 4: Modified CM108 schematics.

Required DC-shift is available on pin 31. It is used as common point of earphones. As a conclusion, there is no need for external components at all!

Yes, there are some new components - resistor 1k and some 2 fast switching diodes to protect chip input... And electrolytic condenser to make dirty hack a bit cleaner. But all added components are optional. It may work also without them.


What is needed:

  • remove resistors R10, R13
  • replace condenser C11 with 1k resistor (R13 is good candidate)
  • cut off ground PCB
  • make bridge between microphone and earphones sockets common pins
  • add 2 fast diodes
  • add electrolytic mini condenser (5 - 50 uF/6.3V or more)

The resulting view of SL-8850 is on Fig. 5.

CM-108 modifications

Fig. 5: SL-8850 modifications.

It works fine. With the device I did a few measurements. I found that maximum sensitivity is approximately +/- 120 mV without microphone boost.

Microphone boost is +20bB (10x), which means +/- 12 mV! This seems too much for practical purposes... This was not tested. Normal operation requires, however, switch off microphone boost in MS Windows sound settings.


For this device original program was modified. It is using soundscope.ini file to store program parameters.

Contents of the soundscope.ini file:

      Device Name = C-Media USB Headphone Set
      LineIn Name = Microphone
      ADBites     = 16
      Zero left   = 95
      Zero right  = 95
      MaxLevel    = 30480
      MaxVoltage  = 0,117
      LabelL      = '0.2V'
      LabelR      = '0.2V'
      CalFactorR  = 1
      CalFactorL  = 1
      LabelL      = '1V'
      LabelR      = '1V'
      CalFactorR  = 1
      CalFactorL  = 1
      LabelL      = '4V'
      LabelR      = '4V'
      CalFactorR  = 1
      CalFactorL  = 1
      LabelL      = '20V'
      LabelR      = '20V'
      CalFactorR  = 1
      CalFactorL  = 1

[Program] section contains only one parameter - "Debug". 1 means program writes debugging information into textual log file - log.txt. 0 means no debugging information. Default value should be 0.

[Devices] section contains following parameters:

  • Device Name=C-Media USB Headphone Set - this parameter has to be carefully taken from MS Windows HW manager or Sound settings
  • LineIn Name=Microphone - name of input device, also comes from Sound settings
  • ADBites=16 - can be 14, 15 or 16 according chip used - see documentation

[Calibration] section contains basic parameters of measurement:

  • Zero left = 95 - value shown by program for left channell if input is shortened.
  • Zero right = 95 - value shown by program for right channell if input is shortened.
  • MaxLevel = 30480 - value shown by program when external DC voltage is applied to the inputs and increased to the value when display shows level of 3rd line
  • MaxVoltage = 0,117 - DC voltage measured to reach that level

[Range1] - to 4 - definitions of 4 measuring ranges:

  • LabelL = '0.2V'
  • LabelR = '0.2V' - labels shown on the butons
  • CalFactorR = 1
  • CalFactorL = 1 - calibration factors to compensate small HW inaccuraties of the input dividers - can be smaller and also larger than 1

In this version of program it is fully configurable measurement ranges labels.


Aspects of calibration described in original project are all valid. To make it as easy as possible the philosophy of calibration in this version of program was changed principally.

Before starting change display mode to display raw data by clicking "Calibrated" button. Its label will change to "Raw data".

Calibration has following steps:

First is zero level calibration. It requires disconnect any external voltages from inputs and shortening both with ground. If using microphone input you should switch microphone boost function off. Display will show some values in both channells. Write them to the soundscope.ini file as Zero left and Zero right values.

Second is measuring basic device sensitivity - connect variable voltage source and set DC voltage to get level line on the screen to be identical with 3rd one (over red line). Write value of channels as MaxLevel and corresponding voltage as MaxVoltage.

Before calibrating voltage ranges switch back to "Calibrated" display mode.

Third is to calibrate voltage ranges. It is expected to have range switch ready. Select first range both on screen and on switch. Using regulated power source apply appropriate DC voltage to the device - close to the 3rd line again. Display will show some voltage, which will be probably slightly different from real one. Calculate correction factors for both channels and write them to the soundscope.ini file as CalFactorR and CalFactorL respectively of selected [Range(1..4)] section.

Example (channel L assumed):

Displayed voltage: 190 mV
Real value: 200 mV
CalFactorL = 200/190 = 1,0526

When writting CalFactorL and CalFactorR into soundscope.ini file be careful to use decimal separator "," or "." according your national settings.

Repeat the procedure for all 4 ranges. At the end verify new values of CalFactors, recalculate them if needed. Note, that INI file is read only at program startup. So after each change in the soundscope.ini you have to restart program.


Fact, that measurement ground and computer ground are not identical must be taken into consideration. If measuring with computer connected to power socket on device connected to the power socket results are unpredictable. Damage of SL-8850 is highly probable.

It is required to run computer in batery mode if measurements are performed on devices connected to power socket.

When doing measurements on devices fed from bateries it is safe to have computer powered normally.


We don't feel any responsibility for any damage of measuring or measured device or computer due to use of this design.