FastBond2阶段2-基于SD卡的数据存储和检索
SD卡(Secure Digital Card)是一种常用的可移动存储设备,具有较大的存储容量和广泛的应用领域。在嵌入式系统中,使用SD卡可以方便地进行数据记录、存储、和检索。
标签
PCB设计
RP2040
FastBond2阶段2
ddfgh
更新2023-08-08
416

一、前言

      在FastBond2阶段1中,通过视频以及文档的方式展示了Scheme-it绘制的原理图,介绍了电路的结构以及所用到规定厂家的芯片。

      FastBond2阶段1链接:FastBond2阶段1-基于SD卡的数据存储与检索

      本文将介绍使用Kicad绘制原理图和PCB,以及成品的功能测试和程序的主要说明。

二、原理图及PCB设计

      本项目在阶段1绘制的原理图以及框图都是通过Scheme-it绘制的,链接如下。

      原理图链接:https://www.digikey.cn/schemeit/project/sd-card-2023-07-20-1543-7ba9362455694cc4a617c301bc13dfd1

     系统框图链接:https://www.digikey.cn/schemeit/project/sd-框图-2023-07-20-1546-cbcf9cf2e4b04ff6b75376fbfcebeec2

   

      如系统框图所示,由MCU为NCP380LSN05AAT1G供电,NCP380LSN05AAT1G是一个固定/可调限流开关,当输出负载超过限流阈值或出现短路时,该器件通过切换到恒流调节模式将输出电流限制到所需的水平。之后NCP380LSN05AAT1G为SD卡供电,提供稳定的电流。SD卡与MCU通过SPI接口连接以此来进行数据传输。芯片采用RP2040,RP2040是由Raspberry Pi设计的微控制器芯片,可以通过micropython进行编程。

      

      NCP380LSN05AAT1G为一款高边配电开关,专为可能遇到重容性负载和短路的应用而设计。

NCP380LSN05AAT1G的部分各项特性:

  • 工作电压:2.5V-5.5V
  • 75mΩ 高边MOSFET
  • 反向电压保护
  • 温度范围界限:-40℃ ~ 125℃
  • 使能引脚EN

Kicad设计的原理图如下图所示。

Fruw_3y1I2zYgtTysfqh1VUGPiZv

      Kicad绘制出原理图后,通过关联封装等操作就可导入到PCB工程中,再通过布局布线就可完成PCB设计,PCB设计如下图所示。

FlsYc1neJ9ft0ypmqdVeUgJm42ke

三、成品功能测试

成品如下图所示。

FqmhFEp-lNP3GWlnzCqCffOx-5Hr

12指神探与SD拓展版连接图如下所示。

Fsx_yuH8cAJRxwq5JcMR7b-gb_jj

      下面在Thonny中用micropython编程实现读写操作,进行功能验证。

FqFH_g0QnbkVWYOm4I_rG7fPdR3-

      通过使用FAT结构的虚拟文件系统,将sd卡的目录成功挂载到虚拟文件系统中,如上图所示。

FtinF0FNipbKUukJYcopZjBR61MnFg_omwV3ZGUmy_Gzm-ERw96w6nSK

在sd中创建了一个fastbond.txt的文件,并进行读写操作,同时可以在目录中找到fastbond.txt这个文件,如上图所示。

四、程序说明

主函数如下图所示。

import machine
import sdcard
import os


def sdtest():
    
    cs = machine.Pin(21, machine.Pin.OUT)

    spi = machine.SPI(0,
                      baudrate=1000000,
                      polarity=0,
                      phase=0,
                      bits=8,
                      firstbit=machine.SPI.MSB,
                      sck=machine.Pin(22),
                      mosi=machine.Pin(23),
                      miso=machine.Pin(20))
    sd = sdcard.SDCard(spi, cs)
    vfs = os.VfsFat(sd)
    os.mount(vfs, "/sd")
    print("Filesystem check")
    print(os.listdir("/sd"))

    line = "eetree\n"
    lines = line * 200  
    short = "1234567890\n"

    fn = "/sd/rats.txt"
    print()
    print("Multiple block read/write")
    with open(fn, "w") as f:
        n = f.write(lines)
        print(n, "bytes written")
        n = f.write(short)
        print(n, "bytes written")
        n = f.write(lines)
        print(n, "bytes written")

    with open(fn, "r") as f:
        result1 = f.read()
        print(len(result1), "bytes read")

    print()
    print("Verifying data read back")
    success = True
    if result1 == "".join((lines, short, lines)):
        print("file Pass")
    else:
        print("file Fail")
        success = False
    print()
    print("Tests", "passed" if success else "failed")
    
if __name__ == '__main__':
    sdtest()

 

      首先,进行spi0的初始化,将spi以及cs连接到sdcard类中,之后挂在sd卡目录,这样就完成了初始操作。下面在/sd目录下创建一个rat.txt文件,之后将一系列字符串写入,将读出的数据进行比对,结果如下图所示。

FmnX6_9t_DUeImeLqOiQK0O2hvDN

      首先,写入了“eetree\n”字符串200次,在UFT-8的编码中,1个英文或数字占1个字节,“\n”占1个字节,因此写入7*200个字节,之后写入“1234567890\n”占11个字节,再次写入“eetree\n”字符串200次,总计2811个字节,可以看到验证正确,证明sd卡读写操作无误。

      sd卡的初始化以及通过SPI读和写操作在视频中讲解。

 

五、活动总结

      通过FastBond活动,增强了我的动手能力,写文档以及语言表达的能力,使我明白了sd卡的底层逻辑和SPI的应用。虽然作品比较粗糙,但我还是会尽力完善,提高自己的水平。

附件下载
代码.rar
SD.rar
团队介绍
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号