开发板:K210 AIRV R3版 widora
开发环境:kendryte IDE 官方的
必须的参考文档:Standalone SDK编程指南v0.5.0,以及widora的原理图
(一) 新建文件夹 08my_code_tfcard
要用到SD CARD或者TF CARD 我这边 是TF卡 你那边如果用SD卡也是一样的
格式化TF卡为fat32格式的 已经是fat32格式的就不用管
放2首歌,2张图,2个文档, 目前还不知道中文影响不影响,先这样就行
老规矩 礼物 + 地球
实例-> 搜索->选择开发-> 下载, 保存到刚才新建的文件夹中
安装依赖
清理 + 构建
环境搭建完毕, 下面修改代码
(二) 修改代码
先看原理图
TF_CS -> IO29
TF_MOSI-> IO28
TF_CLK-> IO27
TF_MISO -> IO26
config -> device 那边绑定引脚
先绑定TF_CLK-> IO27和TF_CS -> IO29
下面看主函数 还有引脚没配置 暂时先看看代码怎么改
圈住的3个是设置CPU频率, 初始化中断 和 开全局中断的 不用分析
直接看sdcard_init就行
就这一句才有用的 点进去看看
F12跳转, ALT+左键 返回上一步
进入sd_lowlevel_init() 看看
这里有 IO7作为输出 暂时不知道什么作用的,先不管,后面有用再回来改
下面的是配置了SPI0,速率200K
选中片选端,莫非那个TF_CS -> IO29是配置这个引脚的?
那就把IO29配给这个
这个非常重要
SPI在第16章
spi_init(SPI_DEVICE_INDEX, SPI_WORK_MODE_0, SPI_FF_STANDARD, 8, 0);
用了SPI0为主设备, 模式0,SPI_FF_STANDARD为标准3线,单次发8位, 大小端0是小端
重新把TF_CS -> IO29 分配给SS3
这边也绑定以下引脚
TF_MOSI-> IO28
TF_MISO -> IO26
貌似其中的GPIOHS的 CS信号是没用到的
其他的配置不用看
这里是将SPI配置为10M速率 前面是200K
清理 + 构建 + 下载看看有没有效果
打开串口 选择串口 连接 按下开发板上的复位
已经读到我的SD卡了
sd init =0 说明 初始化SD卡成功(说明读到卡了)
后面的是SD卡容量32G 和 区块大小512
断电开发板 把TF卡拔出来 拿读卡器插到电脑上
说明能正常写入到SD卡中了
安全退出U盘, 装回开发板 重新上电
打开回串口 分享下文件系统参数
上面文件系统读到了我TF卡的文件名 , 中文显示乱码,英文正常显示,但我不管他
打开cannan/test.txt的文本, 读到了1024个字节, 然后把64个字节打样了出来, 最后再入了1024个A,
-------------------------------------------------------------------------------------------------------------------------------
这说明了我们的读写SD卡是没问题的
总结一下这里的SD卡SPI模式
原理图的SPI是4线的,但实际上我们配置的时候 只有配置了3线的SPI 而不是使用4线的
如果修改4线的,需要把spi_receive_data_standard 这些SPI接发的函数 改为
这边配置的对应引脚为
TF_CS -> IO29
TF_MOSI-> IO28
TF_CLK-> IO27
TF_MISO -> IO26
这个GPIOHS高速引脚没用到
我把GPIO删了之后也是正常工作的
我拿读卡器吧cann那个文件夹删了之后重新插入 复位
会显示读取txt文件内容错误 这是正常的,因为他是在最后一个才写入
我们再按下复位
就正常显示了
TF卡可以热插拔 就是当U盘用就行
SD卡具体配置流程我是不懂的, 我只会用,知道怎么修改就行, 这节的TF/SD卡移植完毕,下次再见
因为main.c代码没有修改 所以不贴代码了
主要是在SDCARD.C那边修改的
所以这次放个连接下载
链接:https://pan.baidu.com/s/1v3IbitrwVWPVlWrfx8N9xw
提取码:x2rr
想了下 虽然我不会文件系统,但也要学一学的
这边是初始化文件系统,然后把0:那边给绑定上找到的SD卡盘符,找到了才输出status = 0(OK);
这边是把SD/TF卡根目录的文件名打印出来,直到打印到最后一个,再关闭根目录 不读了
然后这边定义了一个文件系统 叫 file
dir就是 文件名
mkdir学过linux都知道是创建一个文件,名字就叫dir对应的指针(指向了"cannan"这个字符串)
(如果有了 就返回err错误 说明已经有了)
我这边修改了一下,把文件夹改为我的CSDN名称
这边是遍历了txt文件,看看里面藏有多少个字符(好像是以EOF为结束符的)
然后用open 打开这个 path 字符串的文件 权限为读,读到的东西给file文件系统(FIL file;)
用了80个char缓存 , 下面的f_read 就是读前64个, v_ret_len指向读的第几个字符
最后再f_close关闭文件, (有open必须要有close,要不然会挂彩内存不足)
这边打开了文件系统 打开权限是 修改(创建)+写
准备了1024个数据 等下写入到读到的path路径(这里是txt文件)中
然后开写 写完就关文件(有open 必须写close 要不然泄漏)
我这边小改了一下 测试
注意ascii码好像是0~255,127之前是有东西的,后面不同标准有些有,有些没有,我这里用127之前是肯定有东西的
一条龙走起
先打开串口
清理 +构建 +下载
我靠, 这尼玛的给我创建了UTF-16去了不管了,这期就这样
不行 我再改改
再一条龙看看
还是不对劲 不过我不改了 就这样吧
下次再见
链接:https://pan.baidu.com/s/1roaFbSgv4uDA_Jq7JuLdSg
提取码:01hn