这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
icore3l_arm_16 [2020/11/18 10:42] zgf |
icore3l_arm_16 [2022/03/19 11:01] (当前版本) sean |
||
---|---|---|---|
行 2: | 行 2: | ||
|技术支持电话|**0379-69926675-801**||| | |技术支持电话|**0379-69926675-801**||| | ||
|技术支持邮件|Gingko@vip.163.com||| | |技术支持邮件|Gingko@vip.163.com||| | ||
- | |技术论坛|http://www.eeschool.org||| | ||
^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ||
| V1.0 | 2020-11-18 | gingko | 初次建立 | | | V1.0 | 2020-11-18 | gingko | 初次建立 | | ||
行 199: | 行 198: | ||
} | } | ||
</code> | </code> | ||
+ | 2.SDIO初始化函数 | ||
+ | <code c> | ||
+ | void MX_SDIO_SD_Init(void) //SDIO初始化 | ||
+ | { | ||
+ | hsd.Instance = SDIO; | ||
+ | hsd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING; | ||
+ | hsd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE; | ||
+ | hsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE; | ||
+ | hsd.Init.BusWide = SDIO_BUS_WIDE_1B; | ||
+ | hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE; | ||
+ | hsd.Init.ClockDiv = 0; | ||
+ | if (HAL_SD_Init(&hsd) != HAL_OK) | ||
+ | { | ||
+ | Error_Handler(); | ||
+ | } | ||
+ | if (HAL_SD_ConfigWideBusOperation(&hsd, SDIO_BUS_WIDE_4B) != HAL_OK) | ||
+ | { | ||
+ | Error_Handler(); | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | 3.SD卡写数据块函数 | ||
+ | <code c> | ||
+ | HAL_SD_WriteBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks, uint32_t Timeout) | ||
+ | //*hsd:指向SD卡的指针 | ||
+ | //*pData:指向要写入的数据的指针 | ||
+ | //BlockAdd:数据块地址 | ||
+ | //NumberOfBlocks:写入的块数 | ||
+ | //Timeout:写入超时设置 | ||
+ | </code> | ||
+ | 4.SD读数据块函数 | ||
+ | <code c> | ||
+ | HAL_SD_ReadBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks, uint32_t Timeout) | ||
+ | //*hsd:指向SD卡的指针 | ||
+ | //*pData:指向数据读取后存放区的指针 | ||
+ | //BlockAdd:数据块地址 | ||
+ | //NumberOfBlocks:读取的块数 | ||
+ | //Timeout:读取超时设置 | ||
+ | </code> | ||
+ | 5.SDIO外设管理结构体 | ||
+ | <code c> | ||
+ | typedef struct { | ||
+ | SD_TypeDef *Instance; /*!< SDMMC 寄存器基地址*/ | ||
+ | SD_InitTypeDef Init; /*!< SD 初始化结构体*/ | ||
+ | HAL_LockTypeDef Lock; /*!< SD 锁资源*/ | ||
+ | uint32_t *pTxBuffPtr; /*!< 存放发送数据地址的指针*/ | ||
+ | uint32_t TxXferSize; /*!< 发送数据的大小 */ | ||
+ | uint32_t *pRxBuffPtr; /*!< 存放接受数据地址的指针*/ | ||
+ | uint32_t RxXferSize; /*!< 接受数据的大小*/ | ||
+ | __IO uint32_t Context; /*!< SDMMC 的工作模式 */ | ||
+ | __IO HAL_SD_StateTypeDef State; /*!< SD 卡的状态值*/ | ||
+ | __IO uint32_t ErrorCode; /*!< SD 错误操作返回值*/ | ||
+ | HAL_SD_CardInfoTypeDef SdCard; /*!< SD 卡的信息*/ | ||
+ | uint32_t CSD[4]; /*!< SD 卡的 CSD 寄存器值*/ | ||
+ | uint32_t CID[4]; /*!< SD 卡的 CID 寄存器值*/ | ||
+ | } SD_HandleTypeDef; | ||
+ | </code> | ||
+ | 6.SDIO 数据初始化结构体 | ||
+ | <code c> | ||
+ | typedef struct { | ||
+ | uint32_t DataTimeOut; // 数据传输超时 | ||
+ | uint32_t DataLength; // 数据长度 | ||
+ | uint32_t DataBlockSize; // 数据块大小 | ||
+ | uint32_t TransferDir; // 数据传输方向 | ||
+ | uint32_t TransferMode; // 数据传输模式 | ||
+ | uint32_t DPSM; // 数据路径状态机 | ||
+ | } SDIO_DataInitTypeDef; | ||
+ | </code> | ||
+ | 7.SD卡信息结构体 | ||
+ | <code c> | ||
+ | typedef struct{ | ||
+ | uint32_t CardType; /*卡种类*/ | ||
+ | uint32_t CardVersion; /*卡版本*/ | ||
+ | uint32_t Class; /*卡类*/ | ||
+ | uint32_t RelCardAdd; /*相对卡地址*/ | ||
+ | uint32_t BlockNbr; /*以块为单位指定卡容量*/ | ||
+ | uint32_t BlockSize; /*一个块大小(以字节为单位)*/ | ||
+ | uint32_t LogBlockNbr; /*以块为单位指定卡逻辑容量*/ | ||
+ | uint32_t LogBlockSize; /*逻辑块大小(以字节为单位)*/ | ||
+ | uint32_t CardSpeed; /*卡速度*/ | ||
+ | }HAL_SD_CardInfoTypeDef; | ||
+ | </code> | ||
+ | ==== 五、实验步骤 ==== | ||
+ | - 把仿真器与iCore3L的SWD调试口相连(直接相连或者通过转接器相连); | ||
+ | - 把iCore3L通过Micro USB线与计算机相连,为iCore3L供电; | ||
+ | - 打开PuTTY串口终端; | ||
+ | - 打开Keil MDK 开发环境,并打开本实验工程; | ||
+ | - 烧写程序到iCore3L上; | ||
+ | - 也可以进入Debug 模式,单步运行或设置断点验证程序逻辑。 | ||
+ | ==== 六、实验现象 ==== | ||
+ | 终端显示出SD卡的相关信息,并输出写入SD卡的数据。 | ||
+ | {{ :icore3l:icore3l_arm_hal_16_5.png?direct |}} | ||
+ | ===== 附录 ===== | ||
+ | 1.安装CH340驱动(双击安装,如果已安装忽略此步)\\ | ||
+ | 2.iCore3L供电后,打开计算机——属性——设备管理器——端口 | ||
+ | {{ :icore3l:icore3l_arm_hal_16_6.png?direct |}} | ||
+ | 3.打开puTTY | ||
+ | {{ :icore3l:icore3l_arm_hal_16_7.png?direct |}} | ||
+ | 4.烧写程序进行验证 |