【跃昉科技BF2开发板试用体验】三、lf686_demo_wifi例程及其代码分析

描述

本文来源电子发烧友社区,作者:赵杰, 帖子地址:https://bbs.elecfans.com/jishu_2293164_1_1.html


拿到跃昉科技BF2开发板有段时间,前面测试了一个demo后停了一段时间,虽然跃昉的技术支持很到位,但是整体感觉这款开发板应用过程中有很多的限制,因此也耽搁下来了。

当初申请这块板子的时候也是想测试WiFi的,但是尝试了几次感觉其使用方面不太方便,尤其是代码编写方面,感觉很复杂,因此先完成其WiFi的Demo测试,即Customer_App下的lf686_demo_wifi例程。
一、代码编译及下载
使用VSCode查看代码,并用MSYS2编译的,由于没改什么核心代码,编译也比较简单。
1、在msys2中进入到lf686_demo_wifi目录后,输入./genromap进行编译
开发板试用

正常情况下,直接完成编译
开发板试用

生成后的文件在该目录的build_out目录下。
2、在tools目录下的flash_tools中打开LFFlashEnv进行烧写
选择前面build_out目录下的Bin文件
开发板试用

烧写时需要把IO8拉到HI,然后复位后下载
开发板试用

三、运行结果
打开串口sscom,设置波特率2000000,就能获得启动过程中的信息,也是cli输入命令的窗口
开发板试用

启动信息部分之后,是系统初始化信息,即system_init信息
开发板试用

然后是lf_flash的分区信息
开发板试用

hal_board信息
开发板试用

后面是核心任务信息
开发板试用

后面是当前任务列表和启动环境信息
开发板试用
开发板试用

后面是usart初始化和wifi初始化相关信息
开发板试用
开发板试用

