LoginSignup
4
5

More than 5 years have passed since last update.

Linux + FTDIのUSB-UART変換で、non-standardなbaud rateを設定する

Last updated at Posted at 2016-03-04

きっかけ

ラジコン制御のSBusを扱いたい…のだが、彼は100Kbpsという、16450非互換なbaud rateなのだ…。

使用機材

Raspberry Pi

こちらによると、/boot/config.txtでクロックを変更できるらしい。
…いろいろやってみたのだが、Raspbianのkernelがバンバン新しくなっているのか、ちょっとうまくいかず、保留->実現

USB-UART変換

kernelを読む

FTDIのチップ用ドライバである、ftdi_sio.cを読むと、なんかいいことが書いてある。

ftdi_sio.c
     * 3. You can also set baud rate by setting custom divisor as follows
     *    - set tty->termios->c_cflag speed to B38400
     *    - call TIOCSSERIAL ioctl with (struct serial_struct) set as
     *  follows:
     *      o flags & ASYNC_SPD_MASK == ASYNC_SPD_CUST
     *      o custom_divisor set to baud_base / your_new_baudrate

もはやsttyコマンドだけではできない技だな…。

ググる

"non-standard baud rate linux" などでググると、ioctl()などで頑張る技が出てくる。
もうちょっと頑張って、setserialコマンドを発見。ASYNC_SPD_CUSTなんかも設定できそうな予感。

実験

秋月電子通商で買っておいた、Adafruit FT232H Breakoutを使ってみる。
baud_baseのデフォルトはチップによって違ったりするようだが、FT232Hは12Mbps?
kernelを追うのが面倒なので、オシロ(LabTool)で見ながら成功した手順がこちら。

# stty -F /dev/ttyUSB0 38400
# setserial /dev/ttyUSB0 spd_cust divisor 240
# echo -n U > /dev/ttyUSB0

'U'は、0b01010101なので、波形を見るにはちょうどいい。

記念撮影

100KHz-2.png

はい、チーズ。
ぴったり!

追記

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5