element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet & Tria Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • About Us
    About the element14 Community
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Japan
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      •  Vietnam
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Raspberry Pi
  • Products
  • More
Raspberry Pi
Raspberry Pi Forum avoiding usb
  • Blog
  • Forum
  • Documents
  • Quiz
  • Events
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Raspberry Pi to participate - click to join for free!
Featured Articles
Announcing Pi
Technical Specifications
Raspberry Pi FAQs
Win a Pi
Raspberry Pi Wishlist
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • Replies 21 replies
  • Subscribers 708 subscribers
  • Views 4096 views
  • Users 0 members are here
  • raspberry_pi
Related

avoiding usb

e14 Contributor
e14 Contributor over 14 years ago

The usb has been measured by Dom as taking about 20% of the cpu

to service interrupts, which come at 8000 per second, even when the usb

is idle.    USB can be suspended by doing:

 

   echo 1 > /sys/devices/platform/bcm2708_usb/bussuspend

 

http://www.raspberrypi.org/phpBB3/viewtopic.php?f=28&t=7866

 

However, that prevents use of the USB keyboard.  So there is some

interest in perhaps connecting a keyboard using GPIO instead.

 

Section 2.2 of the Broadcom datasheet says:

http://www.element14.com/community/docs/DOC-43016/l/broadcom-datasheet-for-bcm2835-soc-used-in-raspberry-pi

 

"The mini UART is a secondary low throughput UART intended to be used as a console."

Anyone know how difficult it would be to rig this up?

  • Sign in to reply
  • Cancel
  • YT2095
    YT2095 over 14 years ago

    There are several ways to approach this, it May be possible to get a PS2 keyboard to work using this UART, but you could also Make a serial keyboard too, in fact the Arduino is perfectly able to do this, an 8x8 matrix array using the keypad library and then output this as serial data directly to the UART would give you 64 keys.

    or you you could use a PC and a terminal emulator, or even buy an old dedicated terminal, some are even handheld with an LCD screen for local echo.

     

    I don`t really know much about the Pi, but i`m wondering if you Did need to use USB, if one of these 4 way HUB/Splitters would work on it?

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • morgaine
    morgaine over 14 years ago

    This might well be the worst problem with the Pi.  This Broadcom SoC just wasn't made for networking.

     

    It contrasts rather badly with the TI SoC on the BeagleBone which provides both Ethernet MAC and two USB ports on the chip directly.

     

    I wonder if Broadcom has a better device in this range that might be used for a future version of Pi.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • YT2095
    YT2095 over 14 years ago in reply to morgaine

    well yes, it is somwhat less than ideal, but that`s what there is to work with.

    know any work-arounds?

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • morgaine
    morgaine over 14 years ago in reply to YT2095

    YT2095 . wrote:

     

    know any work-arounds?

     

    Use a Model A (once available) in combination with the Ethernet-over-USB gadget driver.  The on-chip USB controller will then handle the network traffic in the usual interrupt-driven way (an assumption, but reasonable I think), and a downstream class-compliant USB hub will also be handled by the normal interrupt-driven USB driver.

     

    It's only a partial solution since it requires something else to provide the actual Ethernet hardware, but at least it avoids the polling.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • YT2095
    YT2095 over 14 years ago in reply to morgaine

    Interesting that you should mention polling, Esp since the Pi is open source (for the S/ware at least), it should be perfectly possible to Lower this 8KHz polling rate to something more reasonable surely?

    or perhaps make it at least Semi-inteligent whereby it`s scanned at a rate suitable for that which is in use.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • morgaine
    morgaine over 14 years ago in reply to YT2095

    I guess you could poll less frequently for keyboard and mouse traffic since their data rate is somewhat low, but remember that the average response latency is half the polling interval, so it would become progressively worse as you decreased the polling rate.  And for Ethernet, that sounds extremely unlikely as a viable solution at all, since you could end up losing data in buffer overruns between polls.

     

    Basically, "polling == bad", period. image

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • e14 Contributor
    e14 Contributor over 14 years ago in reply to YT2095

    My understanding, which might be wrong, is that the 20% CPU overhead from the 8k interrupts/sec is from the USB driver on the on-chip SoC USB port. So it would be just the same in the Model A.  It has been suggested that it might be possible to make a much more efficient USB driver, reducing the interrupt service routine overhead by up to 90%, but even though the code is open-source, not clear if there's enough good documentation to really do this (?)

     

    The 8 kHz interrupt rate is actually mandated by the specific USB hardware they used in the SoC. 8 kHz is apparently the high-speed USB2 "micro-frame" rate, and any lower rate would not work correctly (at least with high-speed USB devices). You can think of it in analogy to a "winmodem" which offloads some of the processing to the CPU, to save complexity/cost in hardware.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • morgaine
    morgaine over 14 years ago in reply to e14 Contributor

    jbeale wrote:

     

    My understanding, which might be wrong, is that the 20% CPU overhead from the 8k interrupts/sec is from the USB driver on the on-chip SoC USB port.

    It's a timer-driven poll of the external device, apparently.  On a Model A, it wouldn't need to poll anything, since the USB driver would just sit there quiescent and only become active when USB data arrives and the SoC's USB controller then generates an interrupt to process it.  Ie. event-driven, just like everything else in the standard *nix model.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • johnbeetem
    johnbeetem over 14 years ago in reply to morgaine

    Morgaine Dinova wrote:

     

    YT2095 . wrote:

     

    know any work-arounds?

     

    Use a Model A (once available) in combination with the Ethernet-over-USB gadget driver.  The on-chip USB controller will then handle the network traffic in the usual interrupt-driven way (an assumption, but reasonable I think), and a downstream class-compliant USB hub will also be handled by the normal interrupt-driven USB driver.

    I don't think going with a Model A with external USB hub and Ethernet device would buy you anything.  The LAN9512 is really just a USB hub plus Ethernet device in a single chip.  The performance problem with RasPi is entirely the host software which runs on the BCM2835 in either case.  It just sounds like it's non-optimized software and could be replaced with something efficient if someone wants to go to the trouble of learning all about writing kernel drivers and USB control structures.  The USB 2.0 standard goes into quite a bit of detail about what's needed.

     

    My understanding of USB host software is that it needs to find out what devices are connected and use device driver information to determine how often it needs to poll each device.  Then it uses a clock interrupt to trigger the polling routine.  ARM actually has very efficient interrupts if you choose to use them properly: ARM uses a different set of processor registers for interrupts so you don't have to save and restore main thread registers in memory.  However, you may have to do this in assembly language level, and it's easier to throw together a C interrupt service routine and accept the overhead, figuring that someone else will optimize it "some day".

     

    I don't know how much polling intelligence is built into USB host hardware.  It may be that it can do a certain amount of this by itself, if one writes the software to configure it properly.  At one place I worked, we had the acronym SAMP: "Simply A Matter of Programming".  It was used both for features that required a small amount of programming and -- with irony -- for those that required a huge amount of programming.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • morgaine
    morgaine over 14 years ago in reply to johnbeetem

    I don't think it can be so John, because if it were, then all machines would be suffering the same USB polling overhead whenever they have downstream hubs and other devices attached.

     

    No sensible engineer designs polled systems like that. image

     

    The problem here seems to be compounded by a dreadful driver implementation, but even if the driver were perfect then it would still be appallingly bad if it has to poll a downstream device.  You can't overcome the response latency and the overhead of active polling by writing a perfect driver.  It's the polling model here that's inherently broken.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
>
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2026 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube