[bsp]add bl808 wifi driver (#8294)

This commit is contained in:
flyingcys
2023-11-25 22:54:24 +08:00
committed by GitHub
parent 0396b52db0
commit 50f521b528
13 changed files with 1046 additions and 46 deletions
+1
View File
@@ -201,6 +201,7 @@ Windows下推荐使用[env工具][1],在console下进入bsp/bouffalo_lab/bl61x
| HWTIMER | 支持 | |
| FLASH | 支持 | |
| SDCARD | 支持 | |
| Wi-Fi | 支持 | 仅 BL808 支持 |
+216 -22
View File
File diff suppressed because it is too large Load Diff
@@ -6,14 +6,20 @@
* Change Logs:
* Date Author Notes
* 2022/12/25 flyingcys first version
*/
* 2023/11/23 flyingcys add wifi driver
*/
#include <rtthread.h>
#include <stdio.h>
#include <rtdevice.h>
int main(void)
{
rt_kprintf("Hello, RISC-V!\n");
/* set wifi work mode */
rt_wlan_set_mode(RT_WLAN_DEVICE_STA_NAME, RT_WLAN_STATION);
rt_wlan_set_mode(RT_WLAN_DEVICE_AP_NAME, RT_WLAN_AP);
return 0;
}
+20
View File
@@ -19,3 +19,23 @@ config BSP_USING_TRIPLECORE
config BSP_USING_PSRAM
bool "Enable PSRAM"
default n
config BSP_USING_WIFI
bool "Enable Wi-Fi"
default y
select PKG_USING_WLAN_BL808
select RT_USING_WIFI
select RT_WLAN_PROT_LWIP_PBUF_FORCE
select BSP_USING_PSRAM
select RT_USING_LWIP
config LWIP_SUPPORT_CUSTOM_PBUF
int
default 1
config PBUF_LINK_ENCAPSULATION_HLEN
int
default 128
+9 -1
View File
@@ -6,4 +6,12 @@ CPPPATH = [cwd]
group = DefineGroup('Board', src, depend = [''], CPPPATH = CPPPATH)
Return('group')
objs = [group]
list = os.listdir(cwd)
for item in list:
if os.path.isfile(os.path.join(cwd, item, 'SConscript')):
objs = objs + SConscript(os.path.join(item, 'SConscript'))
Return('objs')
+21 -8
View File
@@ -142,9 +142,25 @@ void rt_hw_board_init(void)
bflb_mtimer_config(CPU_Get_MTimer_Clock() / RT_TICK_PER_SECOND, systick_isr);
#ifdef BSP_USING_PSRAM
if (uhs_psram_init() < 0)
{
rt_kprintf("uhs_psram_init failed!\n");
return;
}
extern uint32_t __psrambss_start__;
extern uint32_t __psrambss_end__;
uint32_t *pDest;
pDest = &__psrambss_start__;
for (; pDest < &__psrambss_end__;) {
*pDest++ = 0ul;
}
#endif
#ifdef RT_USING_HEAP
/* initialize memory system */
rt_kprintf("RT_HW_HEAP_BEGIN:%x RT_HW_HEAP_END:%x size: %d\r\n", RT_HW_HEAP_BEGIN, RT_HW_HEAP_END, RT_HW_HEAP_END - RT_HW_HEAP_BEGIN);
rt_system_heap_init(RT_HW_HEAP_BEGIN, RT_HW_HEAP_END);
#endif
@@ -153,13 +169,6 @@ void rt_hw_board_init(void)
rt_hw_uart_init();
#endif
#ifdef BSP_USING_PSRAM
if (uhs_psram_init() < 0)
{
rt_kprintf("uhs_psram_init failed!\n");
}
#endif
/* Set the shell console output device */
#if defined(RT_USING_CONSOLE) && defined(RT_USING_DEVICE)
rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
@@ -189,6 +198,10 @@ void rt_hw_board_init(void)
BL_WR_WORD(IPC_SYNC_ADDR2, IPC_SYNC_FLAG);
L1C_DCache_Clean_By_Addr(IPC_SYNC_ADDR1, 8);
#endif
#ifdef RT_USING_HEAP
rt_kprintf("RT_HW_HEAP_BEGIN:%x RT_HW_HEAP_END:%x size: %d\r\n", RT_HW_HEAP_BEGIN, RT_HW_HEAP_END, RT_HW_HEAP_END - RT_HW_HEAP_BEGIN);
#endif
}
void rt_hw_cpu_reset(void)
@@ -26,9 +26,12 @@ MEMORY
xip_memory (rx) : ORIGIN = 0x58000000, LENGTH = 32M
itcm_memory (rx) : ORIGIN = 0x62020000, LENGTH = 20K
dtcm_memory (rx) : ORIGIN = 0x62025000, LENGTH = 4K
nocache_ram_memory (!rx) : ORIGIN = 0x22026000, LENGTH = 40K
ram_memory (!rx) : ORIGIN = 0x62030000, LENGTH = 160K + 64K - 20K - 4K - 40K
nocache_ram_memory (!rx) : ORIGIN = 0x22026000, LENGTH = 0K
ram_memory (!rx) : ORIGIN = 0x22026000, LENGTH = 40K
ram_wifi (!rx) : ORIGIN = 0x22030000, LENGTH = 96K
ram_dram (wxa) : ORIGIN = 0x3EF80000, LENGTH = 512K
xram_memory (!rx) : ORIGIN = 0x40000000, LENGTH = 16K
ram_psram (!rx) : ORIGIN = 0x50000000, LENGTH = 1M
}
SECTIONS
@@ -97,6 +100,12 @@ SECTIONS
*(.srodata)
*(.srodata.*)
/* static fw attribute entry */
. = ALIGN(4);
_bl_static_fw_cfg_entry_start = .;
KEEP(*(.wifi.cfg.entry))
_bl_static_fw_cfg_entry_end = .;
. = ALIGN(4);
__text_code_end__ = .;
} > xip_memory
@@ -209,19 +218,74 @@ SECTIONS
__etext_final = (__ram_load_addr + SIZEOF (RAM_DATA));
ASSERT(__etext_final <= ORIGIN(xip_memory) + LENGTH(xip_memory), "code memory overflow")
.wifibss (NOLOAD) :
{
PROVIDE( __wifi_bss_start = ADDR(.wifibss) );
PROVIDE( __wifi_bss_end = ADDR(.wifibss) + SIZEOF(.wifibss) );
*ipc_shared.o(COMMON)
*sdu_shared.o(COMMON)
*hal_desc.o(COMMON)
*txl_buffer_shared.o(COMMON)
*txl_frame_shared.o(COMMON)
*scan_shared.o(COMMON)
*scanu_shared.o(COMMON)
*mfp_bip.o(COMMON)
*me_mic.o(COMMON)
*bl_sta_mgmt_others.o(COMMON)
*bl_pmk_mgmt.o(COMMON)
*bl_pmk_mgmt_internal.o(COMMON)
*libwifi_drv.a:bl_utils.o(COMMON)
*libwifi_drv.a:bl_utils.o(.bss*)
*(.wifi_ram*)
. = ALIGN(16);
} > ram_wifi
.bss (NOLOAD) :
{
. = ALIGN(4);
__bss_start__ = .;
*(.bss*)
*interrupt*.o*(.bss*)
*riscv_fpu*.o*(.bss*)
*start*.o*(.bss*)
*system_bl808*.o*(.bss*)
*vector*.o*(.bss*)
*bl808_*.o*(.bss*)
*bflb_*.o*(.bss*)
*(.sbss*)
*(COMMON)
. = ALIGN(4);
__bss_end__ = .;
} > ram_memory
.drambss (NOLOAD) :
{
. = ALIGN(4);
__drambss_start__ = .;
. = ALIGN(4);
__drambss_end__ = .;
} > ram_dram
.psrambss (NOLOAD) :
{
. = ALIGN(4);
__psrambss_start__ = .;
*(EXCLUDE_FILE( *interrupt*.o* \
*riscv_fpu*.o* \
*start*.o* \
*system_bl808*.o* \
*vector*.o* \
*bl808_*.o* \
*bflb_*.o* ) .bss*)
*(COMMON)
. = ALIGN(4);
__psrambss_end__ = .;
} > ram_psram
.noinit_data (NOLOAD) :
{
. = ALIGN(4);
@@ -256,10 +320,15 @@ SECTIONS
. = ALIGN(4);
__HeapLimit = .;
} > ram_memory
} > ram_psram
__HeapLimit = ORIGIN(ram_memory) + LENGTH(ram_memory);
__HeapLimit = ORIGIN(ram_psram) + LENGTH(ram_psram);
ASSERT(__HeapLimit - __HeapBase >= HeapMinSize, "heap region overflow")
PROVIDE( _ld_ram_size2 = LENGTH(ram_wifi) );
PROVIDE( _ld_ram_addr2 = ORIGIN(ram_wifi) );
PROVIDE( _ld_bl_static_cfg_entry_start = _bl_static_fw_cfg_entry_start );
PROVIDE( _ld_bl_static_cfg_entry_end = _bl_static_fw_cfg_entry_end );
}
+8
View File
@@ -0,0 +1,8 @@
from building import *
cwd = GetCurrentDir()
src = Glob('*.c') + Glob('*.cpp')
CPPPATH = [cwd]
group = DefineGroup('drv_wifi', src, depend = [''], CPPPATH = CPPPATH)
Return('group')
File diff suppressed because it is too large Load Diff
+16
View File
@@ -0,0 +1,16 @@
/*
* Copyright (c) 2006-2023, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2023/11/23 flyingcys first version
*/
#ifndef __DRV_WIFI_H__
#define __DRV_WIFI_H__
#include "bl808_wifi.h"
#endif /* __DRV_WIFI_H__ */
File diff suppressed because it is too large Load Diff
@@ -88,5 +88,11 @@ void start_load(void)
*pDest++ = 0ul;
}
extern uint32_t __wifi_bss_start;
extern uint32_t __wifi_bss_end;
pDest = &__wifi_bss_start;
for ( ; pDest < &__wifi_bss_end ; ) {
*pDest++ = 0ul;
}
#endif
}
@@ -119,6 +119,15 @@ void System_Post_Init(void)
/* make D0 all ram avalable for mcu usage */
GLB_Set_DSP_L2SRAM_Available_Size(3, 1, 1, 1);
extern uint32_t __drambss_start__;
extern uint32_t __drambss_end__;
uint32_t *pDest;
pDest = &__drambss_start__;
for (; pDest < &__drambss_end__;) {
*pDest++ = 0ul;
}
/* global IRQ enable */
__enable_irq();
}