ADI Blackfin DSP处理器-BF533的开发详解28:SD卡的文件系统(含源码)

news2024/9/22 10:30:57

硬件准备

ADSP-EDU-BF533:BF533开发板
AD-HP530ICE:ADI DSP仿真器

软件准备

Visual DSP++软件

硬件链接

在这里插入图片描述

在这里插入图片描述

功能介绍

代码实现了通过文件系统读取 SD 卡上的文件,并对文件和文件夹做读、写、删除、建立、文件列表、文件搜索等功能,代码以将文件系统和 SD 卡驱动挂载在一起,直接运行代码可对格式化过的 SD 卡进行文件建立等操作。

编译运行代码,代码会对 SD 卡根目录下的文件进行文件列表,然后将第一个文件进行复制,并保存为“2.txt”,通过计算机可以查阅复制的文件。

代码使用说明

工程下有两个文件夹:bf53x_sd_mmc_lib 和 fat32_lib 。 这两个文件夹分别是 SD 卡驱动的库源代码和文件系统的库源代码,直接运行这两个文件夹下的工程,会在各自的 DEBUG 文件夹下生成*.dlb 文件,这个文件就是库文
件。在工程文件夹的根目录下,已经有这两个库文件,这两个库文件被 BF53x_SD_FS.dpj 工程调用,实现文件系统功能。

SD 卡速度的配置:
void MMC_HardwareInitial(void)
{
*pFIO_DIR = PF2;
*pFIO_FLAG_S = PF2;
*pSPI_FLG = FLS2;
*pSPI_BAUD = 4;
*pSPI_CTL = 0x0000;
*pSPI_CTL = 0x0001 | MSTR ;
*pSPI_CTL = (*pSPI_CTL | SPE);
}

修改*pSPI_BAUD 的值进行配置,当为 2 时,速度最快,配置值不能小于 2。

当使用 SD 卡时,需通过 CPLD 打通 SD 卡链路,配置如下:

*pDEVICE_OE = ~SD_SEL;

文件列表函数:将“/”目录下所有文件和文件夹进行列表,并将文件和文件夹的名称和数量存入指定数组。

scan_files(“/”,file_name,file_count,dir_name,dir_count);

代码调试步骤

  1. 将 SD 卡格式化,并在 SD 卡根目录下存一些.txt 文件。
  2. 将 SD 卡插入开发板的 SD 卡接口,编译并运行代码。
  3. 待代码运行完成后,将 SD 卡插入计算机,查看建立的 2.txt 文件。

调试结果

在 SD 卡根目录下将文件列表的第一个文件行复制并将文件名改为 2.txt。

程序源码

cpu.c

#include <cdefBF533.h>

void Init_SDRAM(void)
{
*pEBIU_SDRRC = 0x00000817;
*pEBIU_SDBCTL = 0x00000013;
*pEBIU_SDGCTL = 0x0091998d;
ssync();
}

void Init_EBIU(void)
{
*pEBIU_AMBCTL0 = 0x7bb07bb0;
*pEBIU_AMBCTL1 = 0xffc07bb0;
*pEBIU_AMGCTL = 0x000f;
}

void Set_PLL(int pmsel,int pssel)
{
int new_PLL_CTL;
*pPLL_DIV = pssel;
asm(“ssync;”);
new_PLL_CTL = (pmsel & 0x3f) << 9;
*pSIC_IWR |= 0xffffffff;
if (new_PLL_CTL != *pPLL_CTL)
{
*pPLL_CTL = new_PLL_CTL;
asm(“ssync;”);
asm(“idle;”);
}
}

diskio.c

#include <cdefBF533.h>
#include “diskio.h”

void MMC_HardwareInitial(void)
{
*pSPI_FLG = FLS2;
*pSPI_BAUD = 550;
*pSPI_CTL = 0x0000;
*pSPI_CTL = 0x0001 | MSTR ;
*pSPI_CTL = (*pSPI_CTL | SPE);
}

DSTATUS disk_initialize ()
{
MMC_HardwareInitial();
MMC_Init();
return 0;
}

DSTATUS disk_shutdown ()
{
return 0;
}
DSTATUS disk_status ()
{
return 0;
}

