From ce46974340dee52afe4c135e8885dc5ae804faf7 Mon Sep 17 00:00:00 2001 From: jzlv Date: Wed, 21 Dec 2022 20:07:42 +0800 Subject: [PATCH] [update][board] update board init * 702/616/808 dvp gpio init * 702 psram init * 602 uart1 init --- bsp/board/bl602dk/board.c | 8 +- bsp/board/bl616dk/board.c | 19 ++--- bsp/board/bl616dk/board.h | 3 +- bsp/board/bl702dk/CMakeLists.txt | 6 +- bsp/board/bl702dk/board.c | 140 +++++++++++++++++++++++++++++++ bsp/board/bl702dk/board.h | 1 + bsp/board/bl808dk/board.c | 36 +++++++- bsp/board/bl808dk/board.h | 5 +- 8 files changed, 196 insertions(+), 22 deletions(-) diff --git a/bsp/board/bl602dk/board.c b/bsp/board/bl602dk/board.c index ce07c9ad..ba428d54 100644 --- a/bsp/board/bl602dk/board.c +++ b/bsp/board/bl602dk/board.c @@ -162,11 +162,11 @@ void board_init(void) void board_uartx_gpio_init() { - // struct bflb_device_s *gpio; + struct bflb_device_s *gpio; - // gpio = bflb_device_get_by_name("gpio"); - // bflb_gpio_uart_init(gpio, GPIO_PIN_18, GPIO_UART_FUNC_UART1_TX); - // bflb_gpio_uart_init(gpio, GPIO_PIN_19, GPIO_UART_FUNC_UART1_RX); + gpio = bflb_device_get_by_name("gpio"); + bflb_gpio_uart_init(gpio, GPIO_PIN_1, GPIO_UART_FUNC_UART1_TX); + bflb_gpio_uart_init(gpio, GPIO_PIN_12, GPIO_UART_FUNC_UART1_RX); } void board_i2c0_gpio_init() diff --git a/bsp/board/bl616dk/board.c b/bsp/board/bl616dk/board.c index 12bf2a36..789f81cb 100644 --- a/bsp/board/bl616dk/board.c +++ b/bsp/board/bl616dk/board.c @@ -371,11 +371,14 @@ void board_ir_gpio_init(void) GLB_IR_RX_GPIO_Sel(GLB_GPIO_PIN_10); } -void board_dvp1_gpio_init(void) +void board_dvp_gpio_init(void) { struct bflb_device_s *gpio; gpio = bflb_device_get_by_name("gpio"); + +#if 0 + /* DVP0 GPIO init */ /* I2C GPIO */ bflb_gpio_init(gpio, GPIO_PIN_0, GPIO_FUNC_I2C0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); bflb_gpio_init(gpio, GPIO_PIN_1, GPIO_FUNC_I2C0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); @@ -391,7 +394,7 @@ void board_dvp1_gpio_init(void) /* MCLK GPIO */ bflb_gpio_init(gpio, GPIO_PIN_23, GPIO_FUNC_CLKOUT | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); - /* DVP1 GPIO */ + /* DVP0 GPIO */ bflb_gpio_init(gpio, GPIO_PIN_24, GPIO_FUNC_CAM | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); bflb_gpio_init(gpio, GPIO_PIN_25, GPIO_FUNC_CAM | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); bflb_gpio_init(gpio, GPIO_PIN_26, GPIO_FUNC_CAM | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); @@ -403,13 +406,8 @@ void board_dvp1_gpio_init(void) bflb_gpio_init(gpio, GPIO_PIN_32, GPIO_FUNC_CAM | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); bflb_gpio_init(gpio, GPIO_PIN_33, GPIO_FUNC_CAM | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); bflb_gpio_init(gpio, GPIO_PIN_34, GPIO_FUNC_CAM | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); -} - -void board_dvp2_gpio_init(void) -{ - struct bflb_device_s *gpio; - - gpio = bflb_device_get_by_name("gpio"); +#else + /* DVP1 GPIO init */ /* I2C GPIO */ bflb_gpio_init(gpio, GPIO_PIN_28, GPIO_FUNC_I2C0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); bflb_gpio_init(gpio, GPIO_PIN_27, GPIO_FUNC_I2C0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); @@ -425,7 +423,7 @@ void board_dvp2_gpio_init(void) /* MCLK GPIO */ bflb_gpio_init(gpio, GPIO_PIN_20, GPIO_FUNC_CLKOUT | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); - /* DVP2 GPIO */ + /* DVP1 GPIO */ bflb_gpio_init(gpio, GPIO_PIN_0, GPIO_FUNC_CAM | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); bflb_gpio_init(gpio, GPIO_PIN_1, GPIO_FUNC_CAM | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); bflb_gpio_init(gpio, GPIO_PIN_3, GPIO_FUNC_CAM | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); @@ -437,6 +435,7 @@ void board_dvp2_gpio_init(void) bflb_gpio_init(gpio, GPIO_PIN_15, GPIO_FUNC_CAM | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); bflb_gpio_init(gpio, GPIO_PIN_16, GPIO_FUNC_CAM | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); bflb_gpio_init(gpio, GPIO_PIN_17, GPIO_FUNC_CAM | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); +#endif } void board_iso11898_gpio_init() diff --git a/bsp/board/bl616dk/board.h b/bsp/board/bl616dk/board.h index 694a9e8c..33275c70 100644 --- a/bsp/board/bl616dk/board.h +++ b/bsp/board/bl616dk/board.h @@ -12,8 +12,7 @@ void board_dac_gpio_init(); void board_emac_gpio_init(); void board_sdh_gpio_init(); void board_ir_gpio_init(); -void board_dvp1_gpio_init(); -void board_dvp2_gpio_init(); +void board_dvp_gpio_init(); void board_iso11898_gpio_init(); #define DEFAULT_TEST_UART "uart1" diff --git a/bsp/board/bl702dk/CMakeLists.txt b/bsp/board/bl702dk/CMakeLists.txt index 44828437..6fa8c28e 100644 --- a/bsp/board/bl702dk/CMakeLists.txt +++ b/bsp/board/bl702dk/CMakeLists.txt @@ -1,3 +1,7 @@ sdk_add_include_directories(.) -sdk_set_linker_script(bl702_flash.ld) \ No newline at end of file +sdk_set_linker_script(bl702_flash.ld) + +if(CONFIG_PSRAM) +sdk_add_compile_definitions(-DCONFIG_PSRAM) +endif() \ No newline at end of file diff --git a/bsp/board/bl702dk/board.c b/bsp/board/bl702dk/board.c index 173affda..78a823db 100644 --- a/bsp/board/bl702dk/board.c +++ b/bsp/board/bl702dk/board.c @@ -11,6 +11,7 @@ #include "board.h" #include "bl702_glb.h" #include "bl702_sflash.h" +#include "bl702_psram.h" extern uint32_t __HeapBase; extern uint32_t __HeapLimit; @@ -50,6 +51,7 @@ static void peripheral_clock_init(void) PERIPHERAL_CLOCK_IR_ENABLE(); PERIPHERAL_CLOCK_I2S_ENABLE(); PERIPHERAL_CLOCK_USB_ENABLE(); + GLB_AHB_Slave1_Clock_Gate(DISABLE,BL_AHB_SLAVE1_CAM); GLB_Set_UART_CLK(ENABLE, HBN_UART_CLK_96M, 0); GLB_Set_SPI_CLK(ENABLE, 0); @@ -62,6 +64,107 @@ static void peripheral_clock_init(void) GLB_Set_USB_CLK(ENABLE); } +/* bsp sf psram private variables */ + +SPI_Psram_Cfg_Type apMemory1604 = { + .readIdCmd = 0x9F, + .readIdDmyClk = 0, + .burstToggleCmd = 0xC0, + .resetEnableCmd = 0x66, + .resetCmd = 0x99, + .enterQuadModeCmd = 0x35, + .exitQuadModeCmd = 0xF5, + .readRegCmd = 0xB5, + .readRegDmyClk = 1, + .writeRegCmd = 0xB1, + .readCmd = 0x03, + .readDmyClk = 0, + .fReadCmd = 0x0B, + .fReadDmyClk = 1, + .fReadQuadCmd = 0xEB, + .fReadQuadDmyClk = 3, + .writeCmd = 0x02, + .quadWriteCmd = 0x38, + .pageSize = 512, + .ctrlMode = PSRAM_SPI_CTRL_MODE, + .driveStrength = PSRAM_DRIVE_STRENGTH_50_OHMS, + .burstLength = PSRAM_BURST_LENGTH_512_BYTES, +}; + +SF_Ctrl_Cmds_Cfg cmdsCfg = { + .cmdsEn = ENABLE, + .burstToggleEn = ENABLE, + .wrapModeEn = DISABLE, + .wrapLen = SF_CTRL_WRAP_LEN_512, +}; +SF_Ctrl_Psram_Cfg sfCtrlPsramCfg = { + .owner = SF_CTRL_OWNER_SAHB, + .padSel = SF_CTRL_PAD_SEL_DUAL_CS_SF2, + .bankSel = SF_CTRL_SEL_PSRAM, + .psramRxClkInvertSrc = ENABLE, + .psramRxClkInvertSel = DISABLE, + .psramDelaySrc = ENABLE, + .psramClkDelay = 1, +}; + +#define BFLB_EXTFLASH_CS_GPIO GLB_GPIO_PIN_25 +#define BFLB_EXTPSRAM_CLK_GPIO GLB_GPIO_PIN_27 +#define BFLB_EXTPSRAM_CS_GPIO GLB_GPIO_PIN_17 +#define BFLB_EXTPSRAM_DATA0_GPIO GLB_GPIO_PIN_28 +#define BFLB_EXTPSRAM_DATA1_GPIO GLB_GPIO_PIN_24 +#define BFLB_EXTPSRAM_DATA2_GPIO GLB_GPIO_PIN_23 +#define BFLB_EXTPSRAM_DATA3_GPIO GLB_GPIO_PIN_26 + +void ATTR_TCM_SECTION psram_gpio_init(void) +{ + GLB_GPIO_Cfg_Type cfg; + uint8_t gpiopins[7]; + uint8_t i = 0; + + cfg.gpioMode = GPIO_MODE_AF; + cfg.pullType = GPIO_PULL_UP; + cfg.drive = 3; + cfg.smtCtrl = 1; + cfg.gpioFun = GPIO_FUN_FLASH_PSRAM; + + gpiopins[0] = BFLB_EXTPSRAM_CLK_GPIO; + gpiopins[1] = BFLB_EXTPSRAM_CS_GPIO; + gpiopins[2] = BFLB_EXTPSRAM_DATA0_GPIO; + gpiopins[3] = BFLB_EXTPSRAM_DATA1_GPIO; + gpiopins[4] = BFLB_EXTPSRAM_DATA2_GPIO; + gpiopins[5] = BFLB_EXTPSRAM_DATA3_GPIO; + gpiopins[6] = BFLB_EXTFLASH_CS_GPIO; + + for (i = 0; i < sizeof(gpiopins); i++) { + cfg.gpioPin = gpiopins[i]; + + if (i == 0 || i == 1 || i == 6) { + /*flash clk and cs is output*/ + cfg.gpioMode = GPIO_MODE_OUTPUT; + } else { + /*data are bidir*/ + cfg.gpioMode = GPIO_MODE_AF; + } + + GLB_GPIO_Init(&cfg); + } +} + +uint8_t psramId[8] = { 0 }; + +void ATTR_TCM_SECTION board_psram_init(void) +{ + psram_gpio_init(); + + Psram_Init(&apMemory1604, &cmdsCfg, &sfCtrlPsramCfg); + + Psram_SoftwareReset(&apMemory1604, apMemory1604.ctrlMode); + + Psram_ReadId(&apMemory1604, psramId); + Psram_Cache_Write_Set(&apMemory1604, SF_CTRL_QIO_MODE, ENABLE, DISABLE, DISABLE); + L1C_Cache_Enable_Set(L1C_WAY_DISABLE_NONE); +} + void bl_show_log(void) { printf("\r\n"); @@ -164,6 +267,9 @@ void board_init(void) #if defined(CONFIG_BFLOG) rtc = bflb_device_get_by_name("rtc"); #endif +#ifdef CONFIG_PSRAM + board_psram_init(); +#endif } void board_uartx_gpio_init() @@ -286,6 +392,40 @@ void board_keyscan_gpio_init(void) GLB_Set_QDEC_CLK(GLB_QDEC_CLK_F32K, 0); } +void board_dvp_gpio_init(void) +{ + struct bflb_device_s *gpio; + + gpio = bflb_device_get_by_name("gpio"); + /* I2C GPIO */ + bflb_gpio_init(gpio, GPIO_PIN_16, GPIO_FUNC_I2C0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); + bflb_gpio_init(gpio, GPIO_PIN_11, GPIO_FUNC_I2C0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); + + /* MCLK, use GPIO 10 */ + //bflb_gpio_init(gpio, GPIO_PIN_10, GPIO_FUNC_CAM_MCLK | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); + //GLB_Set_CAM_CLK(ENABLE, GLB_CAM_CLK_DLL96M, 3); + + /* MCLK, use GPIO 9 */ + bflb_gpio_init(gpio, GPIO_PIN_9, GPIO_FUNC_CLK_OUT | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); + PDS_Set_Audio_PLL_Freq(AUDIO_PLL_24576000_HZ); + GLB_Set_Chip_Out_1_CLK_Sel(GLB_CHIP_CLK_OUT_I2S_REF_CLK); + + /* DVP GPIO */ + bflb_gpio_init(gpio, GPIO_PIN_0, GPIO_FUNC_CAM | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); + bflb_gpio_init(gpio, GPIO_PIN_1, GPIO_FUNC_CAM | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); + bflb_gpio_init(gpio, GPIO_PIN_2, GPIO_FUNC_CAM | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); + bflb_gpio_init(gpio, GPIO_PIN_3, GPIO_FUNC_CAM | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); + bflb_gpio_init(gpio, GPIO_PIN_4, GPIO_FUNC_CAM | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); + bflb_gpio_init(gpio, GPIO_PIN_5, GPIO_FUNC_CAM | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); + bflb_gpio_init(gpio, GPIO_PIN_6, GPIO_FUNC_CAM | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); + bflb_gpio_init(gpio, GPIO_PIN_12, GPIO_FUNC_CAM | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); + bflb_gpio_init(gpio, GPIO_PIN_29, GPIO_FUNC_CAM | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); + bflb_gpio_init(gpio, GPIO_PIN_30, GPIO_FUNC_CAM | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); + bflb_gpio_init(gpio, GPIO_PIN_31, GPIO_FUNC_CAM | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); + + GLB_SWAP_EMAC_CAM_Pin(GLB_EMAC_CAM_PIN_CAM); +} + #ifdef CONFIG_BFLOG __attribute__((weak)) uint64_t bflog_clock(void) { diff --git a/bsp/board/bl702dk/board.h b/bsp/board/bl702dk/board.h index 48d9de88..1ad10241 100644 --- a/bsp/board/bl702dk/board.h +++ b/bsp/board/bl702dk/board.h @@ -11,6 +11,7 @@ void board_dac_gpio_init(); void board_emac_gpio_init(); void board_pwm_gpio_init(); void board_ir_gpio_init(); +void board_dvp_gpio_init(); #define DEFAULT_TEST_UART "uart1" #define DEFAULT_TEST_UART_DMA_TX_REQUEST DMA_REQUEST_UART1_TX diff --git a/bsp/board/bl808dk/board.c b/bsp/board/bl808dk/board.c index 5116b970..08d30205 100644 --- a/bsp/board/bl808dk/board.c +++ b/bsp/board/bl808dk/board.c @@ -95,6 +95,12 @@ static void peripheral_clock_init(void) GLB_AHB_MCU_Software_Reset(GLB_AHB_MCU_SW_SDH); #endif GLB_Set_USB_CLK_From_WIFIPLL(1); + +#ifdef CONFIG_BSP_CSI + GLB_CSI_Config_MIPIPLL(2, 0x21000); + GLB_CSI_Power_Up_MIPIPLL(); + GLB_Set_DSP_CLK(ENABLE, GLB_DSP_CLK_MUXPLL_160M, 1); +#endif } #ifdef CONFIG_PSRAM @@ -451,7 +457,7 @@ void board_sdh_gpio_init(void) bflb_gpio_init(gpio, GPIO_PIN_5, GPIO_FUNC_SDH | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_2); } -void board_dvp1_gpio_init(void) +void board_dvp_gpio_init(void) { struct bflb_device_s *gpio; @@ -471,7 +477,7 @@ void board_dvp1_gpio_init(void) /* MCLK GPIO */ bflb_gpio_init(gpio, GPIO_PIN_33, GPIO_FUNC_CLKOUT | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); - /* DVP1 GPIO */ + /* DVP GPIO */ bflb_gpio_init(gpio, GPIO_PIN_16, GPIO_FUNC_CAM | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); bflb_gpio_init(gpio, GPIO_PIN_17, GPIO_FUNC_CAM | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); bflb_gpio_init(gpio, GPIO_PIN_24, GPIO_FUNC_CAM | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); @@ -485,7 +491,31 @@ void board_dvp1_gpio_init(void) bflb_gpio_init(gpio, GPIO_PIN_32, GPIO_FUNC_CAM | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); } -void board_iso11898_gpio_init() +void board_csi_gpio_init(void) +{ + struct bflb_device_s *gpio; + + gpio = bflb_device_get_by_name("gpio"); + + /* I2C GPIO */ + bflb_gpio_init(gpio, GPIO_PIN_19, GPIO_FUNC_I2C0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); + bflb_gpio_init(gpio, GPIO_PIN_20, GPIO_FUNC_I2C0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); + + /* Power down GPIO */ + bflb_gpio_init(gpio, GPIO_PIN_22, GPIO_OUTPUT | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); + bflb_gpio_set(gpio, GPIO_PIN_22); + + /* Reset GPIO */ + bflb_gpio_init(gpio, GPIO_PIN_21, GPIO_OUTPUT | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); + bflb_gpio_set(gpio, GPIO_PIN_21); + + /* MCLK GPIO */ + bflb_gpio_init(gpio, GPIO_PIN_23, GPIO_FUNC_CLKOUT | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); + + GLB_Set_Ldo15cis_Vout(GLB_LDO15CIS_LEVEL_1P20V); +} + +void board_iso11898_gpio_init(void) { // struct bflb_device_s *gpio; diff --git a/bsp/board/bl808dk/board.h b/bsp/board/bl808dk/board.h index 76558144..ca7b074a 100644 --- a/bsp/board/bl808dk/board.h +++ b/bsp/board/bl808dk/board.h @@ -13,8 +13,9 @@ void board_dac_gpio_init(void); void board_ir_gpio_init(void); void board_emac_gpio_init(void); void board_sdh_gpio_init(void); -void board_dvp1_gpio_init(void); -void board_iso11898_gpio_init(); +void board_dvp_gpio_init(void); +void board_csi_gpio_init(void); +void board_iso11898_gpio_init(void); #define DEFAULT_TEST_UART "uart1" #define DEFAULT_TEST_UART_DMA_TX_REQUEST DMA_REQUEST_UART1_TX