RTL8710 环境搭建 编译
参考文章:
https://polyfractal.com/post/rustl8710/?from=timeline&isappinstalled=0
首先嫖一个模块
我这里用串口一直没办法下载,资料太少,说是TX脚拉高上电后可以用工具下,可惜一直没成功过
在卖模块的地方嫖一个SDK,里面有工具链,需要改一下makefile 将工具指定一下
G:\xuanzihao\RTL8710\sdk-ameba-rtl8710af-v3.5a_without_NDA_GCC_V1.0.0\project\realtek_ameba1_va0_example\GCC-RELEASE

MakeFile 不改,这里会判断当前有没有一个 gcc 则建一个文件夹什么鬼的,注意这里可以自己建一个空的就行,后面不会用到,先让它能过去

gcc地址:RTL8710\sdk-ameba-rtl8710af-v3.5a_without_NDA_GCC_V1.0.0\tools\arm-none-eabi-gcc
然后RTL8710\sdk-ameba-rtl8710af-v3.5a_without_NDA_GCC_V1.0.0\project\realtek_ameba1_va0_example\GCC-RELEASE\application.mk
直接指定一下工具链,我这里将gcc-arm-noxxxxxx 放到 /opt 去了

之后设置下环境变量,就可以直接make了,注意这里可能会有一个找不到 ncurses5 错误,安装一个包
sudo apt-get install lib32ncurses5

然后可以用J-LINK的SWD下载了
接线如下:

注意!!!!串口TX 要加下拉,否则常常看不到log,恶心死
然后,参考文章,安装linux下的jlink
多开一个终端,输入命令
/opt/SEGGER/JLink/JLinkGDBServer -device cortex-m3 -if swd 先连接上芯片
然后另外编译那个终端 make flash
搞定
程序上,入口在
RTL8710\sdk-ameba-rtl8710af-v3.5a_without_NDA_GCC_V1.0.0\project\realtek_ameba1_va0_example\src\main.c
注意这里不能使用printf 必须使用DiagPrintf 否则没有打印信息
程序默认会打开AT server 我关掉了,直接做一个简单的连接sta的demo
感觉代码的开放程度比较高,不同于8266封装比较好
撸各个流程,参考一下AT命令吧。(atcmd_lwip.c)
main.c
1 #include "FreeRTOS.h" 2 #include "task.h" 3 #include "diag.h" 4 #include "main.h" 5 #include <example_entry.h> 6 7 extern void console_init(void); 8 9 10 /** 11 * @brief Main program. 12 * @param None 13 * @retval None 14 */ 15 void main(void) 16 { 17 /* Initialize log uart and at command service */ 18 console_init(); 19 20 /* pre-processor of application example */ 21 pre_example_entry(); 22 23 /* wlan intialization */ 24 #if defined(CONFIG_WIFI_NORMAL) && defined(CONFIG_NETWORK) 25 DiagPrintf("\r\n main wlan \r\n"); 26 wlan_network(); 27 #endif 28 29 /* Execute application example */ 30 //example_entry(); //这里就是AT的server 屏掉了,暂时不用 31 32 /*Enable Schedule, Start Kernel*/ 33 #if defined(CONFIG_KERNEL) && !TASK_SCHEDULER_DISABLED 34 #ifdef PLATFORM_FREERTOS 35 vTaskStartScheduler(); 36 #endif 37 #else 38 RtlConsolTaskRom(NULL); 39 #endif 40 41 42 }
example_entry.c
1 /****************************************************************************** 2 * 3 * Copyright(c) 2007 - 2015 Realtek Corporation. All rights reserved. 4 * 5 * 6 ******************************************************************************/ 7 #include <platform_opts.h> 8 #include "main.h" 9 #include "example_entry.h" 10 #include "FreeRTOS.h" 11 #include "task.h" 12 #include <lwip_netconf.h> 13 #include "tcpip.h" 14 #include <dhcp/dhcps.h> 15 16 17 18 19 /* 20 Preprocessor of example 21 */ 22 23 #define SSID "xuanzihao" 24 #define PASSWORD "haozixuan" 25 static unsigned char password[65] = {0}; 26 27 28 static rtw_network_info_t wifi = { 29 {0}, // ssid 30 {0}, // bssid 31 0, // security 32 NULL, // password 33 0, // password len 34 -1 // key id 35 }; 36 37 38 static void init_wifi_struct(void) 39 { 40 memset(wifi.ssid.val, 0, sizeof(wifi.ssid.val)); 41 memset(wifi.bssid.octet, 0, 6); 42 memset(password, 0, sizeof(password)); 43 wifi.ssid.len = 0; 44 wifi.password = NULL; 45 wifi.password_len = 0; 46 wifi.key_id = -1; 47 } 48 49 static void pre_example_thread(void *param) 50 { 51 int ret; 52 53 vTaskDelay(1000); 54 55 wifi_off(); 56 vTaskDelay(20); 57 58 if ((ret = wifi_on(RTW_MODE_STA)) < 0){ 59 DiagPrintf("\n\rERROR: Wifi on failed!"); 60 ret = RTW_ERROR; 61 } 62 DiagPrintf("\r\n Wifi on OK!\r\n "); 63 64 vTaskDelay(200); 65 66 init_wifi_struct(); 67 68 wifi.security_type = RTW_SECURITY_WPA2_AES_PSK; 69 70 71 strcpy((char *)wifi.ssid.val, (char*)SSID); 72 wifi.ssid.len = strlen((char*)SSID); 73 74 strcpy((char *)password, (char*)PASSWORD); 75 wifi.password=password; 76 wifi.password_len=strlen((char*)PASSWORD); 77 78 DiagPrintf("\r\n Joining BSS by SSID %s...%s...\r\n ", (char*)wifi.ssid.val,wifi.password); 79 80 81 ret = wifi_connect((char*)wifi.ssid.val, wifi.security_type, (char*)wifi.password, wifi.ssid.len, 82 wifi.password_len, wifi.key_id, NULL); 83 DiagPrintf("\r\n wifi_connect=%d \r\n",ret); 84 if(ret==RTW_SUCCESS) 85 { 86 DiagPrintf("\r\n LwIP_DHCP(0, DHCP_START) \r\n"); 87 LwIP_DHCP(0, DHCP_START); 88 } 89 90 while(1) 91 { 92 vTaskDelay(100); 93 } 94 95 96 } 97 98 99 void pre_example_entry(void) 100 { 101 // 102 DiagPrintf("\r\n pre_example_entry \r\n"); 103 104 105 if(xTaskCreate(pre_example_thread, ((const char*)"pre_example_thread"), 1024, NULL, tskIDLE_PRIORITY+1 , NULL) != pdPASS) 106 DiagPrintf("\n\r%s xTaskCreate(uart_atcmd_thread) failed", __FUNCTION__); 107 return 0; 108 109 } 110 111 /* 112 All of the examples are disabled by default for code size consideration 113 The configuration is enabled in platform_opts.h 114 */ 115 void example_entry(void) 116 { 117 #if CONFIG_EXAMPLE_UART_ATCMD 118 example_uart_atcmd(); 119 #endif 120 }

浙公网安备 33010602011771号