設置 | 登錄 | 註冊

目前共有4篇帖子。

whd_bus_read_backplane_value讀出來chip ID為0

1樓 巨大八爪鱼 2025-4-7 15:21

【F:\Code\C\MCU\wifi_scan_20250407\Middlewares\Third_Party\Infineon_Wireless_Connectivity\wifi-host-driver\COMPONENT_WIFI5\src\bus_protocols\whd_bus_sdio_protocol.c】

whd_bus_read_backplane_value(whd_driver, CHIPCOMMON_BASE_ADDRESS, 2, (uint8_t *)&chip_id);

WPRINT_WHD_INFO( ("chip ID: %d \n", chip_id) );

 

【F:\Code\C\MCU\wifi_scan_20250407\Middlewares\Third_Party\Infineon_Wireless_Connectivity\wifi-host-driver\COMPONENT_WIFI5\src\bus_protocols\whd_bus.c】
whd_result_t whd_bus_read_backplane_value(whd_driver_t whd_driver, uint32_t address, uint8_t register_length,
                                          uint8_t *value)
{
    return whd_driver->bus_if->whd_bus_read_backplane_value_fptr(whd_driver, address, register_length, value);
}

 

【F:\Code\C\MCU\wifi_scan_20250407\Middlewares\Third_Party\Infineon_Wireless_Connectivity\wifi-host-driver\COMPONENT_WIFI5\src\bus_protocols\whd_bus_sdio_protocol.c】

whd_result_t whd_bus_sdio_read_backplane_value(whd_driver_t whd_driver, uint32_t address, uint8_t register_length,
                                               uint8_t *value);

2樓 巨大八爪鱼 2025-4-7 15:30

【F:\Code\C\MCU\wifi_scan_20250407\Middlewares\Third_Party\Infineon_Wireless_Connectivity\wifi-host-driver\COMPONENT_WIFI5\src\bus_protocols\whd_bus_common.c】

#ifndef PROTO_MSGBUF
whd_result_t whd_bus_set_backplane_window(whd_driver_t whd_driver, uint32_t addr)
{
    uint32_t *curbase = &whd_driver->bus_common_info->backplane_window_current_base_address;
    return whd_driver->bus_if->whd_bus_set_backplane_window_fptr(whd_driver, addr, curbase);
}
#endif

 

【F:\Code\C\MCU\wifi_scan_20250407\Middlewares\Third_Party\Infineon_Wireless_Connectivity\wifi-host-driver\COMPONENT_WIFI5\src\bus_protocols\whd_bus_sdio_protocol.c】

/*
 * Update the backplane window registers
 */
whd_result_t whd_bus_sdio_set_backplane_window(whd_driver_t whd_driver, uint32_t addr, uint32_t *curbase);

3樓 巨大八爪鱼 2025-4-7 16:01

result = whd_bus_write_register_value(whd_driver, BACKPLANE_FUNCTION, SDIO_BACKPLANE_ADDRESS_HIGH,
                                                   (uint8_t)1, (base >> 24) );

 

【F:\Code\C\MCU\wifi_scan_20250407\Middlewares\Third_Party\Infineon_Wireless_Connectivity\wifi-host-driver\COMPONENT_WIFI5\src\bus_protocols\whd_bus.c】

whd_result_t whd_bus_write_register_value(whd_driver_t whd_driver, whd_bus_function_t function, uint32_t address,
                                          uint8_t value_length, uint32_t value)
{
    return whd_driver->bus_if->whd_bus_write_register_value_fptr(whd_driver, function, address, value_length, value);
}

 

【F:\Code\C\MCU\wifi_scan_20250407\Middlewares\Third_Party\Infineon_Wireless_Connectivity\wifi-host-driver\COMPONENT_WIFI5\src\bus_protocols\whd_bus_sdio_protocol.c】

