这是大三下学期EDA实训的内容,设计制作了一个简易的U盘。
主要涉及STM32单片机、W25Q128闪存芯片、电路板绘制、文件系统移植等内容,发布出来供大家参考。
仅供学习交流使用,实验步骤仅供参考
转载请注明原文链接:https://blog.csdn.net/ZHJ123CSDN/article/details/107441980
Copyright © 2020 ZhangHoujin
在日常生活中,U盘作为存储介质非常常见。U盘是一种使用USB接口连接计算机,并通过闪存进行数据存储的小型便携存储设备。本次实验将使用STM32单片机,配合W25Q128闪存芯片,绘制电路板并移植文件系统,制作一个简易的U盘存储介质。制作的电路板实物如下图1.1所示。
本次实验以STM32F103作为主控芯片,以W25Q128作为Flash闪存芯片。主控芯片与闪存之间通过SPI方式进行数据通信。向芯片中移植FAT文件系统,可以将数据以文件的形式进行存储,实现简易的U盘功能。
SPI协议是由摩托罗拉公司提出的通讯协议,即串行外围设备接口,是一种高速全双工的通信总线。它的通讯速率较高,被广泛地使用在ADC、LCD等设备与MCU间通信的场合。SPI协议使用三条总线及片选线实现通信,三条总线分别为SCK、MOSI、MISO,片选线为CS ,它们的作用介绍如下。
使用SPI通信方式可以很方便地在Flash芯片上进行数据读写,但是像这样的直接存储数据会带来很大不便。如难以记录有效数据的位置,难以确定存储介质的剩余空间,以及难以确定以何种格式来解读数据等等。
更为高效的存储方式被称为文件系统,它是为了存储和管理数据,而在存储介质中建立的一种组织结构,这些结构包括操作系统引导区、目录和文件。常见的Windows系统下的文件系统格式包括FAT32、NTFS、exFAT。在使用文件系统前,要先对存储介质进行格式化。格式化要先擦除原来内容,在存储介质上新建一个文件分配表和目录,文件系统由此可以记录数据存放的物理地址,剩余空间等信息。
由于文件系统的存在,使我们在存取数据时不再是简单地向某物理地址直接读写,而是要遵循它的读写格式。本次实验通过在芯片中移植FAT文件系统,可以实现对文件的高效存储。
本次实验的Flash闪存芯片选用W25Q128JVSIQTR芯片,其容量为16MB。芯片内部分为256个块,每个块大小为64K字节;每个块又分为16个扇区,每个扇区4K字节。W25Q128 的最少擦除单位为一个扇区,也就是每次必须擦除 4K 个字节。其硬件连接如下图2.1所示。
如上图所示,W25Q128封装的CS引脚是芯片的片选信号线,片选线低电平有效,所以外接了一个上拉电阻将电平拉高;DO引脚是芯片的MIOS主机输入线,主控芯片从这条线上读取数据;WP是写保护引脚,外接电源表示关闭写保护,开启数据写入使能;HOLD引脚是芯片的数据暂停引脚,低电平时会暂停数据传输,因此外接了一个高电平电源;CLK引脚是芯片的时钟信号线,用来与主控芯片保持通信频率;DI引脚是芯片的MOSI从设备输入线,主设备在该线将数据输出,从设备在该线接收数据。
电脑的USB接口一般输出电压是5V,而芯片工作电压在3.3V左右,因此需要使用稳压芯片将5V的输入电压转换为3.3V的输出电压。本次实验中使用的稳压芯片是XC6206P332MR,如下图所示。
PCB生产的具体工作流程为:开料→钻孔→沉铜→图形转移→图形电镀→退膜→蚀刻→绿油阻焊层→添加丝印层→镀金手指→镀锡层→成型→测试→终检→包装寄送。
由于需要向工厂投板,所以直接使用工厂的封装库会方便些。直接去嘉立创的码云仓库里查找封装文件即可。
选择第一个 嘉立创SMT/JLCSMT_LIB 可贴片元器件基础库,下载ZIP压缩包。
将下载的ZIP文件解压,即可获得嘉立创的SMT贴片封装库。
在Altium Designer软件中,新建一个PCB工程。工程模板选择默认,工程名称设置为 USB_SPI_Flash
。
为工程添加一个原理图文件。
将该原理图命名为 USB_SPI_Flash.SchDoc
并保存。
在软件设置界面打开“已安装的元件库”界面,选择从文件安装封装库。
将之前下载的嘉立创封装导入到软件中。选中电容、晶振、MCU、LDO和电阻的封装,点击打开即可。或者直接选择 Miscellaneous Devices LC.IntLib
文件。以 IntLib
作为扩展名的文件是AD中的集成封装库,其中包含了原理图库和PCB封装库,所以只引入这一个库文件也可以。
导入完成后的元件库如下图3.8所示。
接下来分别绘制各个模块的原理图。我直接使用了老师给的原理图,将该原理图导入到工程中,如下图所示。
接下来尝试使用金手指的USB接口,需要将原有的USB插头封装替换成自己绘制的金手指封装。首先添加一个PCB封装库,用于绘制金手指的原理图和PCB封装,如下图3.10所示。
首先绘制原理图,原理图封装直接使用了老师提供的图。
四脚排针的原理图也使用了老师给的原理图。
接下来绘制PCB封装,首先添加一个PCB库文件。
将四脚排针的封装添加进去,如下图3.14所示。
本次我想尝试使用金手指的封装,所以需要自己绘制一下USB接口的封装。原理图就直接使用老师给的原理图,但封装需要自己绘制,如下图3.15所示。
PCB需要较严格的尺寸要求,我是用卡尺测量的实际USB接口尺寸,根据实际的金手指画出来的。另外需要注意PCB和原理图的引脚需要一一对应。搜集USB接口的引脚图,可以找到USB每个脚位所对应的实际接口。如下图3.16所示。
根据上图2.16所示的引脚脚位,可以设置PCB封装中的脚位与原理图对应。
PCB绘制完成后,需要将原理图和PCB联系起来。在原理图页面点击 Add FootPrint
添加封装。
添加完成过后,两个原件的封装就绘制完成了。将原理图中的这两个原件替换成自己绘制的原件就可以了。
使用软件工具将所有原件全部重新编号。在菜单栏的工具->注释选项中,找到注释原理图选项。
在该界面,首先将所有已注释的内容清空。
选择注释顺序为 Across Then Down
,依次更新和执行更改。验证更改并执行,将原件全部重新编号。
原理图绘制完成后,对原理图进行编译。
编译结果如下。
编译警告说 P7-2
引脚没有驱动源,双击看一下具体位置。
是因为芯片设计时,此引脚需要有输入的驱动信号,而现在绘制的原理图直接接地了,没有驱动信号所以会产生警告。该警告可以忽略。
原理图绘制完成后就可以绘制PCB了。新建一个PCB文件,将其命名为 USB_SPI_Flash.PcbDoc
。
按照实验要求,重新定义PCB的板子形状。可以在菜单栏的编辑选项中,找到设置原点选项,将原点重新设置一下。
切换到机械层,绘制矩形的边框。首先绘制一条直线,然后双击设置它的长度。
绘制一个48mm × 25mm
的矩形边框,如下图3.28所示。
将该矩形框选中,重新定义板子形状。
完成之后的板子形状如下图3.30所示。
在原理图界面点击设计->更新PCB文件,将原件导入到PCB中。
点击验证更改可以对原件的封装进行验证。
如果此时出现了上图的报错信息,说明原件的PCB封装没有找到。这些封装是嘉立创提供的封装,所以只需要将对应的封装文件导入进来就可以了。
导入完成后,依次点击验证更改和执行更改,原件就导入到PCB文件中了。
导入到PCB文件中的效果如下图所示。
接下来将原件依次排布在PCB板子上。
可以根据要求重新绘制一下板子形状,如下图3.36所示。
在原件位置固定后,可以开始进行布线。首先设置布线规则。
布线之前可以使用对齐工具,将相同行列的原件对齐。
之后可以自己布线了,顶层布线初步完成后的样式如下:
有些线在顶层铺不开了,需要打过孔到底层去布线。首先要设置一下过孔的大小。孔径设置为 0.5mm
,外层直径设为 0.7mm
。
设置过孔孔径完成后,可以进行打孔等操作。在PCB背面布线,初步布线效果如下图3.42所示。
布线完成后,需要整体看一下布线效果,对部分线束进行修改。修改完成过后的大体布线效果如下图3.43所示。
为了防止在机械制板的时候,焊盘或过孔因承受钻孔的压力而与铜膜导线在连接处断裂,因此连接处需要加宽铜膜导线来避免此种情况发生。补泪滴后的连接处会变得比较光滑,不易因残留化学药剂而导致对铜膜导线的腐蚀。
在菜单栏的工具->泪滴选项中,可以设置泪滴的添加方式。
补完泪滴的PCB效果如下图3.45所示。
连线完成后,进行铺铜。首先铺底层的GND层,并勾选移除死铜选项。
底层覆铜效果如下图3.47所示。
正面覆铜效果如下图3.48所示。
覆铜完成后,需要进行DRC检查。
第一次DRC检查的结果如下图3.50所示。
具体是有两方面的问题:
第一个是焊盘之间的间距,有些地方超过了0.254mm。另一个是丝印到焊盘之间的间距,有些地方也小于了0.254mm。
接下来修改DRC检查的规则,如下图3.52所示。
第二次DRC检查:
将检查的约束条件去除一些,再次运行DRC检查。
此时检查的结果就不存在错误了。
首先添加一个学校的校徽,首先运行AD脚本,执行 RunConverterScript
将BMP图片转换为丝印层图片。
在底层丝印层添加这个图片,转换过程如下图3.55所示。
将转换完成的丝印复制粘贴到底层丝印层即可。
但是考虑到本次的PCB板比较小,如果印上校徽可能根本看不清字,所以我就将底层的校徽丝印去掉了。经过调整,最终的背面丝印如下图3.57所示。
丝印做完之后,需要再进行依次DRC检查,防止丝印与焊盘靠得太近。
第三次DRC检查结果如下:
可以看到,DRC检查已通过。
PCB最终效果如下图3.59所示。
三维模拟视图如下图所示。
本次PCB实训使用嘉立创打板,首先将PCB源文件复制一份并压缩至RAR格式。
在嘉立创助手上传压缩文件。
上传完成后,可以查看文件解析结果。
在下单页面填写相关选项,点击提交订单即可。
因为这块板子是我的第二次设计,前几天已经投过一次板了,我觉得当时做的板子布局不太好,所以就重做了一次。第一次投稿时选用了SMT贴片,这次投稿就不再用SMT了。两次投板的订单列表如下图3.66所示。
第一次投板时选用了工厂的SMT贴片,其操作步骤如下。
首先需要在嘉立创的SMT订单页面上传自己的PCB源文件,由嘉立创自动生成对应的BOM表和坐标文件。
上传完成后,点击下一步,可以看到原件的BOM表,如下图3.68所示。检查原件的BOM表与自己PCB所用的原件是否相同,检查完毕后可以点击确认。
确认元件清单无误后,可以看到PCB的模拟贴片图。如下图3.69所示。
上面是我第一次画的PCB贴片图,当时因为时间比较紧张,所以画得比较糟糕,原件也不整齐,过孔也比较多。元件贴片图检查完成之后,就可以对整个SMT订单进行确认了。
确认订单前可以查看具体的项目费用情况。
整个订单包括PCB打板订单和SMT贴片订单,确认完订单并提交付款后,就只需等待发货了。
本次实验根据原理图绘制了相应的PCB电路,并将PCB文件投稿至工厂,进行了工厂打板和SMT贴片。本次共投出了两版电路板,第一版使用了SMT贴片,第二版没有贴片。收到板子后,可以尝试烧录程序实现U盘功能。
在收到PCB样板后,首先需要对PCB样板的线路进行检查,可以用万用表测量线路是否导通,是否存在短路等问题。检测完成后,由于后续需要往里面烧程序,所以要把缺少的排针先焊上。焊接完成后如下图4.1所示。
本次使用的是金手指的封装,但由于经费问题没有在金手指处做沉金处理,所以现在金手指位置是一层白色的锡。当我尝试将PCB插入USB接口时,发现PCB金手指位置的尺寸被设计得太大了,USB接口插不进去,所以又打磨了一下PCB。
打磨完成后,将PCB插入USB扩展坞进行测试。测试结果如下图4.2所示。红色的LED因为连接到了稳压管的输出端,所以一插上就亮了。
此时在电脑的设备管理器中可以看到该设备为 Unknown USB Device
未知的USB设备,如下图4.3所示。
接入电源时,可以测试一下PCB的供电是否正常。我主要测试了一下稳压管的输入和输出电压,输入的5V是USB接口的电压,输出测量的是3.28V,也基本上正常。如下图所示。
另外其他的线路也要进行初步测量,以确保板子能够正常工作。
原理图在设计时使用了PA13和PA14作为预留的程序下载引脚,网络标号标注为SWDIO和SWLCK,说明原理图被设计为用SWD方式下载程序。使用SWD方式下载程序可以节省端口占用,它只需要SWDIO、SWCLK、VCC和GND四条引脚就可以了,也就是对应PCB板上预留的四脚排针。
将PCB板上的四脚排针连接到JLink、STLink等仿真器上,再将仿真器连接电脑。老师给我们的工程代码需要在IAR软件中打开,如下图4.6所示。在IAR软件中修改仿真器的配置,编译程序没有错误的话就可以下载了。下载完成后应该就可以将PCB作为U盘使用了。因为我手边没有下载器,所以暂时就不去下载代码了。
工程代码的基本原理是在SMT32与W25Q128闪存芯片之间进行SPI通信,利用SPI通信可以在主设备芯片和闪存之间传递数据。再向芯片中移植一个文件系统,就可以实现像U盘一样的读取文件。
本次EDA实训设计制作了一款基于STM32的简易U盘。绘制了原理图、封装库,绘制了两版PCB电路板并将工程文件投厂生产,最终得到了完整的PCB实验板实物。利用嘉立创的SMT贴片服务,将原件焊接到了电路板上,方便样板测试。同时导出了BOM表,可以自己进行元件的购置。
本次设计是从原理到实践的结合,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,实践是检验真理的唯一标准。我们电子专业的学习更是如此,不仅要有丰富的理论知识,还要有很强的动手能力,这是工科学生的特点。只有理论与实践并重,我们的专业水平才能提高,这就是我在这次课程设计中的最大收获。
电路板工程文件及实验代码
GitHub:https://github.com/ZHJ0125/USB_SPI_Flash
Gitee:https://gitee.com/zhj0125/USB_SPI_Flash