LoginSignup
0
0

[modernAVR] USART BAUD レジスタ設定値早見表

Last updated at Posted at 2024-06-04

概要

modernAVR 世代の USART周辺機能は、分数ボーレート発生器を持っている。対応する設定レジスタUSARTn.BAUD は、10ビットの整数部と、6ビットの小数部を持つ。自ずと設定可能な最小値と上限値があり、設定可能なボーレートF_BAUDは CPU動作クロック F_CPU に依存して左右される。この記事は設定可能な計算済の主だった BAUD数値を列挙したものだ。

BAUD設定値は、USART周辺機能の使用動作によって算出方法が異なり、以下の三種類がある。

  • 非同期標準速動作
  • 非同期倍速動作
  • 同期主装置動作

なお USART周辺機能は SPI主装置SPI動作で使うこともできるが、この場合は同期主装置動作の設定値を使用する。

同期動作従装置を選択した場合、USARTn.BAUDは使用されない。また非同期自動ボーレート従装置動作を選択した場合、USARTn.BAUDは採取された最新値を記憶するのに使用される。

F_CPU

modernAVR 世代は、内蔵高速 OSCHFの種類によって、以下の2系統に分かれる。

  • 20MHz/16MHz系統 - tinyAVR-0/1/2、megaAVR-0、AVR-EA、AVR-EB
  • 24Mhz系統 - AVR-DA、AVR-DB、AVR-DD、AVR-DU

前者の系統は FUSE設定によって、最高20MHz または 16Mhz いずれかの OSCHFを選択できる。それに対する分周比を 1、2、4、6、8、10、16、24、32、48、64 から選択できる。起動時の規定分周比は 6なので、起動時の規定動作速度は 2.66MHz または 3.33MHz である。

後者の系統の OSCHFは 1MHz、2MHz、3MHz、4MHz、8MHz、12MHz、16Mhz、20Mhz、24Mhz、さらに非推奨オーバークロックだが 28MHz、32MHz から基準周波数を選び、これに 1、2、4、6、8、10、16、24、32、48、64 から分周比を選んで掛け合わせることができる。起動時の規定動作速度は 4MHz である。

いずれの規定動作速度も旧来の AVRの 1MHzより高速で、OSCHF設定を変更しなくとも 115200bps の UART速度を確保できるため、ブートローダーの規定速度はこのボーレートであることが普通だ。一方でそれ以上ブートローダーを高速化するには、OSCHF設定変更は必須である。

なおどの系統でも、32768Hz の XSOC低速基準周波数を選ぶことができ、それに分周比を掛けることで 512Hz の超低速動作を実現可能だが、この速度で UART を扱うのは非実用的なため、ここでは論じない。

誤差調整範囲

一般的な 8N1 フレームでは、フレーム長は 10bitであることからボーレートの最大許容誤差は ±2%以内(累積誤差がその10倍になる)であり、これを超えると非同期動作は脱調する可能性が高まる。しかし分数ボーレート発生器の小数部は 6ビットであるため、特に高速度域では調整速度が荒くなってしまう。これを超える誤差の吸収には、F_CPU を生成する OSCHF自体の校正機能(1/1024=0.097%精度)を使用しなければならない。

OSC誤差校正バイト

主に20MHz/16MHz動作系統の、一部の modernAVRは OSC誤差校正バイトを持っている。

OSC16ERR3V OSC16ERR5V OSC20ERR3V OSC20ERR5V など

これらの校正バイトは OSCHFに対する 1/1024精度の増減値を保持しているが、分数ボーレート発生器は 1/64精度でしかないことから、その使用は適していない。必要であれば前述のように OSCHF自体の校正機能(1/1024精度)を使用すべきである。

UART 非同期標準速動作

非同期標準速動作での BAUDレジスタ設定値は以下の式で求められる。

BAUD = floor( (64 * F_CPU) / (16 * F_BAUD) + 0.5 )

ただし、

0x40 <= BAUD < 0x10000

である。従って F_CPUに対する F_BAUDの数値範囲は

F_CPU/16384 < F_BAUD <= F_CPU/16

であると換言できる。

