10 Replies Latest reply on Jun 13, 2017 12:40 PM by pthat

    Raspberry pi usb output from GPIO

    miksu

      I've had this idea and I've googled a lot to find out if it would be possible to attatch usb cable to raspberry pi's GPIO pins. I already got an old usb cable and cutted the other end off and i tought that I just attatch the vireing to GPIOs and plug other end, whitch have still the USB A port on it, to computer and I would be able to control all data.  I mainly am trying to program it to act as HID device.... Is there any python lybrary or can i just somehow output the raw data in bytes? How would i be able to do it?tmp_5329-IMG_20141005_111054-181199826.jpg

        • Re: Raspberry pi usb output from GPIO
          michaelkellett

          Unless you can write kernel drivers for the RPI then you won't be able to do it.

           

          People have written (very poor performance - a hardware issue - not because their code isn't clever) USB code for some Atmel AVR processors which works by bit banging GPIO - have a look at that to get and idea of what you are attempting. And read the USB spec - it's free.

           

          V-USB - A Firmware-Only USB Driver for Atmel AVR Microcontrollers

           

          MK

            • Re: Raspberry pi usb output from GPIO
              miksu

              I need to write own kernel drivers???? Seriously? To control USB data with GPIOs? Why do I need usb drivers to control GPIOs?

                • Re: Raspberry pi usb output from GPIO
                  michaelkellett

                  Did you read the USB spec or look at the AVR examples?

                  You are trying to emulate a USB device with GPIO - that means that you must support the USB timing without the aid of any dedicated hardware, you have to serialise/deserialise at a minimum rate of 1.5Mbit/s (12 or 400 for full speed or high speed). You can't afford an interrupt during a data transfer even at the lowest speed. The only way you might be able do this is to take complete control of the processor.

                   

                  If  you want additional USB connectivity on an RPi then consider using one of the FTDI chips which can be controlled via GPIO, UART or SPI ports.

                   

                  MK

                    • Re: Raspberry pi usb output from GPIO
                      miksu

                      Thanks a lot for this information and thanks for fast reply. I'll maybe create own drivers. And i checked the v-usb's github repository

                        • Re: Raspberry pi usb output from GPIO
                          Roger Wolff

                          The practical answer is: it is not physically possible: You need USB-hardware in the chip to be able to do what you want.

                           

                          Now, some fool managed to implement something for AVR in software that sort-of works. Normal hardware always implements the 12mbps mode of USB. The avr-software one only implements the 1.5mbps mode. If you want to do "HID" that's fine, but for other usb-standard-slave-devices, the standard specifies "at least 12mpbs". Some hosts don't mind and will allow such a function on a slow device, but others wiill enforce the standard.

                           

                          Getting the software-USB working on raspberry pi is a whole lot of trouble that is not worth it. There are many other more sensible ways to create a communications channel between your PC and the raspberry pi.

                           

                          The things you can easily get to work right niow are: ethernet and "serial". Get an USB-ttl-level-serial converter make sure the levels are 3.3V, and wire it up. Standard baud rates can go up to 115200bps, but both the USB-serial and the raspberry pi can go higher (but it's usually not worth the trouble)

                    • Re: Raspberry pi usb output from GPIO
                      gadget.iom

                      Care to illustrate this recommendation further?

                      All sources I've looked at indicate that USB is handled by a separate IC and is not connected to the GPIO pins.

                        • Re: Raspberry pi usb output from GPIO
                          Roger Wolff

                          On microcontrollers like the one on the raspberry PIs, USB is implemented as a peripheral: on the CPU chip some pins are dedicated to USB or might also be able to do GPIO if you don't need the USB function.

                           

                          The "separate chip" story comes from the LAN9514 on the raspberries. The broadcom CPU has only one USB port. This is fine when it is in a phone that has a single USB port, but as a more "general computer" more ports are required. So all model-B's have had a LAN chip that provides an USB hub for "more USB ports" as well as an Ethernet port.

                           

                          On the early model A's you can see the empty spot where the LAN-chip could have been mounted. See https://en.wikipedia.org/wiki/Raspberry_Pi   and look for the image of the "early raspberry pi 1 model a".

                      • Re: Raspberry pi usb output from GPIO
                        Frederick Vandenbosch

                        Would this be of any help? Turning your Raspberry PI Zero into a USB Gadget

                         

                        Becomes interesting, combined with something like this: Pi Zero USB Stem

                         

                        Edit: While the last replies are recent, the original post seems to date from long ago. Apologies.

                        • Re: Raspberry pi usb output from GPIO
                          pthat

                          Back in the day of Serial Ports and Parallel Ports on PC's you could connect the TX and RX(Serial) or the D0 (Parallel) lines to GPIO pins via a voltage shifter such as MAX232 and by sending out bytes at a low baud rate, read the Bits in as the pins went high and low, known as Bit Banging.

                           

                          USB is different as you cannot just simply connect the data lines and do the same. Firstly is the data being sent is probably too fast to monitor the pins and it actually does a lot of other stuff such as handshaking before it even gets to this point.

                           

                          If you really wanted to send data out of a USB port and read it in by monitoring the GPIO ports then you can setup your own Bit Bang Routines with FTDI modules based on the FT232 chip for serial and FT245 for parallel Data.

                           

                          Probably easier just to use the onboard Raspberry Pi UART and connect the FT232 module to read in the serial data, as would be much quicker than doing your own Bit Bang routines.

                           

                          Or just use the USB port on the Raspberry Pi to receive 64byte packets at a even faster speed.