一、前言
在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设计的原理图如下图所示。
Kicad绘制出原理图后,通过关联封装等操作就可导入到PCB工程中,再通过布局布线就可完成PCB设计,PCB设计如下图所示。
三、成品功能测试
成品如下图所示。
12指神探与SD拓展版连接图如下所示。
下面在Thonny中用micropython编程实现读写操作,进行功能验证。
通过使用FAT结构的虚拟文件系统,将sd卡的目录成功挂载到虚拟文件系统中,如上图所示。
在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文件,之后将一系列字符串写入,将读出的数据进行比对,结果如下图所示。
首先,写入了“eetree\n”字符串200次,在UFT-8的编码中,1个英文或数字占1个字节,“\n”占1个字节,因此写入7*200个字节,之后写入“1234567890\n”占11个字节,再次写入“eetree\n”字符串200次,总计2811个字节,可以看到验证正确,证明sd卡读写操作无误。
sd卡的初始化以及通过SPI读和写操作在视频中讲解。
五、活动总结
通过FastBond活动,增强了我的动手能力,写文档以及语言表达的能力,使我明白了sd卡的底层逻辑和SPI的应用。虽然作品比较粗糙,但我还是会尽力完善,提高自己的水平。