BL602 RISC-V WiFi и Bluetooth 5.0 LE SoC

pvvx

Активный участник сообщества
Пришли такие платки из
1613014962239.png
Info:

Залил "bl602_demo_at.bin" для теста iperf...
CH430 не справляется с выводом отладки в USB-COM порт от чипа, т.к. по умолчанию скорость вывода отладочной информации у чипа 2 мегабита.
Там-же работает и интерфейс cli.
"AT" работает на других пинах - D3/D4 (RX/TX), но это не интересно.
Код:
# help
====Build-in Commands====
====Support 4 cmds once, seperate by ; ====
help                     : print this
p                        : print memory
m                        : modify memory
echo                     : echo for command
exit                     : close CLI
devname                  : print device name
sysver                   : system version
reboot                   : reboot system
poweroff                 : poweroff system
reset                    : system reset
time                     : system time
ota                      : system ota
ps                       : thread dump
ls                       : file list
hexdump                  : dump file
cat                      : cat file

====User Commands====
stack_wifi               : Wi-Fi Stack
stack_ble                : BLE Stack
free                     : Remain free memory
coex_dump                : coex dump
rf_dump                  : rf dump
wifi_capcode             : wifi capcode
wifi_scan                : wifi scan
wifi_scan_filter         : wifi scan
wifi_mon                 : wifi monitor
wifi_raw_send            : wifi raw send test
wifi_sta_info            : wifi sta info
wifi_sta_ip_set          : wifi STA IP config [ip] [mask] [gw] [dns1] [dns2]
wifi_sta_ip_unset        : wifi STA IP config unset
wifi_sta_disconnect      : wifi station disconnect
wifi_sta_connect         : wifi station connect
wifi_sta_get_state       : wifi sta get state
wifi_sta_autoconnect_enable: wifi station enable auto reconnect
wifi_sta_autoconnect_disable: wifi station disable auto reconnect
rc_fix_en                : wifi rate control fixed rate enable
rc_fix_dis               : wifi rate control fixed rate diable
wifi_sta_ps_on           : wifi power saving mode ON
wifi_sta_ps_off          : wifi power saving mode OFF
wifi_sta_denoise_enable  : wifi denoise
wifi_sta_denoise_disable : wifi denoise
-----------------> AABA Request:
    A-MSDU: Permitted
    Block Ack Policy: Immediate Block Ack
    TID: 4
    Number of Buffers: 64
-----------------> AABA Response:
    A-MSDU: Not Permitted
    Block Ack Policy: Immediate Block Ack
    TID: 4
    Number of Buffers: 8
wifi_sniffer_on          : wifi sniffer mode on
wifi_sniffer_off         : wifi sniffer mode off
wifi_ap_start            : start Ap mode
wifi_ap_stop             : stop Ap mode
wifi_ap_conf_max_sta     : config Ap max sta
wifi_dump                : dump fw statistic
wifi_cfg                 : wifi cfg cmd
wifi_mib                 : dump mib statistic
wifi_pkt                 : wifi dump needed
wifi_coex_rf_force_on    : wifi coex RF forece on
wifi_coex_rf_force_off   : wifi coex RF forece off
wifi_coex_pti_force_on   : wifi coex PTI forece on
wifi_coex_pti_force_off  : wifi coex PTI forece off
wifi_coex_pta_force_on   : wifi coex PTA forece on
wifi_coex_pta_force_off  : wifi coex PTA forece off
wifi_sta_list            : get sta list in AP mode
wifi_sta_del             : delete one sta in AP mode
wifi_edca_dump           : dump EDCA data
wifi_state               : get wifi_state
wifi_update_power        : Power table test command
blemesh_init             :
blemesh_init:[Initialize]
 Parameter[Null]

blemesh_set_dev_uuid     :
blemesh_input_num:[input number in provisionging procedure]
     [Size:16 Octets, e.g.112233445566778899AA]

blemesh_pb               :
blemesh_pb:[Enable or disable provisioning]
     [bear, 1:adv bear, 2:gatt bear]
     [enable, 0:disable provisioning, 1:enable provisioning]

