Other Parts Discussed in Thread: CC3351
工具/软件:
大家好、我一直使用 SPI 通过 STM32U5 系列测试 CC3351。
我使用了 cc33xx_RTOS_MCU_PACKAGE_R7_2 封装及其 SPI 移植示例。 经过一些试错后、我能够通过 SPI 与 CC3351 进行通信。
现在我要使用相同的 SDIO 引脚。 我正在尝试使用 HAL 提供的 SDIO 函数进行移植。 我在这里失败了。
这是我尝试过的:
#include "sdio_adapt.h"#include "stm32u5xx_hal.h"extern SDIO_HandleTypeDef hsdio1;// Add a new flag for IO-only devicesint sdioAdapt_Init() { hsdio1.Instance = SDMMC1; hsdio1.Init.ClockEdge = SDMMC_CLOCK_EDGE_RISING; hsdio1.Init.ClockPowerSave = SDMMC_CLOCK_POWER_SAVE_DISABLE; hsdio1.Init.BusWide = SDMMC_BUS_WIDE_4B; hsdio1.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE; hsdio1.Init.ClockDiv = 80 - 1; return HAL_SDIO_Init(&hsdio1) ;// if (HAL_SDIO_Init(&hsdio1) != HAL_OK) {// Error_Handler();// }//// return HAL_OK;}int sdioAdapt_read(uint32_t address, uint8_t *data, uint32_t length) { HAL_StatusTypeDef ret; if (length == 1) { // CMD52 single-byte read HAL_SDIO_DirectCmd_TypeDef arg = {0}; arg.Reg_Addr = address; arg.ReadAfterWrite = 0; arg.IOFunctionNbr = 0; // CC3351 SDIO function (check datasheet!) ret = HAL_SDIO_ReadDirect(&hsdio1, &arg, data); } else { // CMD53 multi-byte read HAL_SDIO_ExtendedCmd_TypeDef arg = {0}; arg.Reg_Addr = address; arg.IOFunctionNbr = 0; // CC3351 SDIO function number arg.OpCode = 1; // incrementing address arg.Block_Mode = 0; // 0=byte mode, 1=block mode ret = HAL_SDIO_ReadExtended(&hsdio1, &arg, data, length, HAL_MAX_DELAY); } return (ret == HAL_OK) ? 0 : -1;}int sdioAdapt_write(uint32_t address, uint8_t *data, uint32_t length) { HAL_StatusTypeDef ret; if (length == 1) { // CMD52 single-byte write HAL_SDIO_DirectCmd_TypeDef arg = {0}; arg.Reg_Addr = address; arg.ReadAfterWrite = 0; arg.IOFunctionNbr = 1; ret = HAL_SDIO_WriteDirect(&hsdio1, &arg, *data); } else { // CMD53 multi-byte write HAL_SDIO_ExtendedCmd_TypeDef arg = {0}; arg.Reg_Addr = address; arg.IOFunctionNbr = 1; arg.OpCode = 1; arg.Block_Mode = 0; ret = HAL_SDIO_WriteExtended(&hsdio1, &arg, data, length, HAL_MAX_DELAY); } return (ret == HAL_OK) ? 0 : -1;}int sdioAdapt_deInit() { HAL_SDIO_DeInit(&hsdio1); return 0;}
但这并不成功。 我将相同的代码从在 SPI 模式下工作的内容移植到 SDIO。 我在这里刚刚使用了 SDIO 通信。 禁用 SPI 端口文件和外设。
如果有任何我可以参考的东西,会有帮助。