|
本帖最后由 熊家余 于 2022-11-11 12:02 编辑
一.前言 今天有兴趣基于T5L迪文屏开源一个比较实用的功能,对于用户而言,我们大家都知道T5L屏默认情况下是不支持外部U盘和SD卡的,但你可以通过迪文厂家给你定制的方式来实现这样的功能,前提是你的产品得有量,否则不太划算,好,那我们今天就自己基于T5L迪文屏来实现一个这样的功能,程序是采用C51开发的。
核心原理是采用了一颗ch376s或者ch376t的驱动芯片,这颗芯片是国内生产的,它内置了各种U盘,SD卡等协议栈,它支持UART串口, SPI, 并口等三种通信方式,而我们考虑到读写速度和IO引脚数量的影响,我们迪文屏就采用SPI接口来驱动这个颗芯片,大家可以直接从某宝上买到ch376的硬件模块,然后用飞线的方式连接到迪文屏的IO引脚上.
ch376t硬件模块如下图所示:
此模块可以同时驱动U盘和Micro SD卡,但是得注意U盘或者SD卡的文件系统要为FAT系列的.
然后此模式的硬件原理图如下图所示:
然后关于ch376芯片的数据手册和开发文档以及原理图我都给大家放在了资源文件夹下,如下图所示:
二.硬件连线
sbit IS_SD_NO_EXIST = P2^1; //检测SD卡是否插入的引脚
sbit SPI_INT = P2^2; //中断通知引脚,也是用于检测U盘是否插入的引脚
sbit SPI_RST = P2^3; //芯片的复位引脚
sbit SPI_MISO = P2^4; //SPI的MISO引脚
sbit SPI_MOSI = P2^5; //SPI的MOSI引脚
sbit SPI_SCK = P2^6; //SPI的SCK引脚
sbit SPI_CS = P2^7; //SPI的CS片选引脚
按照上述的引脚定义,用杜邦线连接ch376模块上的排针到迪文屏上,连接后的实物效果大致如下图所示:
上图中所用的迪文屏为EK043开发板
三.C51项目工程
对于ch376芯片的核心驱动代码,已经被我高度封装,放在了HARDWARE/CH376文件夹下,驱动代码比较复杂的,没有特殊需求不要去改动,如下图所示:
其中spi.c和spi.h为通信接口驱动,而ch376.c和ch376.h为文件操作的驱动,在ch376文件中,总共有20个函数,如下图所示:
好,有了驱动代码之后,我们接着来做一个对U盘和SD卡进行读写文件的操作,大致功能如下:
1.支持实时监测U盘和SD卡的插拔识别动作,检测到插入动作之后,会在迪文屏上面显示相应的图标
2.支持对U盘进行创建文件并写入数据
3.支持对U盘进行读取文件内容,并显示到迪文屏上
4.支持对SD卡进行创建文件并写入数据
5.支持对SD卡进行读取文件内容,并显示到迪文屏上
检测插拔动作的代码如下:
//USB插拔检测
if(ch376s_int_sta==0)
{
res = ch376s_read_dat(READ_TIMEOUT);
if(res==USB_INT_CONNECT||res==USB_INT_DISCONNECT)
{
res = (res==USB_INT_CONNECT);
sys_write_vp(START_WIN_USB_VP,(u8*)&res,1);
}
}
//SD卡检测
if(is_sd_check)
{
is_sd_check = 0;
res = !IS_SD_NO_EXIST;
sys_write_vp(START_WIN_SD_VP,(u8*)&res,1);
}
读取文件并显示到迪文屏上的代码如下:
res = ch376s_init(mode);
if(res==0)
{
res = ch376s_open_path("\\DWIN\\XJY2.TXT",0xff);
if(res==0)
{
ch376s_read_file(common_buf,sizeof(common_buf)-2,&btn_val);
common_buf[btn_val] = 0;
common_buf[btn_val+1] = 0;
}
ch376s_close_file(1);
}
//显示读取的内容
if(res==0)
sys_write_vp(START_WIN_READ_VP,common_buf,btn_val/2+2);
res = (res==0?2:1);
sys_write_vp(START_WIN_TIP_VP,(u8*)&res,1);
创建文件并写入数据的代码如下:
sys_read_vp(START_WIN_WRITE_VP,common_buf,sizeof(common_buf));
for(res=0;res<sizeof(common_buf);res++)
{
if(common_buf[res]==0xff)
{
common_buf[res] = 0;
break;
}
}
res = ch376s_init(mode);
if(res==0)
{
res = ch376s_create_file("\\DWIN\\XJY1.TXT",1);
if(res==0)
res = ch376s_write_file(common_buf,strlen(common_buf),0);
ch376s_close_file(1);
}
res = (res==0?2:1);
sys_write_vp(START_WIN_TIP_VP,(u8*)&res,1);
四.GUI项目工程
核心界面如下图所示:
左上角的那个X和√图标是用来提示写入和读取操作的,此操作是错误还是正确
五.效果截图演示
先准备好要用到的U盘和Micro SD卡(最好也要有一个读卡器)
然后代码下载完成后,迪文屏上电后的默认效果如下图所示:
接着我们插入U盘和SD卡后的界面如下图所示:
可以看到上图的右上角出出现了U盘和SD卡图标
再接着我们点击屏幕上的"读取"和"写入"按钮,读取到的U盘文件内容如下所示:
而我们把U盘插入到电脑后,发现在U盘的/DWIN目录下有一个XJY1.TXT文件,内容为"T5L For USB Or SD"
然后我们点击屏幕上的SD卡单选按钮,可以切换到对SD卡进行操作,效果是相同的,如下图所示:
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|