电子说
原理图
下图是sdio的接线图
dat0-4 cmd 接了4.7k的上拉电阻。六根与mcu相连的线中均接了一个22欧的电阻,用于限制电流。
下图是mcu的接线
dat0接引脚P2.0,dat1接P2.1,dat2接P2.2,dat3接P2.3,cmd接P2.4,clk接P2.5,
板子的sd卡座是弹簧式的,卡片压下去 ,弹片与地相接,mcu_sd_cd低电平,mcu可检测到当前有卡片插入。
英飞凌提供了两种驱动依赖:
PSoC 6 Peripheral Driver Library(PDL),Hardware Abstraction Layer (HAL)。
pdl接口大概对sdio的支持度不很好,不太完善,当前测试按照以下流程初始化会失败,
pdl接口位于HAl的上层,属于对hal接口的再次封装。
群里有位大佬使用了hal接口,初始化看起来问题不大,初始化效果如下,可以得到卡片的容量
rtt驱动结构
之前写linux驱动,学习rtt的驱动时,多少会带入linux的思维。
rtt的驱动要比linux的简单许多,大概框架相似。
整个系统结构分为三层,应用层,也就是我们的业务层。
第二层时rtt提供的中间层,虚拟文件驱动层。
第三层是针对具体硬件的硬件驱动层。
业务层直接调用虚拟驱动层,虚拟驱动层通过回调函数方式操纵硬件驱动代码了。
代码的文件结构如下图
application是存放应用层代码的文件夹。
rt-thread目录存放虚拟文件系统接口
libraries存放硬件驱动代码和厂商的bsp等支持代码。
调用官方的pdl接口导致硬件崩溃,对英飞凌的mcu了解不深,暂不知如何调查,借鉴群里大佬Vandoul的sdhc驱动代码,测试了一下接口。
接口dfs_filesystem_get_partition 有一个小bug,sd卡是64gb容量的卡片,格式化为ntfs格式,读出的分区表解析到的容量错误,如下图所示。
代码参考了vandoul大佬的代码,删除了一些异常判断等代码。
提供两个接口 sdrd 和sdwt,仅是直接测试sd卡存储空间的读写,不涉及到文件系统的挂载。
sdrd 带一个参数,读取地址
sdwt带两个参数,第一个是地址,第一个是数值
下图是命令使用效果。
全部0条评论
快来发表一下你的评论吧 !