2
0

More than 1 year has passed since last update.

BL702をmcuとして使ってみる

Posted at

目的

 まず、BL702って何なのって話から、始まるのだろうね。
 USBシリアル変換器として使われているが、その実態は、
 32-bit RISC-V,fmax 144MHz,132KB RAM,192KB ROM,512KB Flash搭載のmcuなのだ。
 単品でUSBからのプロクラム書き込みが可能、mcuとして動作する。
 しかも安そうだし。
 ◆◆◆ 之は遊んでみるしか無いだろう ◆◆◆
 開発環境を確認する前に、勇み足でポチっちゃったよ。使えなかったらどうしよう。
bu702_image.jpg

経緯

 Tang-Nano-4Kについては前回書いた
 Tang-Nano-4KのUSB-I/Fへの搭載でこのチップを知ったが、Tang-Nanoのch552と同じ立ち位置。
 やってる事も出来る事も同様だが、BL702の方が32bitと高性能。
 E*とかA*を見回したが、チップ単体は見つけられなかった。
 「RV-Debugger-BL702」てのが\500円位で有ったので購入。
  ※別途運単必要だったが、その所為か意外と早く届いた。
 開発環境はBouffaloLab社のBL MCU SDK 開発ガイドに2種類提示されていた。
  Windows_CDK は登録が必要なので取り合えずパス。(日本からの登録できるか判らん)
  Windows_eclipse が使えそうなのでこちらで行こう。
  ※ここに書かれていることが理解出来れば、以下を見る必要は無いな。

開発環境

 ターゲット   RV-Debugger-BL702
 通信確認    USBシリアル接続器
 開発ソフト   Windows_eclipse
 サンプルソフト bl_mcu_sdk

開発環境の設定

 Windows_eclipseをダウンロード
  ※速度遅いが我慢の子。
 bl_mcu_sdkをダウンロード
  ※多分、bflb_flash_toolがウイルスと認定されるので、不安を覚える方は此処で辞めてください。
   自己責任で進められる方は、復元して続けてください。
 解凍して適当なディレクトリに設置して、eclipse.exeを起動。
 ワークスペースを聞かれるので適当に設定。
 ツールバーの Window -> Preferences を選択、ダイアログが開く。
 ダイアログの左下の Import アイコンをクリックすると、Import Preferences が開く。
 From Preferences Files にbflb_mcu_preferences.epfを登録。
  ※eclipseディレクトリの直下に存在。
 登録後 Finish を押すが、次のダイアログでは Cancel を押して操作を継続。
 File -> Import と選択して、Select 画面を表示。
 General -> Existing.... と選択しておいて、 NEXT> のクリックで Import Projects のダイアログが開く。
 Select root directory に bl_mcu_sdk の格納ディレクトリを設定して Finish 。
 Project Explorer に bl_mcu_sdk が表示されていたら設定は大成功。

RV-Debugger-BL702の設定

 RV-Debugger-BL702をUSBに接続すると、おニューではデバイスマネージャーにCOMyが表示される。
 一度USBを取り外し、RV-Debugger-BL702の Boot 釦を押したまま、USBに再接続。
  ※基板LEDがうすボケ表示されたら、釦は離す。
  ※USB電源ON/OFFでも可、電源SWの付いてるUSBハブだと楽チン。
 デバイスマネージャーにCOMzの表示を確認。
  ※COMyとCOMzは別の番号、別のドライバが当たる。
  ※COMyの時はFTDI製のドライバを使うようだが、大丈夫なのかな。
 RV-Debugger-BL702への書き込みは、COMzから行う。

コンパイルから書込み迄。

 Project Explorer に表示されている bl_mcu_sdk をクリックして展開する。
 Build Targets が見えるので之も展開。bl_clean, bl_make, download が表示される。
 各々を右クリックしてから Edit 選択して、プロパティを下記に変更。
  bl_clean 特に変更箇所無し
  bl_make  Build target は helloworld(若しくはコンパイルしたいディレクトリ)
       Build commnd は make build BOARD=bl702_iot に変える。(includeファイルが変わる)
  download Build commnd は make INTERFACE=uart COMx=comz(boot釦押下時に表示されたCOMデバイス名)
bl720_build.jpg

 設定変更終わったら、念のために bl_clean をダブルクリックで実行。(毎回行う必要は無い)
 Console に cmake -E remove_directory out とかが出たら成功。
  ※makeとかcmakeがなんちゃらとか言われた場合の対応は下記に記載。
 次は bl_make をダブルクリックでコンパイルを実行。
 [100%] Built target helloworld.elf なんて出てたら成功。
  ※bl702_custom が無いと言われたら bl702_iot をコピーして作っておく。(\bsp\board\bl702)
 RV-Debugger-BL702を書込みモード(COMy表示)で接続し、 bl_download をダブルクリック。
 表示がずらずら流れ、最後に [All Success] が表示されれば完了。
  ※当方の環境では当初失敗したが、FTD1232 が電源オフ状態で刺さっていて発生した気配。
 RV-Debugger-BL702の電源をいったん切り、再投入すれば書込んだソフトが走り出す。
  ※一度書き込むとRV-Debugger-BL702としては使えなくなる。
   binの再書き込みで復旧するのだろうが、ソースは有るがbinは無い、コンパイル方法は不明。

Lチカ

 定番のLチカは、gpio_blink に書かれているが、その儘ではチカッてくれない。
 原因は examples がRV-Debugger-BL702用で無く、LEDの位置も数も違っている所為。
 GPIO_PIN_29等の記述を、RV-Debugger-BL702が持つ、9,17ピンに書き換える必要が有る。
  ※何故か GPIO_PIN_7 なんて書き方は通してくれなかったので、数字直書き。

