

SpresenseでUARTの偶数パリティーを設定する方法をご存知の方教えてください。  
現状エラーが出てノンパリティーしか設定できないようです。

[code]

    Serial2.begin(9600,SERIAL_8E1);
    
[/code]

これを走らせると、シリアルモニタ上に

[code]

    UART only supports SERIAL_8N1
    
[/code]

このエラーはHardwareSerial.cppが出力しているようです。  
Spresenseでは偶数パリティーの使用が不可なのでしょうか。


CC BY-SA 4.0
2019-07-25T03:42:14.867
56875
2020-06-26T04:54:52.903
2019-08-02T00:38:36.020
3060
question
spresense
Serial2(UART2)のEven Parity設定


ソースを見たところ、Arduino Platformは、Parity=Noneに制限されていました。  
<https://github.com/sonydevworld/spresense-arduino-
compatible/blob/master/Arduino15/packages/SPRESENSE/hardware/spresense/1.0.0/cores/spresense/HardwareSerial.cpp#L57>

Spresenseのチップ自体は、パリティ指定があるみたいですね。  
<https://github.com/sonydevworld/spresense/blob/master/sdk/bsp/src/cxd56_serial.c>


CC BY-SA 4.0
2019-08-01T13:03:48.510
57109
2019-08-01T13:03:48.510
35219
56875
answer


BluetoothのモジュールがEvenパリティ前提だったので自分も同じ壁にブチ当たりました。

自分が採ったやり方ですが、SDKでEven Parityに変更してビルドし直すことで無事にBluetoothモジュールと通信できました！

SDKビルド可能な環境を持っている前提ですがそのやり方を載せておきます。

SDKの環境構築は「Spresense SDK スタートガイド」を参照してください。  
<https://developer.sony.com/develop/spresense/docs/sdk_set_up_ja.html>

arduino と sdk の両方のソースを取得

[code]

    $ git clone https://github.com/sonydevworld/spresense-arduino-compatible.git
    $ git clone --recursive https://github.com/sonydevworld/spresense.git
    
[/code]

sdkディレクトリでKernel Configurationを起動する

[code]

    $ cd spresense/sdk
    $ ./tools/config.py -k release -m
    
[/code]

UART2のパリティ設定をEven Parityに設定する

> Device Drivers > Serial Driver Support > UART2 Configuration

Parity setting を 0 -> 2 に変更

[![Kernel
Configuration](https://i.stack.imgur.com/WaBND.png)](https://i.stack.imgur.com/WaBND.png)

Kernel Configuration をSaveして終了します。

次のコマンドでoverwriteするか尋ねられるので'y'で上書きします

[code]

    $ ./tools/mkdefconfig.py -k release
    release is already exists, overwrite?  (y/n)? y
    
[/code]

arduino 側に移動してスクリプトを実行

[code]

    $ cd ../../spresense-arduino-compatible
    $ ./tools/prepare_arduino.sh -S ../spresense -p
    
[/code]

無事にスクリプトが終了したら、以下のファイルが更新されていると思います。  
spresense-arduino-compatible/Arduino15/packages/SPRESENSE/tools/spresense-
sdk/1.0.0/

  * spresense/release/include/nuttx/config.h
  * spresense/release/prebuilt/libs/libnuttx.a

これらをお使いのArduino環境のものと差し替えれば、スケッチはデフォルトのSERIAL_8N1のままでEven Parity設定で使えます。


CC BY-SA 4.0
2019-10-16T00:37:59.713
59731
2019-10-16T00:37:59.713
31378
56875
answer


ソニーのSPRESENSEサポート担当です。

[Spresense Arduino
v2.0](https://developer.sony.com/develop/spresense/docs/release_arduino_ja.html#_v2_0_0_20200612)
にて、Serialライブラリの機能拡張を行いました。

Serial.begin(9600,SERIAL_8E1) によってEven Parityの設定が可能です。

詳細なプログラミング仕様については、[Serialライブラリ](https://developer.sony.com/develop/spresense/docs/arduino_developer_guide_ja.html#_serial)
をご覧ください。

今後ともSPRESENSEをどうぞよろしくお願いいたします。  
SPRESENSEサポートチーム


CC BY-SA 4.0
2020-06-26T04:54:52.903
68021
2020-06-26T04:54:52.903
29520
56875
answer