2014/11/17

[nrf51]何故simple_uartは38400bps固定なんだろうか

nRF51822の動作をデバッガでブレークポイント使って止めながら見ていたのだが、そろそろ限界になってきた。
SDKがassertionを起こすのだ。
src/rem.cなるファイルだと言ってくるのだが、SDKの中にはなさそうなので、よくわからん。

それに、通信系のデバッグで片方が止まってしまうと、相手側も無応答とみなしてエラー扱いにするだろうから、ログを出しながら確認するのがよいだろう。
そういうわけで、デバッグ用にUARTを組み込むことにした。


ざっとSDKを見ると、simple_uart.hというものがあり、実装例もあったので、それを使うことにした。
configのパラメータでピン設定すると、あとはput/getすれば使えるというシンプルさ。

しかし・・・なぜか通信速度の設定などがない。
ソースを見ると、38400bpsで動くように実装されていた。
いくらシンプルとはいえ・・・。

動作クロックのつごうかとも思ったが、リファレンスマニュアルを見てもあまりそんな感じがしない。
嫌だったら自分で組めばいいやん、ということにはなるけど、でもこの実装になっているのは何か意図があるのか・・・。

気になるが、寝よう。

4 件のコメント:

  1. 自分もBAUDRATE変えたくて、
    単純にsimple_uart_config()中で
    UART_BAUDRATE_BAUDRATE_Baud38400ってとこをUART_BAUDRATE_BAUDRATE_Baud115200に変えてみたら一応普通に動いてるっぽいです。
    nrf51_bitfields.hには1Mの定義までありました。

    オリジナルのサービス作るのって、アプリ側も考えると面倒なので全部Nordic UARTサービスでいけないかと考えている今日この頃。

    返信削除
    返信
    1. 115200でも動くのですね。
      デバッグ用途だけなので、simple_uart_config()を書き換えるか、あるいはそのAPIだけ手元に持ってきて変更するか。

      Nordic UARTサービスは、存在を知りませんでした。
      まだ、サービスのようなところに追っつかないです。。
      アプリも苦手だから、なるべく楽をしたいので、さてどうする、というところです。

      削除
    2. Nordic UARTサービス ですが、SDKのV5.2とV6.0の
      \Board\pca10001\s110\experimental
      ってとこにソースあったのですが、SDK V6.1にはなくなってました。
      experimentalという名前の通り、実験で終わってしまったのでしょうかね。

      アプリはiOS、AndroidともにNordicから出ていて、単純にUARTでスマホとの双方向通信ができます。
      アプリがないと動作確認もできないのでとりあえずそれでADCとかI2C(SDKだとtwiって名前)とかの動作を試してます。

      ちなみにADCですが1つしかできないみたいで、バッテリ電圧みちゃうと他で使えないっぽいです。(ちょっと触っただけなので、方法あるのかもしれませんが)

      削除
    3. Boardの中にあったのですか。
      あの辺はボードに依存したアプリしか入っていないんだろうと、まったく見てなかったです。
      ちょっとしたデータを送ってみたいところだったので、眺めてみます。

      Analog INは数ポートあるようなので、チャネルを切替ながら1つずつA/Dするんですかねぇ。
      まあ、まだ私はそこまで至っていないのですが。。。

      削除

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。