DRESULT disk_read (BYTE buff, DWORD sect, BYTE cnt)//cnt = sector num
{
while(cnt–){
MMC_read_sector(sect,buff);
sect += 1;
buff += 512;
}
return 0;
}
#ifndef _READONLY
DRESULT disk_write (const BYTE
buff, DWORD sect, BYTE cnt)
{
while(cnt–){
MMC_Write_sector(sect,buff);
sect += 1;
buff += 512;
}
return 0;
}
#endif

main.c

#include <cdefBF533.h>
#include <stdio.h>
#include “ff.h”

FIL infile, outfile;
unsigned char buff[0x1000];
unsigned char file_name[100][12];
unsigned char dir_name[50][12];
int file_count[1];
int dir_count[1];

int main()
{
int i;
FRESULT retval = 0;
WORD lenth;

Set_PLL(16,4);
Init_EBIU();

SD_Enable();	
f_mountdrv();

scan_files("/",file_name,file_count,dir_name,dir_count);	
for(i=0;i<file_count[0];i++)
	printf("find file is :%s\n",file_name[i]);
	
for(i=0;i<dir_count[0];i++)
	printf("find Dir is :%s\n",dir_name[i]);		

retval = f_open(&infile, file_name[1], FA_OPEN_ALWAYS | FA_READ);
if (retval != 0){
	printf("can't open file\n");
	exit(-1);
}
retval = f_open(&outfile, "/2.txt", FA_CREATE_ALWAYS | FA_WRITE);
if (retval != 0){
	printf("can't open file\n");
	exit(-1);
}

f_read(&infile, buff, 0x200000, &lenth);
f_write(&outfile, buff, lenth, &lenth);

f_close(&infile);
f_close(&outfile);

return 0;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/79436.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Pytorch】第 8 章 :实施政策梯度和政策优化

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

Git 客户端::Git Fork 注册版-NEW

Git Fork 是最简单有效的 Windows 客户端之一。许多开发人员正在使用此版本控制程序&#xff0c;它允许您协作处理您的项目。具有类似这样的用户界面的客户端可以使您的工作更轻松。 Fork 的 Fork 界面非常人性化。在右侧的左侧有大量的存储库和分支、标签、来源和藏匿处。此外…

【Pytorch】第 7 章 :深度 Q 网络实战

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

CleanMyMac X4.12.2免费版MAC电脑系统磁盘优化工具

我的 MacBook Pro 只有 256GB 硬盘空间&#xff0c;平时也勉强够用。但最近在升级新版本操作系统 macOS Ventura 13 时发现磁盘空间不够&#xff0c;导致不能升级。对于一个升级强迫症患者来说&#xff0c;任何的小红点都不能忍&#xff0c;更何况是系统升级这种事情。在确定了…

ARM 汇编初始化 SDRAM 详解

一、初始化代码框架介绍&#xff08;函数调用和返回、步骤等&#xff09; SDRAM 初始化使用一个函数 sdram_asm_init &#xff0c;函数在 sdram_init.S 文件中实现&#xff0c;是一个汇编函数。 强调&#xff1a;汇编实现的函数在返回时需要明确使用返回指令&#xff08;mov p…

1561_AURIX_TC275_电源管理以及监控

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) 从这个拓扑图中可以看的出来&#xff0c;AD相关部分的供电以及参考电压都是独立的&#xff0c;而且是来自于外部的。 1. LDO相关的模块有EVR33和EVR13. 2. 1.3V的供电之前只知道是一个内核…

win11:clion + cmake + mingw + glfw

clion & cmake 官网下载安装即可 clion的设置 mingw 链接 版本如下&#xff1a; windows系统只考虑选择x86_64-win32-sjlj和x86_64-win32-seh&#xff0c;区别&#xff1a; sjlj支持32位和64位seh只支持64位&#xff0c;比较新 glfw 官网提供下载&#xff1a;源码、…

[附源码]JAVA毕业设计学生公寓管理系统(系统+LW)

[附源码]JAVA毕业设计学生公寓管理系统&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术…

蜣螂算法(原理)

原文(附文献下载) 1 群体智能优化算法 SI(swarm intelligence)系统的特点是个体间的相互作用促进了智能行为的出现。 SI优化过程的实现主要包括以下两个步骤&#xff1a; 在搜索空间范围内创建一组随机个体在迭代过程中组合、移动或进化这些随机个体。 每种优化算法的区别…

基于java+springmvc+mybatis+jsp+mysql的校园办公室报修管理系统