whd_result_t whd_bus_sdio_write_register_value(whd_driver_t whd_driver, whd_bus_function_t function, uint32_t address,
                                               uint8_t value_length, uint32_t value)
{
    return whd_bus_sdio_transfer(whd_driver, BUS_WRITE, function, address, value_length, (uint8_t *)&value,
                                 RESPONSE_NEEDED);
}

static whd_result_t whd_bus_sdio_transfer(whd_driver_t whd_driver, whd_bus_transfer_direction_t direction,
                                          whd_bus_function_t function, uint32_t address, uint16_t data_size,
                                          uint8_t *data, sdio_response_needed_t response_expected);

 

if (data_size == (uint16_t)1)
    {
        return whd_bus_sdio_cmd52(whd_driver, direction, function, address, *data, response_expected, data);
    }

 

static whd_result_t whd_bus_sdio_cmd52(whd_driver_t whd_driver, whd_bus_transfer_direction_t direction,
                                       whd_bus_function_t function, uint32_t address, uint8_t value,
                                       sdio_response_needed_t response_expected, uint8_t *response);

result = cyhal_sdio_send_cmd(whd_driver->bus_priv->sdio_obj, (cyhal_sdio_transfer_t)direction,
                                 CYHAL_SDIO_CMD_IO_RW_DIRECT, arg.value,
                                 &sdio_response);

 

【F:\Code\C\MCU\wifi_scan_20250407\Middlewares\Third_Party\Infineon_Wireless_Connectivity\pal\targets\TARGET_STM32\Src\stm32_cyhal_sdio.c】

cy_rslt_t cyhal_sdio_send_cmd(cyhal_sdio_t* obj, cyhal_sdio_transfer_type_t direction,
                              cyhal_sdio_command_t command, uint32_t argument, uint32_t* response);

ret = _stm32_sdio_cmd_rw_direct(obj->hsd->Instance, argument, response);

 

static uint32_t _stm32_sdio_cmd_rw_direct(SDMMC_TypeDef* SDMMCx, uint32_t argument,
                                          uint32_t* response);

SDMMC_SendCommand(SDMMCx, &sdmmc_cmdinit);

errorstate = _stm32_sdio_get_cmd_resp5(SDMMCx, SDMMC_CMD_SDMMC_RW_DIRECT, response, argument);

 

static uint32_t _stm32_sdio_get_cmd_resp5(SDMMC_TypeDef* SDMMCx, uint8_t SD_CMD, uint32_t* data,
                                          uint32_t argument);

SDMMC_GetCommandResponse(SDMMCx);

__SDMMC_CLEAR_FLAG(SDMMCx, SDMMC_STATIC_CMD_FLAGS);

SDMMC_GetResponse(SDMMCx, SDMMC_RESP1);

4樓 巨大八爪鱼 2025-4-7 16:29

