Table of Contents
Problems using your USB keyboard after installing IRLP on a Raspberry Pi
This article describes the background, symptoms, causes, and workarounds for issues with your USB keyboard after installing IRLP on a Raspberry Pi.
The USB subsystem in the Raspberry Pi is poorly implemented. It uses a flaky host controller, and is prone to issues with anything that requires decent bandwidth (like audio, Ethernet, etc). Its limitations are well known and documented, particularly issues with using USB sound cards. As the IRLP implementation on the Pi requires a USB sound card, certain things have to be done to the Pi for seamless audio. On top of this, the Ethernet controller is also a USB device, which is chained from this flaky controller.
In order to have seamless audio, it is required to turn down the speed of the USB host controller, which prevents the need to “resend” lost packets (which result in pops, clicks, hums, etc). This is accomplished by adding a boot-time parameter to the SD card. Luckily, the file that contains this parameter is placed on a Windows-accessible partition on the SD card, and can be changed by putting the SD card into another working machine, and changing the parameter.
Some of the other side effects of the parameter is that ALL USB devices will run at this slower speed, which means your Ethernet will also act like a slow 10 megabit adapter, any USB wifi cards, USB 3G cards, etc will also run at USB 1.1 speeds. Luckily IRLP can run on a dial-up modem, so this is not a major issue.
Some info on other people that have had the issue is available at the following website:
There are a few symptoms you may see:
- The same USB keyboard you used for the initial setup (before executing the get-irlp-files script) no longer works.
- On initial boot up, your node does not say its IP address when the keyboard is plugged in.
- The network looks like it is working, but it can not get an IP address from a DHCP server when the keyboard is plugged in.
- The USB keyboard does not work properly (some keys are transposed, keys are missed, reaction time is slow).
The most likely cause is the parameter used to lower the speed of the USB port. This can be removed so that the Pi system can be configured/programmed, and then replaced later.
The best workaround is to boot the Pi without the keyboard, and then use Secure Shell (SSH) to access the node to perform all configuration and setup. The other workaround is to temporarily remove the USB speed parameter.
The file that contains the boot-time parameter you need to change is cmdline.txt. It is accessible by putting the SD card into another computer and viewing the contents of the first partition. The file is also editable on the Pi itself - /boot/cmdline.txt. A reboot is required in order for the change to take effect.
WARNING - If you take the SD card from the Pi and plug it into a Windows PC, it may ask you to format the disk because of the second partition it does not recognize. DO NOT format the partition, or you will lose your Pi installation.
The parameter is dwc_otg.speed=1. If you remove this from the cmdline.txt file, the USB host controller will operate at USB 2.0 speeds, and your USB keyboard may start to work again.
Then do what is required to make the Pi work on the network and ensure it is accessible using SSH. Then place the parameter back into the cmdline.txt file, and reboot. Your Pi computer is now ready to function properly.
It is possible that a future firmware update will fix this, but I would not hold out hope.