目的
まず、BL702って何なのって話から、始まるのだろうね。
USBシリアル変換器として使われているが、その実態は、
32-bit RISC-V,fmax 144MHz,132KB RAM,192KB ROM,512KB Flash搭載のmcuなのだ。
単品でUSBからのプロクラム書き込みが可能、mcuとして動作する。
しかも安そうだし。
◆◆◆ 之は遊んでみるしか無いだろう ◆◆◆
開発環境を確認する前に、勇み足でポチっちゃったよ。使えなかったらどうしよう。
経緯
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デバイス名)
設定変更終わったら、念のために 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); }
}
ディフォルトの設定変更
ディフォルト設定は、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社は国内優先のようだが。
物量とスピードに、我が日本は対抗できるのかな。
なお、上記記載内容は全て無保証であり、各自の責任においてご利用願います。