whd_result_t whd_bus_sdio_attach(whd_driver_t whd_driver, whd_sdio_config_t *whd_sdio_config, cyhal_sdio_t *sdio_obj)
{
    struct whd_bus_info *whd_bus_info;

    if (!whd_driver || !whd_sdio_config)
    {
        WPRINT_WHD_ERROR( ("Invalid param in func %s at line %d \n",
                           __func__, __LINE__) );
        return WHD_WLAN_BADARG;
    }

    whd_bus_info = (whd_bus_info_t *)whd_mem_malloc(sizeof(whd_bus_info_t) );

    if (whd_bus_info == NULL)
    {
        WPRINT_WHD_ERROR( ("Memory allocation failed for whd_bus_info in %s\n", __FUNCTION__) );
        return WHD_BUFFER_UNAVAILABLE_PERMANENT;
    }
    memset(whd_bus_info, 0, sizeof(whd_bus_info_t) );

    whd_driver->bus_if = whd_bus_info;

    whd_driver->bus_priv = (struct whd_bus_priv *)whd_mem_malloc(sizeof(struct whd_bus_priv) );

    if (whd_driver->bus_priv == NULL)
    {
        WPRINT_WHD_ERROR( ("Memory allocation failed for whd_bus_priv in %s\n", __FUNCTION__) );
        return WHD_BUFFER_UNAVAILABLE_PERMANENT;
    }
    memset(whd_driver->bus_priv, 0, sizeof(struct whd_bus_priv) );

    whd_driver->bus_priv->sdio_obj = sdio_obj;
    whd_driver->bus_priv->sdio_config = *whd_sdio_config;

    whd_driver->proto_type = WHD_PROTO_BCDC;

    whd_bus_info->whd_bus_init_fptr = whd_bus_sdio_init;
    whd_bus_info->whd_bus_deinit_fptr = whd_bus_sdio_deinit;

    whd_bus_info->whd_bus_write_backplane_value_fptr = whd_bus_sdio_write_backplane_value;
    whd_bus_info->whd_bus_read_backplane_value_fptr = whd_bus_sdio_read_backplane_value;
    whd_bus_info->whd_bus_write_register_value_fptr = whd_bus_sdio_write_register_value;
    whd_bus_info->whd_bus_read_register_value_fptr = whd_bus_sdio_read_register_value;

    whd_bus_info->whd_bus_send_buffer_fptr = whd_bus_sdio_send_buffer;
    whd_bus_info->whd_bus_transfer_bytes_fptr = whd_bus_sdio_transfer_bytes;

    whd_bus_info->whd_bus_read_frame_fptr = whd_bus_sdio_read_frame;

    whd_bus_info->whd_bus_packet_available_to_read_fptr = whd_bus_sdio_packet_available_to_read;
    whd_bus_info->whd_bus_poke_wlan_fptr = whd_bus_sdio_poke_wlan;
    whd_bus_info->whd_bus_wait_for_wlan_event_fptr = whd_bus_sdio_wait_for_wlan_event;

    whd_bus_info->whd_bus_ack_interrupt_fptr = whd_bus_sdio_ack_interrupt;
    whd_bus_info->whd_bus_wake_interrupt_present_fptr = whd_bus_sdio_wake_interrupt_present;

    whd_bus_info->whd_bus_wakeup_fptr = whd_bus_sdio_wakeup;
    whd_bus_info->whd_bus_sleep_fptr = whd_bus_sdio_sleep;

    whd_bus_info->whd_bus_backplane_read_padd_size_fptr = whd_bus_sdio_backplane_read_padd_size;
    whd_bus_info->whd_bus_use_status_report_scheme_fptr = whd_bus_sdio_use_status_report_scheme;

    whd_bus_info->whd_bus_get_max_transfer_size_fptr = whd_bus_sdio_get_max_transfer_size;

    whd_bus_info->whd_bus_init_stats_fptr = whd_bus_sdio_init_stats;
    whd_bus_info->whd_bus_print_stats_fptr = whd_bus_sdio_print_stats;
    whd_bus_info->whd_bus_reinit_stats_fptr = whd_bus_sdio_reinit_stats;
    whd_bus_info->whd_bus_irq_register_fptr = whd_bus_sdio_irq_register;
    whd_bus_info->whd_bus_irq_enable_fptr = whd_bus_sdio_irq_enable;
#ifdef BLHS_SUPPORT
    whd_bus_info->whd_bus_blhs_fptr = whd_bus_sdio_blhs;
#endif
    whd_bus_info->whd_bus_download_resource_fptr = whd_bus_sdio_download_resource;
    whd_bus_info->whd_bus_set_backplane_window_fptr = whd_bus_sdio_set_backplane_window;

    return WHD_SUCCESS;
}

內容轉換:

回覆帖子
內容:
用戶名: 您目前是匿名發表。
驗證碼:
看不清?換一張
©2010-2025 Purasbar Ver3.0 [手機版] [桌面版]
除非另有聲明,本站採用知識共享署名-相同方式共享 3.0 Unported許可協議進行許可。