F_BAUD 1M 2M 2.66M 3M 3.33M 4M
300 $3415 $682B $8AE4 $9C40 $AD9C $D055
600 $1A0B $3415 $4572 $4E20 $56CE $682B
1200 $D05 $1A0B $22B9 $2710 $2B67 $3415
2400 $683 $D05 $115C $1388 $15B4 $1A0B
4800 $341 $683 $8AE $9C4 $ADA $D05
9600 $1A1 $341 $457 $4E2 $56D $683
19200 $D0 $1A1 $22C $271 $2B6 $341
38400 $68 $D0 $116 $139 $15B $1A1
57600 $45 $8B $B9 $D0 $E7 $116
76800 - $68 $8B $9C $AE $D0
115200 - $45 $5D $68 $74 $8B
230400 - - - - - $45
460800 - - - - - -
921600 - - - - - -
250000 - - - - - $40
500000 - - - - - -
F_BAUD 5M 6M 7M 8M 10M 12M
300 - - - - - -
600 $8235 $9C40 $B64B $D055 - -
1200 $411B $4E20 $5B25 $682B $8235 $9C40
2400 $208D $2710 $2D93 $3415 $411B $4E20
4800 $1047 $1388 $16C9 $1A0B $208D $2710
9600 $823 $9C4 $B65 $D05 $1047 $1388
19200 $412 $4E2 $5B2 $683 $823 $9C4
38400 $209 $271 $2D9 $341 $412 $4E2
57600 $15B $1A1 $1E6 $22C $2B6 $341
76800 $104 $139 $16D $1A1 $209 $271
115200 $AE $D0 $F3 $116 $15B $1A1
230400 $57 $68 $7A $8B $AE $D0
460800 - - - $45 $57 $68
921600 - - - - - -
250000 $50 $60 $70 $80 $A0 $C0
500000 - - - $40 $50 $60
1000000 - - - - - -
F_BAUD 14M 16M 20M 24M 28M 32M
300 - - - - - -
600 - - - - - -
1200 $B64B $D055 - - - -
2400 $5B25 $682B $8235 $9C40 $B64B $D055
4800 $2D93 $3415 $411B $4E20 $5B25 $682B
9600 $16C9 $1A0B $208D $2710 $2D93 $3415
19200 $B65 $D05 $1047 $1388 $16C9 $1A0B
38400 $5B2 $683 $823 $9C4 $B65 $D05
57600 $3CC $457 $56D $683 $798 $8AE
76800 $2D9 $341 $412 $4E2 $5B2 $683
115200 $1E6 $22C $2B6 $341 $3CC $457
230400 $F3 $116 $15B $1A1 $1E6 $22C
460800 $7A $8B $AE $D0 $F3 $116
921600 - $45 $57 $68 $7A $8B
250000 $E0 $100 $140 $180 $1C0 $200
500000 $70 $80 $A0 $C0 $E0 $100
1000000 - $40 $50 $60 $70 $80
2000000 - - - - - $40
2500000 - - - - - -

USARTn.BAUDレジスタの既定値は 0x0000なので、設定値が 0xFF 以下であるなら下位バイトを書き換えるだけで良い。

UART 非同期倍速動作

非同期倍速動作での BAUDレジスタ設定値は以下の式で求められる。

BAUD = floor( (64 * F_CPU) / (8 * F_BAUD) + 0.5 )

ただし、

0x40 <= BAUD < 0x10000

である。従って F_CPUに対する F_BAUDの数値範囲は

F_CPU/8192 < F_BAUD <= F_CPU/8

であると換言できる。

F_BAUD 1M 2M 2.66M 3M 3.33M 4M
300 $682B $D055 - - - -
600 $3415 $682B $8AE4 $9C40 $AD9C $D055
1200 $1A0B $3415 $4572 $4E20 $56CE $682B
2400 $D05 $1A0B $22B9 $2710 $2B67 $3415
4800 $683 $D05 $115C $1388 $15B4 $1A0B
9600 $341 $683 $8AE $9C4 $ADA $D05
19200 $1A1 $341 $457 $4E2 $56D $683
38400 $D0 $1A1 $22C $271 $2B6 $341
57600 $8B $116 $172 $1A1 $1CF $22C
76800 $68 $D0 $116 $139 $15B $1A1
115200 $45 $8B $B9 $D0 $E7 $116
230400 - $45 $5D $68 $74 $8B
460800 - - - - - $45
921600 - - - - - -
250000 - $40 $55 $60 $6B $80
500000 - - - - - $40
1000000 - - - - - -
F_BAUD 5M 6M 7M 8M 10M 12M
300 - - - - - -
600 - - - - - -
1200 $8235 $9C40 $B64B $D055 - -
2400 $411B $4E20 $5B25 $682B $8235 $9C40
4800 $208D $2710 $2D93 $3415 $411B $4E20
9600 $1047 $1388 $16C9 $1A0B $208D $2710
19200 $823 $9C4 $B65 $D05 $1047 $1388
38400 $412 $4E2 $5B2 $683 $823 $9C4
57600 $2B6 $341 $3CC $457 $56D $683
76800 $209 $271 $2D9 $341 $412 $4E2
115200 $15B $1A1 $1E6 $22C $2B6 $341
230400 $AE $D0 $F3 $116 $15B $1A1
460800 $57 $68 $7A $8B $AE $D0
921600 - - - $45 $57 $68
250000 $A0 $C0 $E0 $100 $140 $180
500000 $50 $60 $70 $80 $A0 $C0
1000000 - - - $40 $50 $60
2000000 - - - - - -
F_BAUD 14M 16M 20M 24M 28M 32M
300 - - - - - -
600 - - - - - -
1200 - - - - - -
2400 $B64B $D055 - - - -
4800 $5B25 $682B $8235 $9C40 $B64B $D055
9600 $2D93 $3415 $411B $4E20 $5B25 $682B
19200 $16C9 $1A0B $208D $2710 $2D93 $3415
38400 $B65 $D05 $1047 $1388 $16C9 $1A0B
57600 $798 $8AE $ADA $D05 $F31 $115C
76800 $5B2 $683 $823 $9C4 $B65 $D05
115200 $3CC $457 $56D $683 $798 $8AE
230400 $1E6 $22C $2B6 $341 $3CC $457
460800 $F3 $116 $15B $1A1 $1E6 $22C
921600 $7A $8B $AE $D0 $F3 $116
250000 $1C0 $200 $280 $300 $380 $400
500000 $E0 $100 $140 $180 $1C0 $200
1000000 $70 $80 $A0 $C0 $E0 $100
2000000 - $40 $50 $60 $70 $80
2500000 - - $40 $4D $5A $66
3000000 - - - $40 $4B $55
4000000 - - - - - $40
5000000 - - - - - -

