Quote:
I know from application experience that 115.2Kbps is readily achievable on CAT5 UTP cable over a distance of 325 feet.
I wouldn't expect it to be a problem at any distance on a cable with a controlled impedance, assuming the voltage drop over the length of the cable isn't an issue and it is properly terminated with the same impedance at the end. I have no idea how it ever got the "it can only go 50 feet" reputation.
USB, on the other hand, suffers from its designers choosing to require a response to a certain command to come so soon after the command is sent that the speed of light prevents the cable from being longer than about 25 feet or so as the response simply won't be able to get back in time. So using a high-quality cable with proper signal termination won't help with USB. When you see a 100 foot USB cable, it works by converting the USB protocol to something else over the length of the cable, then converting it back to USB at the other end, which is why such cables are so expensive. It's really quite annoying. I thought I'd use USB cameras as cheap security cameras, and bought a bunch of 10-ft USB extension cables. One extension cable works fine, but if I use two, the connection degrades to USB-1.1 speeds, and if I use three it stops working entirely. I even tried putting a hub at each step as a sort of repeater, but it just doesn't work.
In any event, what problems I had with both serial and parallel were certainly caused by something, and if that something were corrected then those problems wouldn't exist, but the main point I was trying to make was that, as a hobbyist trying to use this stuff for I/O with my projects, the parallel port was most difficult to use reliably despite its deceptively simple design, the serial port was OK outside of my two $5 UARTs (they both had the same problem), but the FT245R was incredibly easy as it just does what it's supposed to do with clean logic levels, high speed and high reliability, so it's the one that I have to recommend.
...though now that I think about it, it too wasn't always that easy. Initially I had a lot of problems with it. The first seemed to be caused by a flaky USB hub I was using, though I didn't discover that for the longest time. Instead I merely discovered that if I limited each write to 15 bytes or less the problem went away. After discarding that hub, I discovered I could go up to 4096, but that seemed to hit another problem, probably because Linux's USB drivers use a buffer of that size. Just now I tried disabling the limit entirely on my EEPROM programmer, and it still worked without issues. So I guess the driver problems are solved these days, but back in 2005 they were a constant bother.
Quote:
The device name is created using the serial-number, so regardless of the USB port you plug that cable in the same cable always gets the same device name, this is very handy and so I just put labels on my cables and always now which cable is which device.
That's actually the reason for the small number taped to the top of the USB connector in my photos.
In Linux the serial number similarly shows up in the names of the devices in /dev/serial/by-id/, but that wasn't always the case. Initially they were only shown in the system log, so I had some scripts that would sort through it and figure out the correct /dev/ttyUSB device. ...but that was a pain as every kernel upgrade seemed to bring a new format to the messages the scripts looked for. Eventually I learned about udev, and so I created a udev rule to name the device according to the serial number.
Just create a file named /etc/udev/rules.d/FTDI.rules and put this in it:
Code:
ATTRS{idVendor}=="0403", SYMLINK+="FTDI/$attr{serial}"
This becomes very useful if you use FTDI's tool to reprogram the serial number. For the little break-out boards I put on solderless breadboard, I just name them like "Pj-104" which then shows up as /dev/FTDI/Pj-104, but for devices I put on a PCB, I name them like "c6XbT0/BlvERf" where I choose the letter/number code randomly, but the first half is a "device type" code and the second half is a "serial number" of sorts. So if I make more than one of that device, I keep the same code for the first half, but assign it a different code for the second half. So, for example, if I run the script that programs AT89S52 devices, it looks in "/dev/FTDI/c6XbT0/" to see what programming devices are attached; if there is only one, it just uses it, but if there are two, it asks me to tell it which to use.
I'd forgotten all about this, but it's really so useful that it's a reason all in itself to use an FT240X rather than a serial or parallel port.
Quote:
once you install the FTDI drivers the non-genuine chips stop working
Did they finally decide to *just* make it not work with the non-genuine chips? Last I heard they'd twice decided to make the driver brick the non-genuine chips, which of course made everyone hate them, whereas if they'd merely just made the driver refuse to work with the non-genuine chips but otherwise left them alone that would have been OK.
Quote:
But it doesn't stop here, the FTDI driver for the USB cables conflicts with the driver for the USB->ISP interface from Atmel
I assume they're using the bit-banging mode of the FTDI chips. All of the FTDI chips (the serial and the parallel ones) support a mode where you can just tell the chip via USB commands to raise or lower individual pins. It sounds quite useful as it would work much the same way that people like to use a parallel port, but the driver that implements it is incompatible with the driver that implements the virtual COM ports. So you can have serial ports, or you can have bit-banging devices, but you can't have both, which really ***** since there are enough FTDI devices around that you have to have the virtual COM driver installed, so you have no choice. If that bit-banging mode were actually usable then the FT240X would be everyone's ideal parallel port replacement, but the way things are, it's just a feature that the datasheet mentions which you can't actually use.
Quote:
"Log me in automatically every time I visit,"
Well, that seems to have worked this time, but then for all I know I just didn't spend enough time writing this post. It is kind of a strange way to say "don't automatically log me out," which probably had something to do with me not noticing it as I tend to take things literally.