blemesh_reset            :
blemesh_reset:[Reset the state of the local mesh node]
 Parameter[Null]

blemesh_net_send         :
blemesh_net_send:[Send a network packet]
 Parameter[TTL CTL SRC DST]

blemesh_seg_send         :
blemesh_seg_send:[Send a segmented message]
 Parameter[SRC DST]

blemesh_rpl_clr          :
blemesh_rpl_clr:[Clear replay protection list]
 Parameter[Null]

blemesh_ivu_test         :
blemesh_ivu_test:[Enable or disable iv update test mode]
     [enable, 0:disable, 1:enable]

blemesh_iv_update        :
blemesh_iv_update:[Enable or disable iv update procedure]
     [enable, 0:disable, 1:enable by sending secure network beacons]

blemesh_fault_set        :
blemesh_fault_set:[Set current fault or registered fault values]
     [type, 0:current fault, 1:registered fault]
     [fault, fault array in hex format]

blemesh_lpn_set          :
blemesh_lpn_set:[Enable or disable low power node]
     [enable, 0:disable lpn, 1:enable lpn]

blemesh_input_num        :
blemesh_input_num:[input number in provisionging procedure]
     [Max Size:16 Octets, e.g.112233445566778899AA]

blemesh_input_str        :
blemesh_input_str:[input Alphanumeric in provisionging procedure]
     [Max Size:16 Characters, e.g.123ABC]

ble_init                 :
ble_disable              :
ble_get_device_name      :
ble_set_device_name      :
ble_start_scan           :
ble_stop_scan            :
ble_set_adv_channel      :
ble_start_adv            :
ble_stop_adv             :
ble_read_local_address   :
ble_connect              :
ble_disconnect           :
ble_select_conn          :
ble_unpair               :
ble_conn_update          :
ble_security             :
ble_auth                 :
ble_auth_cancel          :
ble_auth_passkey_confirm :
ble_auth_pairing_confirm :
ble_auth_passkey         :
ble_exchange_mtu         :
ble_discover             :
ble_read                 :
ble_write                :
ble_write_without_rsp    :
ble_subscribe            :
ble_unsubscribe          :
ble_set_data_len         :
ble_conn_info            :
ble_set_tx_pwr           :
blfdt                    : blfdt
blogset                  : blog pri set level
blogdump                 : blog info dump
ota_tcp                  : OTA from TCP server port 3333
ota_dump                 : dump partitions for ota related
bl_sys_time_now          : sys time now
psm_set                  : psm set
psm_unset                : psm unset
psm_get                  : psm get
psm_dump                 : psm dump
psm_erase                : psm dump
psm_test                 : psm test
gpio-func                : gpio-func pinnum 0/1[0:output, 1:input] 0/1[pullup] 0/1[pulldown]
gpio-set                 : gpio-set pinnum 0/1
gpio-get                 : gpio-get pinnum
wdt-init                 : wdt-init ms
wdt-feed                 : wdt-feed
wdt-disable              : wdt-disable
timer-start              : timer-start
looprt                   : looprt based on bloop
looprt_status            : looprt based on bloop
looprt_evt               : looprt notify event
looprt_evt_status        : looprt evt to dump
looprt_schedule1         : looprt schedule evt 20s
looprt_schedule2         : looprt schedule evt 10s
ipc                      : iperf TCP client
ips                      : iperf TCP server
ipu                      : iperf UDP client
ipus                     : iperf UDP server
sntp_start               : sntp start
sntp_time                : sntp time
sntp_date                : sntp date
Через CH430 cli для соединения c AP вводим:
stack_wifi
wifi_sta_connect [I]my_ap_name my_ap_password[/I]
 

pvvx

