I just want to know if there is a way (in any programming language) that you can acces to data pins (d+ and d-)from USB connection from the computer.
So, I could to set a voltage of 2 V between them, or for example read the voltage between them too.
Excuse me for my ignorance.
Any help will be appreciated.
Thank you very much.
No, this is not possible. USB uses a complex protocol on those data lines,
and the host (PC) hardware does not allow direct access because of this complexity. You can look at the specs yourself at usb.org.
Related
Hello StackOverflow community,
I've been stuck on the following problem for a bit and would greatly appreciate a bit of help. I apologies in advance for my lack of knowledge about USB in general:
My goal is to use a USB3 port to transmit super-speed data between a computer and another device without having to use the D+/D- USB2 pairs (the reason is that I have 2 optical fibers only!) . In practice imagine an active optical cable which would only be able to transmit the USB 3 super-speed signals -> no D+/D-... both sides of the active cable are of course powered individually. The active cable has on both sides as I/O the copper differential pairs of the super-speed signal as well a source of power.
Both ends of this link are an issue for me at this stage: on computer side is there a way to tweak some kind of USB3 driver to ignore the typical host-device construct which I understand is imposed by the underlying USB2 protocol - a kind of by-pass? On device side... well same thing I guess - I haven't yet figured out implementation option.
Any thoughts are welcome!
Thanks a lot!
Grégory
Is it possible to capture a USB data from a usb communication between two devices by just tapping the lines and giving it to another controller with USB modules ?
To explain better A is communicating with B . C knows what interface they are using and in what endpoints they are communicating . Intension of C is to just listen what they are communicating. And C don’t want A and B to know that he is listening to their communication.
Thank you
In principle, it is possible.
It depends on the features of the USB module of the microcontroller. If it has something like a pure "listener" or "tap" mode, it should work. But I'm not aware of any USB module capable of this. This means nothing as there are so many different microcontrollers.
What you are asking for is basically "is it possible to build USB hardware analyzer/sniffer". As there are sniffers on the market, the answer to this question is yes.
One possible approach (if you are not that much interested in the physical layer) is to use USB PHY (e.g. Microchip USB3343 for USB 2.0) in passive mode. In such scenario the USB PHY does translate the USB signalling to ULPI. Then you can process the ULPI data to extract the USB packets. If you are interested in High Speed (or faster, e.g. USB 3.0 SuperSpeed) then pretty much the only viable approach is to use FPGA to do the processing.
If you are interested in seeing what kind of effort is needed to achieve USB 2.0 sniffing in hardware using the USB PHY approach, then check out the OpenVizsla project.
I would like to create a scenario to directly access IOs via USB by using FT232R.
In more detail, scenario is the following: I would like to feed an LIN transceiver IC by a FT232R USB device. However, the FT232R as a USB-serial-converter outputs UART signals, which includes a start bit as well as a stop bit. For me, it is required to not have these start and stop bits, even though they are standardized in UART protocol.
My questions:
Is it possible to use the bang mode of this device to avoid start/stop bits and transfer raw data? Then, how to program the code for doing this?
If not, are there any USB transceiver, which have to possibility via COM/driver access to fulfil my requirement?
Thanks a lot in advance for your help!
Yes, the chip provides 4 pins that can be used for generic bit banging. Here is an application note describing how to use bit banging mode.
I have a Korg NanoKey which I'd like to use to control a simple synthesizer I've designed on the Arduino platform. (I have an Arduino Uno.) Basically, I don't care about MIDI, I just want to read what note the keyboard has pressed down, but if MIDI is the only way I can do that, then it's okay with me. So my big question is, how do I do this? I haven't been able to find anyone else on the Internet who has already done this.
But more specifically, I see two challenges: First, I'd like to plug my NanoKey directly into the Arduino's USB port, but then I'm wondering if the Arduino would provide the necessary power to the NanoKey. Second, I'm not sure what protocol I would be reading. Can I just read MIDI signals as described in this tutorial?
I don't want to curb your enthusiasm but what you're attempting might be a bit hard basket. A USB system consists of a host controller and one or more peripheral devices. It's the host that controls traffic flow to the devices which means that devices can't transmit data on the bus without an explicit request from the host controller.
I'm not familiar with either the nanoKey or the Arduino platform but I'd be fairly confident that the nanoKey is a USB "device", normally connected to a computer which would act as the host. So what you would need for this system to work is for the Arduino to act as the host when communicating with the nanoKey. The Arduino schematic shows that the Arduino Uno uses an ATmega8U2 for USB coms. Unfortunately the ATmega8U2 is a USB device, so you've got two peripheral devices but no host controller to facilitate the transfer of data between them. You'd be better off using a development board for a micro that provides either USB Host or USB On-the-Go.
I opened up a Korg Nano controller yesterday and was surprised to discover that there's an AVR mega32 inside. It would be a significant undertaking, but with a bit of work you could probably work out the schematic and reprogram it yourself using their programming header breakout. You might not end up with much more functionality than you've got this other way, but it would be very educational.
I agree with the Jono - you are biting off a lot - it might even end up easiest to hook the keys up to the Arduino directly - tearing out the electronics and figuring out a way to multiplex the keys into a single channel without losing polyphony (resistor 'ladder' maybe). I any case, good luck. Amusingly, you'd making an analog keyboard to plug into a digital synthesizer.
Quick and Dirty Arduino MIDI Over USB demonstrates how to send/receive MIDI out over USB, but unfortunately, this probably isn't any help for what you are trying to do, since he's found a way to send and receive MIDI signals from a USB host, not act as a USB host himself - the opposite of your problem. However, I thought perhaps it would be of use, if you ever wanted to control your device from a computer.
As mentioned in the other posts, you would need to use a separate chip to provide the USB Host interface. Here's a great guide to using the USB Host shield by Circuits#Home to interface with an Akai LPK25 (USB Midi Keyboard).
http://blog.makezine.com/2010/11/30/usbhacking/
The Arduino sketch is provided, so you should be able to try it out, however debugging the USB Host connection could get tricky real fast if it doesn't work out of the box.
Further to this question, I'm looking for a device that will allow me to connect two USB hosts, while still being fully programmable. I would like something that can do the following:
Masquerade as an arbitrary USB device
Take input from a PC and do nothing but pass it on to the other host.
I've been looking for a microcontroller (preferably pre-assembled) that will allow me to do this, but have so far come up blank. Does anyone know of a controller (preferably cheap) that will allow me to do this?
Take input from a PC and do nothing but pass it on to the other host.
This is non-sensical from a USB perspective. USB is a host-based protocol: a device will never send data unless a host requests it first. Keep in mind here, 'host' and 'device' have specific meanings here within the protocol itself; you can think of a 'host' as the master and the 'device' as the slave. These roles are baked into a USB controller. There is no way to convince a standard USB controller in any given PC or peripheral to swap roles. There are add-in cards for PCs that are USB device controllers (making your PC act as a device), but 'cheap' is not a word I would use to describe them.
What you really are trying to do is create something that is a USB device to device bridge. So, alright, you need to have two USB(2.0) device controllers (maybe not that expensive, some micros already have to on-the-go controllers). Then you have to get them to pass something meaningful to each other. That's really hard because, as I mentioned above, hosts must tell a device to send data, and can send data to a device whenever it wants. Assuming a game controller shows up as a HID device (assuming the console doesn't listen for some weird, custom descriptor, and use some weird, custom protocol), interrupt pipes will be used to transfer data. This pipe is guaranteed to be polled at some minimum rate. So you have the console requesting data at some rate, which is not fixed, and a host-as-gamepad sending data at some rate. It's going to impossible for the two to sync up, so you'll need some kind of decent sized buffer on the gadget you're trying to create, which adds more $$ and more complexity.
USB is also pretty fast. In high-speed (USB2.0), frames are 125 microseconds long. That means you have to be completing requests at around 8KHz, which seems slow compared to the clock speed of a microcontoller, but keep in mind you have to be doing everything else at once. I'm not sure if there's a hobbyist-level microcontroller that's going to have everything you need, especially one for which you don't need to roll your own USB stack.
Try this chip -> FTDI 232 they are protocols chips, it will translate the data to i2c, spi, serial, whatever u want. nice, easy and cheap :) . FTDI firm, have even better ones (vinculum), with otg and everything u need but I would start with the FTDI232. U just need to use your favorite uC to do the work u want. ... on the other hand, u have to do a little board, maybe some soldering, :). good luck!
You will need $$$$ in equipment and $$$$$ in development work to achieve things the way you imagine. You should better tell us what do you want to emulate, and take a look here if someone has already done it for you. If not then use LUFA library with some bigger USB AVR that can behave as USB host and connect two of them (one as USB guest and the other as USB host) via some other protocol (I2C/SPI/UART).
In the meantime there is a great solution for this Problem. Using the FaceDancer Library together with one of the boards supported by this great piece of software (i.E. GreatFET One) you get exactly what you want:
The GreatFET One has two USB connectors: the first one is used to simulate ANY kind of USB Device, while the second one is used to forward all requests/responses received/send via the first connector.
Of course this tool requires that you know the USB protocol of the device you want to simulate. Although there are some code samples you still have to know what you are doing as soon as you customize them.