I have a module (say A) which sends data serially to me at 5 Mbps. I want to transfer this data to another module (say B). For B, I have a few choices for links: USB, UART, PCI/E, etc. I am not sure but I think USB would be the best choice at such a high data rate. I already have a uC in addition to modules A and B (used to send some control signals to these modules). Can I use a uC for interfacing between A and B?

Note that the output of A is analog data. So, I need to pass it through an ADC before sending it to module B. The uC shall be incorporated somewhere in between (either between A and the ADC or ADC and B).

If a uC is not the correct choice, then what should I use? I need to make it as low power as possible as its battery operated.

Clarifications (Edit-1):

  1. 5 Mbps is the data rate after 10-bit ADC
  2. Battery is roughly around 400mAh
  3. Data flow: Module A -> Analog Data -> ADC (10-bit) -> uC -> USB cable -> Module B
  • 1
    \$\begingroup\$ I thought you said A sent data serially at 5Mbps, not analog...? Which is it? \$\endgroup\$
    – Majenko
    Dec 21, 2011 at 9:16
  • \$\begingroup\$ One thing you haven't mentioned is the distances involved. \$\endgroup\$
    – Majenko
    Dec 21, 2011 at 9:30
  • \$\begingroup\$ If we talk about USB 1.X, it may not be the best choice, because AFAIK higher bandwith may come with higher latency (bulk transfer mode). I assume here that you need to have a quite low and stable latency. \$\endgroup\$
    – 0x6d64
    Dec 21, 2011 at 9:35
  • \$\begingroup\$ @Majenko: 5 Mbps is the digitized data rate after converting analog to digital using a 10-bit ADC. The distance involved is negligible. They are almost next to each other. \$\endgroup\$
    – Neel Mehta
    Dec 21, 2011 at 11:21
  • 2
    \$\begingroup\$ @NeelMehta - the "USB" aspect is probably not relevant. While you can use PC-type USBized peripherals with a USB host capable micro (a method starting to move into smaller systems), talking directly to the ADC and the radio chipsets is still the dominant embedded approach today. \$\endgroup\$ Dec 21, 2011 at 18:58

1 Answer 1


USB is one possible solution, but due to the protocol stack that is needed it would be very complicated to implement compared to other serial interface options. I would suggest SPI as it is very simple to implement.

I would consider taking a uC that supports a high-speed SPI interface like the Microchip PIC32. The SPI operates at up to 20Mbps. Additionally, such a uC also has an A/D converter and a DMA module which would simplify the data transfer both into and out of the uC and ensure the speed you are looking for.

There are definitely other uC products that are lower power, but you need to make sure that:

a) the SPI interface can be operated fast enough for your needs b) the underlying CPU is powerful enough to transfer this amount of data in/out

Don't forget that uC clock frequency has a large influence on power consumption and, considering the speeds probably needed to support this amount of data flow, you may need to consider using the uCs low-power or sleep modes when not actively transferring data to save energy.

Last point - you should define "low-power" in a question like this. A battery could be a small 1000mAh 1.5V cell, or a 12V lead-acid type.

I am assuming that your planned system is:

Analog signal->ModuleA->SPI->cable->SPI->ModuleB

If not, and ModuleB only supports USB,UART,PCI/E etc. then use the uC on the ModuleB side to convert from SPI to USB thus:

Analog signal->ModuleA(uC)->SPI->cable->SPI->(uC)->USB Device->cable->ModuleB

Clarification in response to Edit 1

I would then make the following concrete recommendation. Start by looking at the PIC32MX250F128D. This has a 13 channel, 10-bit A/D and a USB-OTG module. This would become the "uC" element in your "Data flow:" description. Microchip also offers a free USB software stack which make USB much easier to use. The USB module on the PIC32MX250F128D can also be used as a 'host' or as a 'device'. Regardless of what ModuleB actually is, the flexibility should be there to interface with it in one or the other modes. Current consumption lies typically at around 14.5mA at 40MHz, 3.3V and 25°C giving you around 27.5 hours of 'active' (i.e. running at full speed) run time. Beyond that you'll have to look at fine tuning the application code to make use of the various energy saving features the device has (i.e. idle and sleep modes etc.). Reducing frequency of operation has a linear effect on power consumption; supply voltage has a power of 2 (V^2) effect, so reducing your applications voltage supply to the minimum allowed will contribute greatly to battery life.

Hope this provides more to go on. Best regards, Stuart

  • \$\begingroup\$ Please look at the clarifications. I hope it provides you some more information and clarifications. Since the module B is a wireless USB module, I plan to use this to select the most appropriate wireless USB module for my application from the available ones in the market. \$\endgroup\$
    – Neel Mehta
    Dec 21, 2011 at 11:43

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.