Активный участник сообщества
Далее для теста TCP запускаем сервер iperf на компе:
iperf.exe -s -w 64k -N -i 5
И в cli модуля стартуем клиента iperf: ipc 192.168.1.2
Получаем:
Код:
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 64.0 KByte
------------------------------------------------------------
[376] local 192.168.1.2 port 5001 connected with 192.168.1.137 port 58053
[ ID] Interval       Transfer     Bandwidth
[376]  0.0- 5.0 sec  2.71 MBytes  4.55 Mbits/sec
[376]  5.0-10.0 sec  2.72 MBytes  4.57 Mbits/sec
[376] 10.0-15.0 sec  2.69 MBytes  4.52 Mbits/sec
[376] 15.0-20.0 sec  2.94 MBytes  4.93 Mbits/sec
[376] 20.0-25.0 sec  2.84 MBytes  4.76 Mbits/sec
[376] 25.0-30.0 sec  2.23 MBytes  3.74 Mbits/sec
[376] 30.0-35.0 sec  2.76 MBytes  4.63 Mbits/sec
[376] 35.0-40.0 sec  2.81 MBytes  4.72 Mbits/sec
[376] 40.0-45.0 sec  2.84 MBytes  4.76 Mbits/sec
[376] 45.0-50.0 sec  2.76 MBytes  4.63 Mbits/sec
[376] 50.0-55.0 sec  2.45 MBytes  4.12 Mbits/sec
[376] 55.0-60.0 sec  2.63 MBytes  4.41 Mbits/sec
[376] 60.0-65.0 sec  2.65 MBytes  4.44 Mbits/sec
...
Или обратное направление TCP (комп - клиент, модуль сервер):
В модуль: ips
В комп: iperf.exe -c 192.168.1.137 -w 64k -N -t 30 -i 5
Итог:
Код:
------------------------------------------------------------
Client connecting to 192.168.1.137, TCP port 5001
TCP window size: 64.0 KByte
------------------------------------------------------------
[312] local 192.168.1.2 port 56729 connected with 192.168.1.137 port 5001
[ ID] Interval       Transfer     Bandwidth
[312]  0.0- 5.0 sec  1.95 MBytes  3.26 Mbits/sec
[312]  5.0-10.0 sec  1.92 MBytes  3.22 Mbits/sec
[312] 10.0-15.0 sec  1.89 MBytes  3.17 Mbits/sec
[312] 15.0-20.0 sec  1.90 MBytes  3.19 Mbits/sec
[312] 20.0-25.0 sec  1.91 MBytes  3.20 Mbits/sec
[312] 25.0-30.0 sec  1.91 MBytes  3.21 Mbits/sec
[312]  0.0-30.2 sec  11.5 MBytes  3.19 Mbits/sec
UDP (комп - клиент, модуль - сервер):
В модуль: ipus
В комп: iperf.exe -u -c 192.168.1.137 -b 50M
Итог:
Код:
[NET] [IPC] [IPUS] Connecting with default address 0.0.0.0
# bind UDP socket successfully!
19.9182(19.9182 19.9182 19.9182) Mbps, out of order: 0.
19.9082(19.9082 19.9132 19.9182) Mbps, out of order: 0.
19.7891(19.7891 19.8718 19.9182) Mbps, out of order: 0.
19.3931(19.3931 19.7521 19.9182) Mbps, out of order: 0.
19.9023(19.3931 19.7821 19.9182) Mbps, out of order: 0.
17.9217(17.9217 19.4718 19.9182) Mbps, out of order: 0.
20.0173(17.9217 19.5497 20.0173) Mbps, out of order: 0.
18.8517(17.9217 19.4625 20.0173) Mbps, out of order: 0.
19.4822(17.9217 19.4647 20.0173) Mbps, out of order: 0.
19.3460(17.9217 19.4528 20.0173) Mbps, out of order: 0.
19.2705(17.9217 19.4362 20.0173) Mbps, out of order: 0.
17.8157(17.8157 19.3000 20.0173) Mbps, out of order: 0.
19.5799(17.8157 19.3215 20.0173) Mbps, out of order: 0.
18.7189(17.8157 19.2783 20.0173) Mbps, out of order: 0.
19.5219(17.8157 19.2946 20.0173) Mbps, out of order: 0.
19.1321(17.8157 19.2843 20.0173) Mbps, out of order: 0.
19.3222(17.8157 19.2866 20.0173) Mbps, out of order: 0.
19.0803(17.8157 19.2751 20.0173) Mbps, out of order: 0.
18.7790(17.8157 19.2490 20.0173) Mbps, out of order: 0.
19.7333(17.8157 19.2732 20.0173) Mbps, out of order: 0.
iperf finish...
receive:16893,out of order:0
[TX] [LOOP] Chain Used 3
ipus exit..
И подобное...
 