在串口sscom中输入help,可得到相关的支持命令


  1. ====Support 4 cmds once, seperate by ; ====
  2. help                     : print this
  3. p                        : print memory
  4. m                        : modify memory
  5. echo                     : echo for command
  6. exit                     : close CLI
  7. devname                  : print device name
  8. sysver                   : system version
  9. reboot                   : reboot system
  10. poweroff                 : poweroff system
  11. reset                    : system reset
  12. time                     : system time
  13. ota                      : system ota
  14. ps                       : thread dump
  15. ls                       : file list
  16. hexdump                  : dump file
  17. cat                      : cat file
  18.  
  19. ====User Commands====
  20. aws                      : aws iot demo
  21. pka                      : pka iot demo
  22. wifi                     : wifi
  23. sha                      : sha iot demo
  24. trng                     : trng test
  25. aes                      : trng test
  26. cks                      : cks test
  27. dma                      : dma test
  28. exception_load           : exception load test
  29. exception_l_illegal      : exception load test
  30. exception_store          : exception store test
  31. exception_inst_illegal   : exception illegal instruction
  32. stack_wifi               : Wi-Fi Stack
  33. http                     : http client download test based on socket
  34. httpc                    : http client download test based on RAW TCP
  35. coex_dump                : coex dump
  36. rf_dump                  : rf dump
  37. wifi_ap_bcnint_set       : wifi ap bcnin set
  38. wifi_capcode             : wifi capcode
  39. wifi_scan                : wifi scan
  40. wifi_scan_filter         : wifi scan
  41. wifi_mon                 : wifi monitor
  42. wifi_raw_send            : wifi raw send test
  43. wifi_sta_info            : wifi sta info
  44. wifi_sta_ip_set          : wifi STA IP config [ip] [mask] [gw] [dns1] [dns2]
  45. wifi_sta_ip_unset        : wifi STA IP config unset
  46. wifi_sta_disconnect      : wifi station disconnect
  47. wifi_sta_connect         : wifi station connect
  48. wifi_sta_get_state       : wifi sta get state
  49. wifi_sta_autoconnect_enable: wifi station enable auto reconnect
  50. wifi_sta_autoconnect_disable: wifi station disable auto reconnect
  51. rc_fix_en                : wifi rate control fixed rate enable
  52. rc_fix_dis               : wifi rate control fixed rate diable
  53. wifi_sta_ps_on           : wifi power saving mode ON
  54. wifi_sta_ps_off          : wifi power saving mode OFF
  55. wifi_sta_denoise_enable  : wifi denoise
  56. wifi_sta_denoise_disable : wifi denoise
  57. wifi_sniffer_on          : wifi sniffer mode on
  58. wifi_sniffer_off         : wifi sniffer mode off
  59. wifi_ap_start            : start Ap mode
  60. wifi_ap_stop             : stop Ap mode
  61. wifi_ap_conf_max_sta     : config Ap max sta
  62. wifi_dump                : dump fw statistic
  63. wifi_cfg                 : wifi cfg cmd
  64. wifi_mib                 : dump mib statistic
  65. wifi_pkt                 : wifi dump needed
  66. wifi_coex_rf_force_on    : wifi coex RF forece on
  67. wifi_coex_rf_force_off   : wifi coex RF forece off
  68. wifi_coex_pti_force_on   : wifi coex PTI forece on
  69. wifi_coex_pti_force_off  : wifi coex PTI forece off
  70. wifi_coex_pta_force_on   : wifi coex PTA forece on
  71. wifi_coex_pta_force_off  : wifi coex PTA forece off
  72. wifi_sta_list            : get sta list in AP mode
  73. wifi_sta_del             : delete one sta in AP mode
  74. wifi_edca_dump           : dump EDCA data
  75. wifi_state               : get wifi_state
  76. wifi_update_power        : Power table test command
  77. looprt                   : looprt based on bloop
  78. looprt_status            : looprt based on bloop
  79. looprt_evt               : looprt notify event
  80. looprt_evt_status        : looprt evt to dump
  81. looprt_schedule1         : looprt schedule evt 20s
  82. looprt_schedule2         : looprt schedule evt 10s
  83. tcpc                     : create a tcpc for in a new task
  84. tcps                     : create a tcp server for in a new task
  85. ipc                      : iperf TCP client
  86. ips                      : iperf TCP server
  87. ipu                      : iperf UDP client
  88. ipus                     : iperf UDP server
  89. netstat                  : show current net states
  90. ping                     : ping [-c count] [-i interval] [-W timeout] [-s size] [-h help] destination
  91.                 -c count of ping requests. default is infinite
  92.                 -i interval in ms. default is 1000
  93.                 -W timeout in ms. default is 5000
  94.                 -s ICMP payload size in bsntp_start               : sntp start
  95. sntp_time                : sntp time
  96. sntp_date                : sntp date
  97. blfdt                    : blfdt
  98. blogset                  : blog pri set level
  99. blogdump                 : blog info dump
  100. ota_tcp                  : OTA from TCP server port 3333
  101. ota_dump                 : dump partitions for ota related
  102. lf_sys_time_now          : sys time now
  103. psm_set                  : psm set
  104. psm_unset                : psm unset
  105. psm_get                  : psm get
  106. psm_dump                 : psm dump
  107. psm_erase                : psm dump
  108. psm_test                 : psm test
  109. gpio-func                : gpio-func pinnum 0/1[0:output, 1:input] 0/1[pullup] 0/1[pulldown]
  110. gpio-set                 : gpio-set pinnum 0/1
  111. gpio-get                 : gpio-get pinnum
  112. wdt-init                 : wdt-init ms
  113. wdt-feed                 : wdt-feed
  114. wdt-disable              : wdt-disable
  115. timer-start              : timer-start
复制代码

