Getting nonstandard serial baud rates w/FTDI
Antony Mawer
fbsd-hackers at mawer.org
Wed Oct 24 17:25:18 PDT 2007
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...?
--Antony
More information about the freebsd-hackers
mailing list