Re: Getting nonstandard serial baud rates w/FTDI



On Thu, Oct 25, 2007 at 10:11:36AM +1000, Antony Mawer wrote:
On 25/10/2007 8:59 AM, Bernd Walter wrote:
On Wed, Oct 24, 2007 at 09:53:06AM -0700, Brooks Talley wrote:
Hi, everyone. I'm pulling my hair out in great chunks.

I need to get Python 2.5, using pyserial 2.2, to open a FTDI-based usb to
serial port at 250000 baud. The FTDI chip definitely supports this rate.
The port mounts at /dev/cuaU0.

The problem is that
/usr/local/lib/python2.5/site-packages/serial/serialposix.py fails on
this line:
ispeed = ospeed = getattr(TERMIOS,'B%s' % (self._baudrate))
...
Any ideas on how to get this to work? It doesn't seem like it should be
this difficult!

You need to add support in the uftdi driver itself.
There is an enum containing ftdi_8u232am_* fields and a switch/case in
the driver.

The hex value divides the 48MHz clock and leaves a factor 8.
So 0x0018 should be the right value for 250000bps.

There is an OpenBSD patch to calculate the rates dynamically:
http://archive.openbsd.nu/?ml=openbsd-tech&a=2006-06&m=2083975
Something similar (but in better style IMHO) is commited to OpenBSD,
which we should merge into our source.


There looks to me to be an issue with an assignment operation (=) rather
than equality test (==) in the following section of the patch:


+ /* Special cases for 2M and 3M. */
+ if ((speed >= UI(3000000 * 0.97)) && (speed = UI(2000000 * 0.97)) \
&& (speed <= UI(2000000 * 1.03))) { result = 1; goto done; }


I would imagine the "(speed = UI(2000000 * 0.97))" should be == rather
than = for this to make sense...?

Use the OpenBSD code instead - it is tested and generaly looks better.
You can easily get their diffs via cvs.
Rev 1.11 of uftdireg.h and 1.29 of uftdi.c

--
B.Walter http://www.bwct.de http://www.fizon.de
bernd@xxxxxxx info@xxxxxxx support@xxxxxxxx
_______________________________________________
freebsd-hackers@xxxxxxxxxxx mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@xxxxxxxxxxx"



Relevant Pages