浜松市にいる組み込みおやじ-電子工作、回路設計、ファーム TIPS

このブログはビーコンの代表である菅原が、電気電子、電子工作、組み込みソフトウェアなどで、自分が苦労したところや面白い発見などを記事にしていきます。電子工作やマイコンに親しむ人が少しでも増えたらという思いでつづります。
やっぱり、電子工作が好きなんですよ。
fstrageの処理中にリセット動作が起こる。
0

    nRF52で、外付けADCで常時サンプリングするプログラムを開発している。

    ここで 設定を変えたいがために Nordicが提供しているライブラリ FlashStrageという仕組みを使っている。

    サンプルソースを元にコーディングしたが、イレース動作か書き込み動作でリセットしてしまうと言うことが起きていた。

     

    FlashStrageは Bluetooth動作にも配慮した動作をする。ソースを参照してみると fs_eraseとかfs_store などの消去、書き込みのコマンドを発行しても即座に動作せずに、一旦キューに蓄えておいて、動作できるタイミングで順次実行しているようだ。

    海外のサイトなどを当たっても、Nordicのサイトでも特に実装上の注意書きはない。

     

    いろいろ動作のタイミングを探っていたが、ADCのアクセスのタイミングとバッティングしたときにリセット動作が起こっているらしいとわかってきた。

    ADCとnRF52は SPIのインターフェースで以下の手順で通信する。

     

    ・ADC発行のデータレディー信号を割込みにして、割り込み処理内でSPIで該当するレジスタを読み込む

    ・SPI通信終了のハンドラでデータを取得

     

    今回は測定値を保存するなどではなく設定の時だけ FlashStrageを使いたいので、以下の対策をした。

    ADC動作中はFlashStrageを発行しない。(発行を一時待つ)

    FlashStrage動作中はADCの割込みを無視する。

     

    ということでバッティングを回避する処理を入れたら、問題のリセット動作は発生しなくなった。

     

     

    JUGEMテーマ:組み込み開発

    | ビーコン菅原 | nRF5x Nordic | 06:56 | comments(0) | trackbacks(0) |
    nRF52 P0.10,P0.9が操作できない問題について
    0

      nRF52で P0.9,P0.10が操作できなくて、ちょっとはまったのでメモしておく。

       

      P0.9,p0.10を出力に設定しても、ポートの操作ができない問題に直面。

      これは NRF_UICR->NFCPINSの設定が 1になっていて、P0.9,P0.10を NFCで使うモードになっているためと判明。

      ちなみに、デフォルト値は1 なので、なにもしないと NFCモードになる。
       

      で プロジェクトの中でNRF_UICR->NFCPINSの設定をしているところがあるのではないかと検索すると、一つだけヒット。。

      CONFIG_NFCT_PINS_AS_GPIOSを定義しておけば、P0.9,P0.10をGPIOとして設定するコードが有効になるので、GPIOとして使えるようになる。

       

      NRF_UICRは不揮発メモリなので一度設定してしまえば、電源を再投入してもリセットしてもGPIOモードのままになる。

       

      CONFIG_NFCT_PINS_AS_GPIOSの定義が見当たらなかったので、 該当する  #if defined (CONFIG_NFCT_PINS_AS_GPIOS)の直前に定義してみたところ、設定が書き換わり、P0.9,P0.10のポート操作ができるようになった。

       

      system_nrf52.c 140行目あたり(nRF5_SDK_11.0.0_89a8197)

              // add by sugawara
      #define     CONFIG_NFCT_PINS_AS_GPIOS 1

          /* Configure NFCT pins as GPIOs if NFCT is not to be used in your code. If CONFIG_NFCT_PINS_AS_GPIOS is not defined,
             two GPIOs (see Product Specification to see which ones) will be reserved for NFC and will not be available as
             normal GPIOs. */

          #if defined (CONFIG_NFCT_PINS_AS_GPIOS)
              if ((NRF_UICR->NFCPINS & UICR_NFCPINS_PROTECT_Msk) == (UICR_NFCPINS_PROTECT_NFC << UICR_NFCPINS_PROTECT_Pos)){
                  NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Wen << NVMC_CONFIG_WEN_Pos;
                  while (NRF_NVMC->READY == NVMC_READY_READY_Busy){}
                  NRF_UICR->NFCPINS &= ~UICR_NFCPINS_PROTECT_Msk;
                  while (NRF_NVMC->READY == NVMC_READY_READY_Busy){}
                  NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Ren << NVMC_CONFIG_WEN_Pos;
                  while (NRF_NVMC->READY == NVMC_READY_READY_Busy){}
                  NVIC_SystemReset();
              }
          #endif

      | ビーコン菅原 | nRF5x Nordic | 12:15 | comments(0) | trackbacks(0) |
      nRF5x をGCCでコンパイルする。(暫定)
      0

        JUGEMテーマ:組み込み開発

         

        nR52をGCCでコンパイルしたので、メモとする。

        いつもは恵まれた統合開発環境を使っていたこともあり、GCCを使う機会が無かったこともあり、なおかつ、Linux使いというわけでもなく、なじみが無かったので、結構苦労した。

         

        参考にしたサイト

        GCC ARM Toolchainでmbedをオフラインビルド

         

        ここより抜粋

        GCC ARM Toolchainのインストール

        gcc-arm-none-eabi-4_8-2013q4-20131204-win32.exeをダウンロードして、実行する。

        忘れずに、最後はAdd path to environment variableにチェックを入れる。(環境変数を追加してくれる)

        Gnu Makeの追加

        C:¥Program Files (x86)¥GNU Tools ARM Embedded¥4.8 2013q4¥binに下記のファイルを追加する。

        make.exe
        libiconv2.dll
        libintl3.dll
        上記ファイルは、sorceforge.netのmake-3.81-bin.zipとmake-3.81-dep.zipの中にある。
        引用終わり・・

        --

        ということで、

        今回は ble_app_nrsをコンパイルしてみたかったので

        ・・・¥nRF5_SDK_12.2.0_f012efa¥examples¥ble_peripheral¥a_ble_app_hrs¥pca10040¥s132¥armgcc

        のディレクトリまでおりて

        makeを実行。

        するとなにやらエラーが出てくる。

         

        ¥nRF5_SDK_12.2.0_f012efa¥components¥toolchain¥gcc¥Makefile.windows

        の中を見てみると

        インストールされているコンパイラのバージョンが違っていて、そのためにインストールされているフォルダが違っていた。

        4.9 2015q3 を 4.8 2014q3 に書き換えた。

         

        GNU_INSTALL_ROOT := C:/Program Files (x86)/GNU Tools ARM Embedded/4.8 2014q3
        GNU_VERSION := 4.9.3
        GNU_PREFIX := arm-none-eabi
         

        再び makefileのフォルダでmake.exeを実行するとコンパイルがあっさり通った。

         

        Keil の統合開発環境で見てみるとよくわかるが、Nordicが提供しているプロジェクトは階層構造が結構複雑だ。

         

         

        CUIの環境ではこれを見渡すのが難しいことと、いまのままではデバッガが使えない。いろいろと改善の余地があるけれど、まずはこれで開発を進めていく。

         

         

         

         

        | ビーコン菅原 | nRF5x Nordic | 09:06 | comments(0) | trackbacks(0) |
           1234
        567891011
        12131415161718
        19202122232425
        2627282930  
        << November 2017 >>
        + RECOMMEND
        + RECOMMEND
        + SELECTED ENTRIES
        + RECENT COMMENTS
        + RECENT TRACKBACK
        + CATEGORIES
        + ARCHIVES
        + つぶやき
        + MOBILE
        qrcode
        + LINKS
        + PROFILE