最小値の 0x40 に対してキャリブレーション校正を適用すると下限を割り込む場合がある。

USART 同期主装置動作

同期主装置動作では、SPI通信と同様に主装置の XCK信号出力(つまり3線式)で 従装置側の USART送受信部を直接駆動できるため、以下の利点がある。

  • 非同期動作では達成できない高速通信
  • 従装置側の速度設定が不要で、対応速度範囲は F_CPUにのみ制限される

同期動作での BAUDレジスタ設定値は以下の式で求められる。得られた値はレジスタの10ビット整数部に与えなければならない。

BAUD[15-6] = floor( (64 * F_CPU) / (2 * F_BAUD) + 0.5 )

つまり

BAUD = floor( (64 * F_CPU) / (2 * F_BAUD) + 0.5 ) * 64

ただし、

  • BAUDの小数部(bit[5-0])は設定できず、常にゼロとしなければならない
  • F_BAUDは F_CPUの 1/4以下でなければならない

という制約があるため設定可能ボーレート範囲は、

F_CPU/32 < F_BAUD <= F_CPU/4

である。これは高速通信は得意だが、低速側は苦手なことを意味する。

よって設定可能数値は、0x2000未満では F_CPU/4 より早くなってしまうため、

0x2000 <= BAUD < 0x10000 (BAUDの下位6ビットはゼロ固定)

に限られる。

つまるところ選択可能な F_CPU に対する代表的な速度比は(設定可能な F_CPU値を割り切れる) 1/4、1/5、1/8、1/10、1/16、1/20、1/25 のいずれかになるだろう。一部の F_CPU 値では 1/15、1/30 等でも割り切れる。

F_BAUD 1M 2M 2.66M 3M 3.33M 4M
19200 - - - - - -
38400 $D040 - - - - -
57600 $8B00 - - - - -
76800 $6840 $D040 - - - -
115200 $4580 $8B00 $B940 $D040 $E780 -
230400 $22C0 $4580 $5C80 $6840 $73C0 $8B00
460800 - $22C0 $2E40 $3400 $39C0 $4580
921600 - - - - - $22C0
250000 $2000 $4000 $5540 $6000 $6AC0 $8000
500000 - $2000 $2AC0 $3000 $3540 $4000
1000000 - - - - - $2000
2000000 - - - - - -
F_BAUD 5M 6M 7M 8M 10M 12M
115200 - - - - - -
230400 $AD80 $D040 $F300 - - -
460800 $56C0 $6840 $7980 $8B00 $AD80 $D040
921600 $2B80 $3400 $3CC0 $4580 $56C0 $6840
250000 $A000 $C000 $E000 $10000 - -
500000 $5000 $6000 $7000 $8000 $A000 $C000
1000000 $2800 $3000 $3800 $4000 $5000 $6000
2000000 - - - $2000 $2800 $3000
2500000 - - - - $2000 $2680
3000000 - - - - - $2000
4000000 - - - - - -
F_BAUD 14M 16M 20M 24M 28M 32M
230400 - - - - - -
460800 $F300 - - - - -
921600 $7980 $8B00 $AD80 $D040 $F300 -
250000 - - - - - -
500000 $E000 $10000 - - - -
1000000 $7000 $8000 $A000 $C000 $E000 $10000
2000000 $3800 $4000 $5000 $6000 $7000 $8000
2500000 $2CC0 $3340 $4000 $4CC0 $5980 $6680
3000000 $2540 $2AC0 $3540 $4000 $4AC0 $5540
4000000 - $2000 $2800 $3000 $3800 $4000
5000000 - - $2000 $2680 $2CC0 $3340
6000000 - - - $2000 $2540 $2AC0
7000000 - - - - $2000 $2480
8000000 - - - - - $2000

なお AVR-DUシリーズでは USB周辺機能を併用する場合 F_CPU 値を 最小12MHz から 20MHz(推奨)で使用しなければならないため、実用的な USART同期速度は 500kbpsから 5Mbps のあたりに限られる。

AVR64DU28/32の初期ロットには 最高速20MHzまでしか動作保証がされない不具合(Eratta)がある。

Copyright and Contact

Twitter(X): @askn37
BlueSky Social: @multix.jp
GitHub: https://github.com/askn37/
Product: https://askn37.github.io/

Copyright (c) askn (K.Sato) multix.jp
Released under the MIT license
https://opensource.org/licenses/mit-license.php
https://www.oshwa.org/

0
0
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
0
0