UART入出力

 MSG出力の使用例が helloworld に書かれている。
 但しこれもディフォルトでは、TXDは基板上部の真ん中、RXDはTCKピンへの接続が必要。
 2Mbpsで通信が行われる。
  ※Teratermは通信速度をキー入力すれば、2Mbpsに設定可能、
 printfは普通に使えた。
  ※fflush(stdout)しないと、纏めて表示されるのはお約束。
 get系(getch,gets等)は全滅、コンパイルエラーにはならないが動作せず。

プログラム例

 LチカとprintfとUART入力を纏めた物を下記に示す。
  ※helloworldのmain.cと差し替えて動作させる。正常動作は確認済み。
  ※Lチカの動作を判り易くする為、UART入力の処理は微妙。
  ※UART入力は割り込み無しの見本も有ったが、今回は動作せず。
  ※hal_xxxにはbl702以外をincludeしているものも有り、今後何か悪さをするかも。

#include <stdio.h>
#include "bflb_platform.h"
#include "hal_uart.h"
#include "hal_gpio.h"

// COMx(ORG) Speed = 2000000 TX=GPIO14(TXD) RX=GPIO15(TCK)
// Pin.Swap GPIO15<->23  (bsp\board\bl702\bl702_iot\)pinmux_config.h
// Speed 2000000->115200 (bsp\board\bl702\bl702_iot\)peripheral_config.h
char uargs[128];
uint32_t usize=0;
void uart_irq_callback(struct device *dev, void *args, uint32_t size, uint32_t state){
    if (state == UART_EVENT_RX_FIFO) {
        //device_write(dev, 0, (uint8_t *)args, size);
        memcpy(&uargs[usize],args,size); usize = usize + size;
        uargs[usize] = 0;
    } else if (state == UART_EVENT_RTO) {
        device_write(dev, 0, (uint8_t *)args, size);
    }
}

int main(void){
    bflb_platform_init(0);

    // UART IRQ Initialize
    struct device *uart = device_find("debug_log");
    if (uart) {
        device_set_callback(uart, uart_irq_callback);
        device_control(uart, DEVICE_CTRL_SET_INT, (void *)(UART_RX_FIFO_IT | UART_RTO_IT));
    } else {
        printf("UART Not.Found\r\n");
    }

    // LED Initialize
    gpio_set_mode(9, GPIO_OUTPUT_PP_MODE);
    gpio_set_mode(17, GPIO_OUTPUT_PP_MODE);

    for(;;){
        MSG("hello world!\r\n");
        if(usize!=0){
            printf("%s", uargs); fflush(stdout); usize = 0;
        }

        // LED Blinking
        gpio_write(9, 0); gpio_write(17, 0); bflb_platform_delay_ms(500);
        gpio_write(9, 1); gpio_write(17, 1); bflb_platform_delay_ms(500);
    }

    BL_CASE_SUCCESS;
    while (1) { bflb_platform_delay_ms(100); }
}

bl720_hello.jpg

ディフォルトの設定変更

 ディフォルト設定は、bl_makeに設定したBuild commndにより参照される、includeファイルにより決まる。
 入出力ピンは (bsp\board\bl702\bl702_iot)pinmux_config.hに記載されている。
  #define CONFIG_GPIO15_FUNC GPIO_FUN_UART0_RX を #define CONFIG_GPIO15_FUNC GPIO_FUN_UNUSED に、
  #define CONFIG_GPIO23_FUNC GPIO_FUN_UNUSED  を #define CONFIG_GPIO23_FUNC GPIO_FUN_UART0_RX に、
 書き換える事により、15ピンと23ピンを交換できる。
 これで、TX,RX共に基板上部中央のピンに接続できる。

 同様に通信速度は、(bsp\board\bl702\bl702_iot)peripheral_config.hに記載されており、
  .baudrate = 2000000 を .baudrate = 115200 に、
 書き換える事により、速度が115200bpsに変更される。

eclipseの動作

 pathの設定によっては、eclipseが外部のアプリを参照して、コンパイル停止となる場合が有る。
 下記を eclipse.bat なんてファイルに記載し、bat起動することにより防止できる。
  ※当方の環境ではC:\app下に、BouffaloLabの名前でeclipse環境を格納している。

path=C:\app\BouffaloLab\cmake\bin
start /b eclipse.exe

ウイルスチェックについて

 本来チェックに引っ掛かったEXEを使用するのは望ましくない。が、
 今回は記載内容などを鑑み、検出はノート〇の余計なお世話と判断し導入を強行した。
 本内容に誘発されてツールを導入する時は、自己責任で願います。
 ※私の貴方で違うサイトから落とすなんて事も、可能性としては有り得るから。
 しかし、ウイルス認定される原因は、「使用者が50人以下」と言う事らしいが、
 ノート〇が知らないexeは、全てウイルスだと言い張るのは市販ソフトとしてどうかと思う。
 basic(VB6古い)で自作したソフトが、コンパイルした途端にウイルス認定されて削除されるのは、どう考えてもおかしいだろう。
 ユーザーが一人もいないなんて言われても、当たり前だから。

感想

 毎度言っているような気もするが、この性能と開発環境込みでこの値段。
 BLEとZigbeeにも使えるらしいが、RV-Debugger-BL702のアンテナパターンにコネクタを付ければ使えるのかも。
  ※電波法違反には一応なるので、やらないけど。
 ESP32もコンセプトが素晴らしかったが、bl702のUSB直結も魅力。その内USB2ハイスピードも出て来るのか。
 中国企業のアグレッシブさには感心してしまう。開発元のBouffaloLab社は国内優先のようだが。
 物量とスピードに、我が日本は対抗できるのかな。
 なお、上記記載内容は全て無保証であり、各自の責任においてご利用願います。

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