pvvx

Активный участник сообщества
BLE и WiFi работают одновременно, в SDK даже тесты по этому делу есть.
SDK имеет низкую скорость в TCP. Очень зажаты настройки LwIP - маленький размер MSS (менее 800 байт) и всего 3 x MSS для TCP_WND. Т.е. над этим надо работать, если требуется скорость в TCP.
В UDP для одно-антенника скорость в норме.
Так-же в SDK не видно никакой нормальной оптимизации (алгоритмов а не возможностей чипа) по потреблению для режимов BLE. Но и у ESP32 их нет.
 

pvvx

Активный участник сообщества
GPIO test в Arduino:
C++:
#include <Arduino.h>
extern "C" {
    #include "bl602.h"
}

#define GPIO_LED 0

// the setup function runs once when you press reset or power the board
void setup() {
  Serial.begin(115200);
  printf("Start Setup\n");
  printf("CLK CPU: %d Hz\n", (int)SystemCoreClockGet());
  printf("Heap: %d bytes\n", (int)xPortGetFreeHeapSize());
  // initialize digital pin GPIO_LED as an output.
  pinMode(GPIO_LED, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  printf("Loop, led hi\n");
  digitalWrite(GPIO_LED, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  printf("Loop, led lo\n");
  digitalWrite(GPIO_LED, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
  int i = 1000;
  while(i--) {
    digitalWrite(GPIO_LED, i&1);
  }
  delay(1000);                       // wait for a second
}
Вывод в UART 'скетча':
Код:
Start Setup
CLK CPU: 160000000 Hz
Heap: 161208 bytes
Loop, led hi
Loop, led lo
...
Потребление чипом при программировании (и время программирования):
1613108287512.png
Потребление чипа при работе (+ время инициализации Arduino):
1613108340595.png
Потребление чипа при работе: 3.9 mA (3.3V)
Потребление чипа при активном 'RESET': 0.1 mA

Скорость digitalWrite():
1613108803828.png
Период: 560 нс -> шаг вывода 280 nc
Частота: 1.785714 МГц -> 3.57 миллиона digitalWrite() в сек.
 

pvvx

Активный участник сообщества
Извиняюсь, но в измерителе слетели настройки масштабирования к шунту и прошлые замеры я слепил не верные!
Вот правильные:
1613122964495.png
1613122969783.png
Т.е. среднее потребление чипа (модуля DT-BL10) от источника 3.3В:
  • При активном 'RESET': 0.39 mA
  • В режиме 'старт программирования' (до соединения с программой программатора): 6.5 mA
  • В режиме 'программирования' (соединение с программой программатора): 26.5+ mA
  • В режиме 'программирования' (после программирования): 24.3 mA
  • При работе 'скетча': 24.24 mA (160 МГц, что включено или выключено дополнительного в чипе в Arduino не известно)
 

blemisc

New member

pvvx

Активный участник сообщества

pvvx

Активный участник сообщества
Хорошего в RV-Debugger-BL702 то, что чип программируется по USB встроенным в ROM загрузчиком и USB разъем припаян.
Но остальное -
BLE работает только если сдуть или выломать конденсатор C17.

Рабочего варианта либ и/или правильного ld скрипта к BL702 для BLE с низким потреблением нет. И пока в lowPower полная неопределенность, по которой данный чип не имеет никакой конкуренции в сфере батарейного питания (CR2032 и т.д.) с другими аналогичными BLE чипами. Минималка необходимого для BLE/Zigbee режима sleep по докам у BL70x - 10 uA, а сама система и прочее ПО пока не адаптирована даже для такого использования. Но и 10uA - это уже много - на рынке толпа более дешевых SoC с лучшими показателями. Это учитывая по выборке наличие в чипе USB, поддержку BLE/MESH/Zigbee и т.д.
Т.е. Bouffalo тормозит. Если так и останется - их текущие чипы не пойдут в массовое серийное производство и будут дороги....
 
Сверху Снизу