项目介绍 校园办公室报修管理系统&#xff0c;是基于java编程语言&#xff0c;ssm框架&#xff0c;jsp技术&#xff0c;mysql数据库开发&#xff0c;本系统主要分为用户&#xff0c;教师&#xff0c;管理员&#xff0c;维修员四个角色&#xff0c;其中用户的功能是注册和登陆系…

【多尺度融合:基于深度学习:压缩图像伪像:blocking artifact】

Deep learning-based compressed image artifacts reduction based onmulti-scale image fusion &#xff08;基于多尺度图像融合的基于深度学习的压缩图像伪影减少&#xff09; 在基于块的图像/视频压缩平台中&#xff0c;视觉上明显的压缩伪像之一称为blocking artifact&…

CubeIDE新建工程

使用CubeIDE新建工程 开发流程如图&#xff08;图片来源于b站教程&#xff09;&#xff1a; 1、新建工程 打开CubeIDE&#xff0c;选择文件>新建>STM32Project 软件自己会下载hal库&#xff0c;首次下载可能会有些慢&#xff0c;请耐心等待。 下载完成后&#xff0c;自…

基于java+springmvc+mybatis+jsp+mysql的个人所得税服务系统

项目介绍 随着居民的收入不断提高&#xff0c;个人都需要缴纳一定比例的个人所得税&#xff0c;传统的方式是去税务大厅人工缴纳&#xff0c;为了解决这种人工交税的方式&#xff0c;特此开发了一个在线交税的网站&#xff0c;本系统采用java语言开发&#xff0c;后端采用ssm框…

微服务框架 SpringCloud微服务架构 微服务保护 34 规则持久化 34.2 实现push 模式

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 微服务保护 文章目录微服务框架微服务保护34 规则持久化34.2 实现push 模式34.2.1 规则管理模式 - 实现push 模式34 规则持久化 34.2 实现p…

【LeetCode每日一题:1827. 最少操作使数组递增~~~贪心遍历模拟】

题目描述 给你一个整数数组 nums &#xff08;下标从 0 开始&#xff09;。每一次操作中&#xff0c;你可以选择数组中一个元素&#xff0c;并将它增加 1 。 比方说&#xff0c;如果 nums [1,2,3] &#xff0c;你可以选择增加 nums[1] 得到 nums [1,3,3] 。 请你返回使 num…

Opencv中关于特征点匹配定位的问题(一)

Opencv中关于特征点匹配定位的问题回顾定位回顾 在我们检测到特征点之后&#xff0c;通常进行特征点的匹配。 首先我们先回顾一下使用Brute-Force匹配器来进行匹配。 import cv2 import numpy as np import matplotlib.pyplot as plt#读取图片 imgcv2.imread(./newmm.png) te…

【图像边缘检测】拉普拉斯算法图像边缘检测与增强【含Matlab源码 456期】

⛄一、拉普拉斯图像增强算法优化简介 图像Laplace变换是基本图像增强算法,原始图像通过Laplace变化后会增强图像中灰度突变处的对比度,使图像中的细节部分得到增强并保留了图像的背景色调,图像的细节比原始图像更加清晰。基于Laplace的图像增强已经成为图像锐化处理的基本工具…

SpringBoot快速入门

SpringBoot快速入门1.Spring Boot是什么2.IDEA创建Spring Boot项目3.测试业务4.application.properties的基本配置1.Spring Boot是什么 众所周知 Spring 应用需要进行大量的配置&#xff0c;各种 XML 配置和注解配置让人眼花缭乱&#xff0c;且极容易出错&#xff0c;因此 Spr…

ADI Blackfin DSP处理器-BF533的开发详解30:鼠标的光标显示应用(含源代码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 触摸屏的硬件设计原理图 功能介绍 代码实现了读取触摸屏坐标&#xff0c;并将触摸屏坐标换算为液晶屏的显示坐标&#xff0c;将光标数据叠加到背…

我的开源项目:文件快递柜-匿名口令分享文本,文件-像拿快递一样取文件

口令传送箱 解决问题 很多时候&#xff0c;我们都想将一些文件或文本传送给别人&#xff0c;或者跨端传递一些信息&#xff0c;但是我们又不想为了分享&#xff0c;而去下载一些七里八里的软件&#xff0c;这时候&#xff0c;我们就可以使用口令传送箱&#xff0c;像拿快递一…