猪百岁 发表于 2021-3-11 10:16:05

K210入门-裸机开发(八)之TFCard修改(SPI协议)与文件系统说明

## K210入门-裸机开发(八)之TFCard修改(SPI协议)与文件系统说明

**开发板:K210 AIRV R3版 widora**

**开发环境:kendryte IDE 官方的**

**必须的参考文档:Standalone SDK编程指南v0.5.0,以及widora的原理图**

## 1.新建文件夹 08my_code_tfcard



要用到SD CARD或者TF CARD 我这边 是TF卡 你那边如果用SD卡也是一样的

格式化TF卡为fat32格式的 已经是fat32格式的就不用管



放2首歌,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



版权声明:本文为CSDN博主「jwdeng1995」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jwdeng1995/article/details/108058266
页: [1]
查看完整版本: K210入门-裸机开发(八)之TFCard修改(SPI协议)与文件系统说明