Getting nonstandard serial baud rates w/FTDI

Bernd Walter ticso at cicely12.cicely.de
Wed Oct 24 18:01:49 PDT 2007


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 at bwct.de           info at bwct.de            support at fizon.de


More information about the freebsd-hackers mailing list