通过串口输入相关命令,连接WiFi
wifi_sta_connect TP-LINK_6BE8 177381309xx


  1. ----- BUG FIXME? NOT do STA enable again
  2. [WF] MM_ADD_IF_REQ Sending: STA
  3. 歵d_start idx=0
  4. [WF] MM_ADD_IF_REQ Done
  5. [WF] vif_index from LAMC is 0
  6. [WF][SM] Entering idle state
  7. [WF][SM] Action Connect
  8.            ssid TP-LINK_6BE8
  9.            ssid len 12
  10.            psk 17738130986
  11.            psk len 11
  12.            pmk
  13.            pmk len 0
  14.            channel band 0
  15.            channel freq 0
  16.            mac 00:00:00:00:00:00
  17.            dhcp status: true
  18. [WF][SM] State Action ###idle### --->>> ###connecting###
  19. connecting using vif_idx 0
  20. ===start sm_get_bss_params===
  21. bssid[0] = 0xffff
  22. bssid[1] = 0xffff
  23. bssid[2] = 0xffff
  24. search ssid = TP-LINK_6BE8
  25. result ssid index = -1
  26. ===end sm_get_bss_params===
  27. [WF][SM] Entering connecting state
  28.  
  29. # [APP] [EVT] Connecting 880885
  30. ===start sm_get_bss_params===
  31. bssid[0] = 0xffff
  32. bssid[1] = 0xffff
  33. bssid[2] = 0xffff
  34. search ssid = TP-LINK_6BE8
  35. result ssid index = 0
  36. ===end sm_get_bss_params===
  37. wpa2/wpa3 pairwise ccmp:1,tkip:0,wep104:0,wep:40:0
  38. wpa2/wpa3 group ccmp:1,tkip:0,wep104:0,wep:40:0
  39. wpa2/wpa3 is_pmf_required:0
  40. AP Security mode: wep:0,wpa:1,wpa2:1,wpa3:0
  41. ------ 247 set default key 0x42018c08, key ptr 0x00000000
  42. [APP] [EVT] SCAN On Join 884653
  43. [    890129][[32mINFO  [0m: lf_adc.c: 260] offset = 2158
  44. proc_hellow_entry: RISC-V rv32imafc
  45. 4-way handshake timeout failure, wlan 802.11 reason code = 15,                try to transmit deauth frame
  46. ind ix 0x4202303c, chan_ctxt is 0x420183f4
  47. connect failure, ssid = TP-LINK_6BE8, index = 0
  48. from sm_connect_ind to scanu_rm_exist_ssid
  49. [RX] Connection Status
  50. [RX]   status_code 8
  51. [RX]   connect result: Passwd error, 4-way handshake timeout
  52. [RX]   MAC 74:05:A5:C3:6B:E8
  53. [RX]   vif_idx 0
  54. [RX]   ap_idx 0
  55. [RX]   ch_idx 0
  56. [RX]   qos 1
  57. [RX]   acm 0
  58. [RX]   assoc_req_ie_len 89
  59. [RX]   assoc_rsp_ie_len 196
  60. [RX]   aid 0
  61. [RX]   band 0
  62. [RX]   center_freq 2462
  63. [RX]   width 0
  64. [RX]   center_freq1 2462
  65. [RX]   center_freq2 0
  66. [WF][SM] Exiting connecting state
  67. [WF][SM] State Action ###connecting### --->>> ###disconnect###
  68. [WF][SM] Entering disconnect state
  69. [WF][SM] Will retry in 2000 ticks
  70. [APP] [EVT] disconnect 894737, Reason: Passwd error, 4-way handshake timeout
  71. [WF][PF] Using profile, idx is @0
  72. [WF][SM] Retry Again --->>> retry connect
  73. [WF][SM] Exiting disconnect state
  74. Delete Timer.
  75. [WF][SM] State Action ###disconnect### --->>> ###connecting###
  76. [WF][SM]  Action Connect
  77.            ssid TP-LINK_6BE8
  78.            ssid len 12
  79.            psk 17738130986
  80.            psk len 11
  81.            pmk
  82.            pmk len 0
  83.            mac 00:00:00:00:00:00
  84. connecting using vif_idx 0
  85. ===start sm_get_bss_params===
  86. bssid[0] = 0xffff
  87. bssid[1] = 0xffff
  88. bssid[2] = 0xffff
  89. search ssid = TP-LINK_6BE8
  90. result ssid index = -1
  91. ===end sm_get_bss_params===
  92. [WF][SM] Entering connecting state
  93. [APP] [EVT] Reconnect 896740
  94. [APP] [EVT] Connecting 896740
  95. ===start sm_get_bss_params===
  96. bssid[0] = 0xffff
  97. bssid[1] = 0xffff
  98. bssid[2] = 0xffff
  99. search ssid = TP-LINK_6BE8
  100. result ssid index = 0
  101. ===end sm_get_bss_params===
  102. wpa2/wpa3 pairwise ccmp:1,tkip:0,wep104:0,wep:40:0
  103. wpa2/wpa3 group ccmp:1,tkip:0,wep104:0,wep:40:0
  104. wpa2/wpa3 is_pmf_required:0
  105. AP Security mode: wep:0,wpa:1,wpa2:1,wpa3:0
  106. ------ 247 set default key 0x42018d40, key ptr 0x00000000
  107. [APP] [EVT] SCAN On Join 900510
  108. proc_hellow_entry: RISC-V rv32imafc
  109. set key:sta_idx:1, inst_nbr:0, key_idx:0,cipher_suite:2,key_len:16
  110. set key:sta_idx:255, inst_nbr:0, key_idx:1,cipher_suite:2,key_len:16
  111. ind ix 0x42022e34, chan_ctxt is 0x42018410
  112. [RX] Connection Status
  113. [RX]   status_code 0
  114. [RX]   connect result: sm connect ind ok
  115. [RX]   MAC 74:05:A5:C3:6B:E8
  116. [RX]   vif_idx 0
  117. [RX]   ap_idx 1
  118. [RX]   ch_idx 0
  119. [RX]   qos 1
  120. [RX]   acm 0
  121. [RX]   assoc_req_ie_len 89
  122. [RX]   assoc_rsp_ie_len 196
  123. [RX]   aid 0
  124. [RX]   band 0
  125. [RX]   center_freq 2462
  126. [RX]   width 0
  127. [RX]   center_freq1 2462
  128. [RX]   center_freq2 0
  129. [WF][SM] Exiting connecting state
  130. [WF][SM] State Action ###connecting### --->>> ###wifiConnected_ipObtaining###
  131. [WF][SM] Entering wifiConnected_ipObtaining state
  132. [WF][SM] DHCP Starting...0x42019e24
  133. [APP] [EVT] connected 900828
  134. -----------------> AABA Request:
  135.     A-MSDU: Not Permitted
  136.     Block Ack Policy: Immediate Block Ack
  137.     TID: 0
  138.     Number of Buffers: 64
  139. -----------------> AABA Response:
  140.     A-MSDU: Not Permitted
  141.     Block Ack Policy: Immediate Block Ack
  142.     TID: 0
  143.     Number of Buffers: 8
  144. [lwip] netif status callback
  145.   IP: 192.168.1.105
  146.   MK: 255.255.255.0
  147.   GW: 192.168.1.1
  148. [WF][SM] Exiting wifiConnected_ipObtaining state
  149. [WF][SM] IP GOT IP:192.168.1.105, MASK: 255.255.255.0, Gateway: 192.168.1.1, dns1: 172.16.16.16, dns2: 172.16.16.17
  150. [WF][SM] State Action ###wifiConnected_ipObtaining### --->>> ###wifiConnected_IPOK###
  151. [WF][SM] Entering wifiConnected_IPOK state
  152. [APP] [EVT] GOT IP 903003
  153. [SYS] Memory left is 133512 Bytes
复制代码

可以看到比较完整的WiFi连接信息,及其结果,IP地址详细信息
成功连接WiFi后,可以用ping命令测试是否联网成功


  1. ping -c20 www.baidu.com
  2.  
  3. # 60 bytes from 182.61.200.7: icmp_seq=1 ttl=47 time=38 ms
  4. 60 bytes from 182.61.200.7: icmp_seq=2 ttl=47 time=34 ms
  5. proc_hellow_entry: RISC-V rv32imafc
  6. 60 bytes from 182.61.200.7: icmp_seq=3 ttl=47 time=37 ms
  7. 60 bytes from 182.61.200.7: icmp_seq=5 ttl=47 time=36 ms
  8. 60 bytes from 182.61.200.7: icmp_seq=6 ttl=47 time=37 ms
  9. 60 bytes from 182.61.200.7: icmp_seq=7 ttl=47 time=38 ms
  10. 60 bytes from 182.61.200.7: icmp_seq=8 ttl=47 time=35 ms
  11. The sequence number 4 timed out
  12. 60 bytes from 182.61.200.7: icmp_seq=9 ttl=47 time=39 ms
  13. 60 bytes from 182.61.200.7: icmp_seq=10 ttl=47 time=42 ms
  14. 60 bytes from 182.61.200.7: icmp_seq=11 ttl=47 time=36 ms
  15. 60 bytes from 182.61.200.7: icmp_seq=12 ttl=47 time=34 ms
  16. proc_hellow_entry: RISC-V rv32imafc
  17. 60 bytes from 182.61.200.7: icmp_seq=13 ttl=47 time=36 ms
  18. 60 bytes from 182.61.200.7: icmp_seq=14 ttl=47 time=39 ms
  19. 60 bytes from 182.61.200.7: icmp_seq=15 ttl=47 time=39 ms
  20. 60 bytes from 182.61.200.7: icmp_seq=16 ttl=47 time=39 ms
  21. 60 bytes from 182.61.200.7: icmp_seq=17 ttl=47 time=40 ms
  22. 60 bytes from 182.61.200.7: icmp_seq=18 ttl=47 time=39 ms
  23. 60 bytes from 182.61.200.7: icmp_seq=19 ttl=47 time=34 ms
  24. 60 bytes from 182.61.200.7: icmp_seq=20 ttl=47 time=41 ms
复制代码

有个别丢包现象,应该是WiFi信号不够好
demo例程中提供了一个http下载的功能


  1. static int client_demo(char *hostname)
  2. {
  3.     int sockfd;
  4.     /* Get host address from the input name */
  5.     struct hostent *hostinfo = gethostbyname(hostname);
  6.     uint8_t *recv_buffer;
  7.  
  8.     if (!hostinfo) {
  9.         printf("gethostbyname Failedrn");
  10.         return -1;
  11.     }
  12.  
  13.     struct sockaddr_in dest;
  14.  
  15.     char buffer[MAXBUF];
  16.     /* Create a socket */
  17.     /*---Open socket for streaming---*/
  18.     if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
  19.         printf("Error in socketrn");
  20.         return -1;
  21.     }
  22.  
  23.     /*---Initialize server address/port struct---*/
  24.     memset(&dest, 0, sizeof(dest));
  25.     dest.sin_family = AF_INET;
  26.     dest.sin_port = htons(PORT);
  27.     dest.sin_addr = *((struct in_addr *) hostinfo->h_addr);
  28. //    char ip[16];
  29.     uint32_t address = dest.sin_addr.s_addr;
  30.     char *ip = inet_ntoa(address);
  31.  
  32.     printf("Server ip Address : %srn", ip);
  33.     /*---Connect to server---*/
  34.     if (connect(sockfd,
  35.              (struct sockaddr *)&dest,
  36.              sizeof(dest)) != 0) {
  37.         printf("Error in connectrn");
  38.         return -1;
  39.     }
  40.     /*---Get "Hello?"---*/
  41.     memset(buffer, 0, MAXBUF);
  42.     char wbuf[]
  43.         = "GET /ddm/ContentResource/music/204.mp3 HTTP/1.1rnHost: nf.cr.dandanman.comrnUser-Agent: wmsdkrnAccept: */*rnrn";
  44.     write(sockfd, wbuf, sizeof(wbuf) - 1);
  45.  
  46.     int ret = 0;
  47.     int total = 0;
  48.     int debug_counter = 0;
  49.     uint32_t ticks_start, ticks_end, time_consumed;
  50.  
  51.     ticks_start = xTaskGetTickCount();
  52.     recv_buffer = pvPortMalloc(BUFFER_SIZE);
  53.     if (NULL == recv_buffer) {
  54.         goto out;
  55.     }
  56.     while (1) {
  57.         ret = read(sockfd, recv_buffer, BUFFER_SIZE);
  58.         if (ret == 0) {
  59.             printf("eofnr");
  60.             break;
  61.         } else if (ret < 0) {
  62.             printf("ret = %d, err = %dnr", ret, errno);
  63.             break;
  64.         } else {
  65.             total += ret;
  66.             /*use less debug*/
  67.             if (0 == ((debug_counter++) & 0xFF)) {
  68.                 printf("total = %d, ret = %dnr", total, ret);
  69.             }
  70.             //vTaskDelay(2);
  71.             if (total > 82050000) {
  72.                 ticks_end = xTaskGetTickCount();
  73.                 time_consumed = ((uint32_t)(((int32_t)ticks_end) - ((int32_t)ticks_start))) / 1000;
  74.                 printf("Download comlete, total time %u s, speed %u Kbpsrn",
  75.                         (unsigned int)time_consumed,
  76.                         (unsigned int)(total / time_consumed * 8 / 1000)
  77.                 );
  78.                 break;
  79.             }
  80.         }
  81.     }
  82.  
  83.     vPortFree(recv_buffer);
  84. out:
  85.     close(sockfd);
  86.     return 0;
  87. }
  88.  
复制代码

对应的命令是http,可以看到其下载的过程


  1. http
  2. Server ip Address : 60.255.154.100
  3. total = 688, ret = 688
  4. proc_hellow_entry: RISC-V rv32imafc
  5. total = 234608, ret = 688
  6. total = 468528, ret = 688
  7. proc_hellow_entry: RISC-V rv32imafc
  8. total = 695568, ret = 1376
  9. total = 920544, ret = 688
  10. proc_hellow_entry: RISC-V rv32imafc
  11. total = 1157216, ret = 688
  12. total = 1490896, ret = 1376
  13. proc_hellow_entry: RISC-V rv32imafc
  14. total = 1885808, ret = 2064
  15. proc_hellow_entry: RISC-V rv32imafc
  16. proc_hellow_entry: RISC-V rv32imafc
  17. proc_hellow_entry: RISC-V rv32imafc
  18. proc_hellow_entry: RISC-V rv32imafc
  19. eof
复制代码

total的值,应该就是下载的字节数值。
三、心得体会
BF2的开发板提供了很多的demo,还是比较丰富的,只是其代码风格和公司的规定,可能有些特殊,感觉使用起来束缚感比较重,代码方面也感觉不够简单易用,想开发符合自己要求的应用,感觉难度不小,相对其他厂家的同类产品,如ESP32等,易用性以及性价比方面感觉存在不小的差距。最后,还是感觉跃昉科技和发烧友提供的评测机会!

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分