SD和SDHC和SDXC卡的区别,SD卡2.0和SD卡3.0的区别,以及Linux移植exfat

Multisim仿真电路:(十二)MOS管缓启动电路设计与优化 本文详细介绍了基于Multisim的MOS管缓启动电路设计与优化方法。通过分析米勒平台效应,探讨RC参数选择、多级设计和有源电路等技巧,有效抑制冲击电流并优化开关损耗。文章结合仿真实例,提供实用的设计策略和实际应用注意事项,帮助工程师提升电源管理系统的可靠性。 阅读详情
AI摘要

本文介绍了SD卡、SDHC卡和SDXC卡的区别,包括容量规格和兼容性。SD卡最大2GB,SDHC最大32GB,SDXC最大2TB。SDHC可格式化为FAT32,SDXC只能格式化为exfat。还提到默认Linux内核无exfat驱动,需移植,给出了克隆代码、拷贝及编译驱动的步骤。

1)本章主要讲解各类型SD卡相关知识说明,分享给将要学习或者正在学习SD卡的同学。

2)适用于对C/C++语言有基本的认识,以及对Linux环境有基本的掌握能力。

3)内容属于原创,若转载,请说明出处。

4)本人提供相关问题有偿答疑和技术支持。

SD卡,SDHC卡,SDXC卡区别在于规格不一样,SD卡最大支持2GB容量,SDHC 最大支持32GB容量,SDXC 最大支持2TB(2048GB)容量,支持SDXC卡的数码设备是兼容支持SD卡与SDHC卡的,如果设备只有支持SDHC卡,那么这个设备就不能使用SDXC卡,但兼容SD卡。如果设备只支持SD卡,则不兼容SDXC,SDHC卡

我手里就有两个卡一个是SDHC(16G)一个是SDXC(64G),注意这两种卡是有区别的:

SD卡的速度直接显示在SD卡的正面:

对应于下面的数字:

上面的标识解释:

在实际使用中发现,SDHC可以使用如下命令挂载:

mount -t vfat /dev/mmcblk0p1 /mnt/

但是SDXC却不行:

在格式化的时候发现SDHC可以格式化成FAT32格式,这个格式也是很多ARM开发板上支持的格式,但是SDXC只能格式化成exFAT格式;

因此挂载的时候需要改变挂载的格式:

mount -t exfat /dev/mmcblk0p1 /mnt

但是exfat有版权问题,默认的Linux内核是没有这个驱动支持的(最新的内核好像是支持的);不同的系统需要移植不同的exfat的驱动,如32位和64位的系统不一样:

1)克隆exfat的code:

    git clone https://github.com/arter97/exfat-linux.git

2)将code拷贝到如下:

    cp exfat-linux ../kernel/fs/exfat -rf

3)修改config将驱动编译出来exfat.ko。(默认使用的是64位系统的结构,部分Linux内核使用的是32位的,因此需要修改下变量)

diff --git a/arch/arm/configs/xxx_defconfig b/arch/arm/configs/xxx_defconfig 
index c0ef06c..6a48599 100755
--- a/arch/arm/configs/xxx_defconfig 
+++ b/arch/arm/configs/xxx_defconfig 
@@ -2536,3 +2536,4 @@ CONFIG_SG_POOL=y
CONFIG_ARCH_HAS_SG_CHAIN=y
CONFIG_SBITMAP=y
# CONFIG_VIRTUALIZATION is not set
+CONFIG_EXFAT_FS=m
diff --git a/fs/Kconfig b/fs/Kconfig
index 4bd03a2..6bc9d2f 100644
--- a/fs/Kconfig
+++ b/fs/Kconfig
@@ -243,6 +243,7 @@ source "fs/minix/Kconfig"
source "fs/omfs/Kconfig"
source "fs/hpfs/Kconfig"
source "fs/qnx4/Kconfig"
+source "fs/exfat/Kconfig"
source "fs/qnx6/Kconfig"
source "fs/romfs/Kconfig"
source "fs/pstore/Kconfig"
diff --git a/fs/Makefile b/fs/Makefile
index ed2b632..2a417ff 100644
--- a/fs/Makefile
+++ b/fs/Makefile
@@ -129,3 +129,4 @@ obj-y                += exofs/ # Multiple modules
obj-$(CONFIG_CEPH_FS)        += ceph/
obj-$(CONFIG_PSTORE)        += pstore/
obj-$(CONFIG_EFIVAR_FS)        += efivarfs/
+obj-$(CONFIG_EXFAT_FS)        += exfat/
diff --git a/dir.c b/dir.c
index a54ac92..a2bdce9 100644
--- a/dir.c
+++ b/dir.c
@@ -439,7 +439,7 @@ int exfat_init_dir_entry(struct inode *inode, struct exfat_chain *p_dir,
{
     struct super_block *sb = inode->i_sb;
     struct exfat_sb_info *sbi = EXFAT_SB(sb);
-    struct timespec64 ts = current_time(inode);
+    struct timespec ts = current_time(inode);
     sector_t sector;
     struct exfat_dentry *ep;
     struct buffer_head *bh;
diff --git a/exfat_fs.h b/exfat_fs.h
index 9979639..c4a5d64 100644
--- a/exfat_fs.h
+++ b/exfat_fs.h
@@ -190,9 +190,9 @@ struct exfat_dir_entry {
     unsigned short attr;
     loff_t size;
     unsigned int num_subdirs;
-    struct timespec64 atime;
-    struct timespec64 mtime;
-    struct timespec64 crtime;
+    struct timespec atime;
+    struct timespec mtime;
+    struct timespec crtime;
     struct exfat_dentry_namebuf namebuf;
};
@@ -303,7 +303,7 @@ struct exfat_inode_info {
     struct rw_semaphore truncate_lock;
     struct inode vfs_inode;
     /* File creation time */
-    struct timespec64 i_crtime;
+    struct timespec i_crtime;
};
static inline struct exfat_sb_info *EXFAT_SB(struct super_block *sb)
@@ -530,10 +530,10 @@ void exfat_msg(struct super_block *sb, const char *lv, const char *fmt, ...)
#define exfat_info(sb, fmt, ...)                    \
     exfat_msg(sb, KERN_INFO, fmt, ##__VA_ARGS__)
-void exfat_get_entry_time(struct exfat_sb_info *sbi, struct timespec64 *ts,
+void exfat_get_entry_time(struct exfat_sb_info *sbi, struct timespec *ts,
         u8 tz, __le16 time, __le16 date, u8 time_cs);
-void exfat_truncate_atime(struct timespec64 *ts);
-void exfat_set_entry_time(struct exfat_sb_info *sbi, struct timespec64 *ts,
+void exfat_truncate_atime(struct timespec *ts);
+void exfat_set_entry_time(struct exfat_sb_info *sbi, struct timespec *ts,
         u8 *tz, __le16 *time, __le16 *date, u8 *time_cs);
u16 exfat_calc_chksum16(void *data, int len, u16 chksum, int type);
u32 exfat_calc_chksum32(void *data, int len, u32 chksum, int type);
diff --git a/file.c b/file.c
index 50565d3..aa4b942 100644
--- a/file.c
+++ b/file.c
@@ -150,7 +150,7 @@ int __exfat_truncate(struct inode *inode, loff_t new_size)
     /* update the directory entry */
     if (!evict) {
-        struct timespec64 ts;
+        struct timespec ts;
         struct exfat_dentry *ep, *ep2;
         struct exfat_entry_set_cache *es;
diff --git a/misc.c b/misc.c
index 93e05ac..c528d34 100644
--- a/misc.c
+++ b/misc.c
@@ -64,7 +64,7 @@ void exfat_msg(struct super_block *sb, const char *level, const char *fmt, ...)
#define SECS_PER_MIN    (60)
#define TIMEZONE_SEC(x)    ((x) * 15 * SECS_PER_MIN)
-static void exfat_adjust_tz(struct timespec64 *ts, u8 tz_off)
+static void exfat_adjust_tz(struct timespec *ts, u8 tz_off)
{
     if (tz_off <= 0x3F)
         ts->tv_sec -= TIMEZONE_SEC(tz_off);
@@ -73,7 +73,7 @@ static void exfat_adjust_tz(struct timespec64 *ts, u8 tz_off)
}
/* Convert a EXFAT time/date pair to a UNIX date (seconds since 1 1 70). */
-void exfat_get_entry_time(struct exfat_sb_info *sbi, struct timespec64 *ts,
+void exfat_get_entry_time(struct exfat_sb_info *sbi, struct timespec *ts,
         u8 tz, __le16 time, __le16 date, u8 time_cs)
{
     u16 t = le16_to_cpu(time);
@@ -99,7 +99,7 @@ void exfat_get_entry_time(struct exfat_sb_info *sbi, struct timespec64 *ts,
}
/* Convert linear UNIX date to a EXFAT time/date pair. */
-void exfat_set_entry_time(struct exfat_sb_info *sbi, struct timespec64 *ts,
+void exfat_set_entry_time(struct exfat_sb_info *sbi, struct timespec *ts,
         u8 *tz, __le16 *time, __le16 *date, u8 *time_cs)
{
     struct tm tm;
@@ -129,7 +129,7 @@ void exfat_set_entry_time(struct exfat_sb_info *sbi, struct timespec64 *ts,
  * (There is no 10msIncrement field for access_time unlike create/modify_time)
  * atime also has only a 2-second resolution.
  */
-void exfat_truncate_atime(struct timespec64 *ts)
+void exfat_truncate_atime(struct timespec *ts)
{
     ts->tv_sec = round_down(ts->tv_sec, 2);
     ts->tv_nsec = 0;

insmod exfat.ko:

太空安全卫士:基于YOLOv5的空间态势感知系统(实现轨道碰撞预警与太空环境保护) 做完这个项目,你会发现自己完整走过了“数据采集→标注→模型训练→功能集成→界面开发”的毕设全流程,这不仅是技术能力的证明,更是对“技术守护宇宙安全”这一理念的实践。答辩时,你可以重点讲这几点:系统解决了航天监测的哪些痛点、YOLOv5在太空目标检测中的性能优势、系统未来能怎么优化(比如对接航天监测网络、实现实时轨道预测)。未来,这个系统还能往“更智能”的方向发展:比如结合轨道计算预测碰撞风险、开发移动端APP让天文爱好者参与太空垃圾上报、在航天任务中实现全自动避障决策……想象空间很大。 阅读详情

相关推荐

苹果iOS设备解锁软件:iToolab UnlockGo

iToolab UnlockGo是Mac上一款具有解锁屏幕密码、移除iCloud激活锁、移除Apple ID、关闭FMI、解锁屏幕使用时间和绕过MDM功能的苹果设备解锁工具,UnlockGo只需要几分钟,就能够快速为您解决IOS设备的密码遗忘、设备被禁用、脸部/触控ID不可用、密码已过期等问题! 即时解锁iPhone / iPad的密码 使用iToolab UnlockGo,您可以轻松绕过iPhone密码并获得对该设备的完全访问权限。它适用于以下情况,并且完全支持各种密码。UnlockGo支持轻松删除所有

macxingchendahai的博客 1万+

SDHC和SDXC的区别总结

拆海康威视的执法记录仪,把原配的16G内存卡换成64G内存卡,开机显示存储已满,也就是执法记录仪并未能识别64G内存卡,然后换上32G的内存卡,开机能识别并显示内存卡剩余空间大小。 仔细对比,发现这三张卡除了容量大小的区别,就是标识不一样,16G和32G的内存卡都是SDHC,64G的内存卡是SDXC。 查阅关于SDHC和SDXC这两种类型的内存卡的区别,总结大致如下: SDHC卡的容量范围是2GB...

weixin_43729257的博客 1万+

Ubuntu22.04实战:基于VLLM高效部署Qwen3系列模型并构建Dify智能体

本文详细介绍了在Ubuntu22.04系统上使用VLLM高效部署Qwen3系列模型并集成Dify平台的实战指南。从环境配置、Conda管理到VLLM优化部署,再到Dify智能体构建,提供了全面的技术方案和性能调优建议,帮助开发者快速实现AI模型的高效部署与应用。

weixin_28323057的博客 163

几个概念:SD、SDHC、SDXC、SDIO、MMC

SD是早先的版本的,据说是由MMC演变而来的。最大支持2GB大小容量SDHC是大容量SD卡,也就是SD High Capacity,支持最大32GB大小容量SDXC(SD eXtended Capacity)是去年09年才发布的新标准,支持最大2TB的大小容量SDIO看了一段网上的英文原文是这样说的:An SDIO card is a combination of an SD card and a

zmq5411的专栏 1万+

Frida实战:SSL Pinning绕过技术全解析

本文详细解析了如何使用Frida工具绕过SSL Pinning技术,包括环境搭建、四种实战绕过方案及常见问题排查指南。通过具体代码示例和实战经验,帮助安全研究人员快速掌握SSL Pinning绕过技术,适用于金融类App的安全测试场景。

weixin_42530732的博客 188

离散数学 --- 图论基础 --- 图的同构,通路与回路,可达性与最短通路

同一个图(这里的图是抽象的数学定义)可以有不同的图形表示方法1.重数:两点之间的平行边的个数1.得到 n!的过程,一个图中的一个结点在另一个图中对应的结点有n种可能(黄框中定义的图来讨论),这个对应好后下一个结点有 n - 1 种可能,再下一个有n-2种,直到最后一个为1,所有可能的结果就等于 n * (n - 1) *(n - 2)*....*1 = n!2.虽然说找对应结点很困难,但不是没有规律可循的。比如1.两个相互对应的结点的度数要相同;

qq_51947882的博客 7443

SD和SDHC和SDXC卡的区别是什么

 SD卡,SDHC卡,SDXC卡区别在规格不一样,SD卡最大支持2GB容量,SDHC 最大支持32GB容量,SDXC 最大支持2TB(2048GB)容量,支持SDXC卡的数码设备是兼容支持SD卡与SDHC卡的,如果设备只有支持SDHC卡,那么这个设备就不能使用SDXC卡,但兼容SD卡。如果设备只支持SD卡,则不兼容SDXC,SDHC卡。   SD是早先的版本的,据说是由MMC演变而来的。最大...

fangjiayi86的博客 4940

Halcon 深度学习实战:PCB 缺陷检测模型的 TensorRT/OpenVino 加速推理

本文介绍了如何利用TensorRT和OpenVino对Halcon深度学习模型进行加速优化,以提升PCB缺陷检测系统的实时性能。文章详细阐述了模型加速框架的选择策略(根据硬件选用TensorRT或OpenVino)、优化流程实施(包括混合精度优化和模型导出)以及加速后的推理实现。实验结果表明,优化后的模型体积缩小40%,推理速度提升2-5倍(GPU环境下从79ms降至38ms,CPU环境下从3804ms降至2152ms),同时保持检测精度。通过完整的代码示例展示了从模型加速到实际部署的全流程,为工业视觉场景

LIN943168247的博客 538

闪存卡种类 SD SDHC SDXC SM CF MMC

闪存卡种类 SD SDHC SDXC SM CF MMC 介绍

呆萌君 1221

Python爬虫实战 | 拼多多商品评论采集与深度分析

本文从 API 调用、网页渲染到情感分析与关键词提取,全流程剖析了“拼多多商品评论采集与分析”项目。Scrapy + API 可快速抓取评论;Playwright 可突破 API 限制,抓取完整页面内容;数据清洗 + 分析揭示用户真实反馈;可持续部署、扩展至更多商品 & 时间段;

2201_76125261的博客 1696

openlayers:实现在连续更改时间维度时如何平滑地重新加载层 (附完整源码)

openlayers:实现在连续更改时间维度时如何平滑地重新加载层 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 349

通信控制篇——SD卡数据传输(一)

利用FPGA实现SD卡数据传输——SPI模式。

Yongxiang的博客 6981

Allegro16.6详细教程(二)

3-D Viewer,可以直接在allegro中看到board file的3-D顯示效果。3-D Viewer對於PCB Editor Products,只有環境變數中的OpenGL顯示功能開啟後才有效,而對於APD/SiP是無效的。2.3-D viewer是在一個獨立的視窗中打開的。3-D environment環境支援多種顯示內容的過濾,取景視角和顯示效果的選項,透過遊標可以直接控制放大,移動,翻轉等操作。

axingxiansen的博客 1922

SD NAND嵌入式存储选型与驱动移植实战指南

在嵌入式系统开发中,存储方案的选择直接影响数据可靠性与系统成本。SPI NOR Flash容量有限,eMMC协议复杂且对主控要求高,而SD NAND作为一种贴片式存储器件,内置控制器实现了坏块管理与ECC纠错,通过SDIO或SPI接口与MCU通信,兼顾了容量、成本与易用性。其原理是将SD卡控制器与NAND晶圆封装为LGA形式,对主控呈现为块设备,支持FatFs等文件系统。在工业数据记录、日志存储、固件升级等场景中,SD NAND为MCU项目提供了介于NOR与eMMC之间的存储选择。本文围绕SD NAND的选

weixin_34211761的博客 203

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

STM32F429 >> 24. SDIO

简介 控制器对SD 卡进行读写通信操作一般有两种通信接口可选,分别是SPI 接口和SDIO 接口(安全数字输入/输出接口)。 SDIO 卡指利用SDIO 传输协议的一种外设,例如Wi-Fi Card。有的wifi 卡则是用串口或者SPI 接口进行通信。 SD 卡物理结构 一张SD 卡包括有存储单元、存储单元接口、电源检测、卡及接口控制器和接口驱动器5 个部分。 存储单元 存储单元是存储数据部件...

原谅我这一生不羁放纵爱自由 1051

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

SD协议简介

参考 1、作者 博文 SD2.0协议详解:命令格式、初始化/读取/写入

青春易逝,愿不负昭华,期待梦与远方 1万+

Micro SD Card参数基本介绍

SD卡标识基本介绍

關秦楚的专栏 6689

SD卡驱动

注:文中提及的寄存器都是STM32H7的寄存器。其他单片机操作同理。 一、介绍 1、SD卡种类 SD 卡主要分为两个版本,有1.x版和现在普遍使用的2.0 版,2.0 版是为了适应大容量SD 卡提出的标准,这个标准把SD 卡分为SDSC 卡和SDHC 卡。其中SDSC 卡为标准容量,容量最大不超过2G ;超过2G 的都属于高容量的SDHC 卡。 注:SDHC卡最大...

qlexcel的专栏 2247

存储卡规格等级全解!SD卡TF卡都能用

一般市面上最常见的存储卡分为两种,SD卡和TF卡。小众一些的CF卡,记忆棒之类的,这篇文章不做讨论。 最常见的,也是部分同学的手机上会装有的存储卡,叫做TF卡,全称是TransFLash,也叫做micro SD卡,意思是微型SD卡。而TF卡加上卡套,就可以用做SD卡了。 上图中黄色的是TF卡,黑色的是卡套,套上卡套之后就和下面的标准SD卡一样大小了。 标准的SD卡一般在相机上使用的比较多。 我们发现,存储卡上经常会标注各种各样的参数,除了存储容量(比如上图中的128GB)之外,还包含S.

Coding home - 漂流瓶jz 3万+

SDHC 与SD的区别

SDHC 与SD的区别 何为SDHC卡 SDHC是“High Capacity SD Memory Card”的缩写,即“高容量SD存储卡”。2006年5月SD协会发布了最新版的SD 2.0的系统规范,在其中规定SDHC是符合新的规范、且容量大于2GB小于等于32GB的SD卡。  SDHC最大的特点就是高容量(2GB-32GB)。另外,SD协会规定SDHC必须采用FAT32 文件

zhjr1220的专栏 3571

SDHC卡与SD卡的区别究竟在哪?

SDHC卡与SD卡的区别究竟在哪?现在市场上已经陆续出现一些SDHC卡,有些朋友在问,这类卡片与SD有什么区别,是否能够应用于现在的设备上,这里,我们为朋友们简单解答一下。SDHC是什么?SDHC的全称是“High Capacity SD Memory Card”,翻译过来便是“高容量SD存储卡”。这里的HC指的是High Capacity,高容量。2006年5月SD协会(SD Car

彬彬有礼的专栏 6996

常见储存卡类型

MicroSD卡 MicroSD 卡体积较小,与手机 SIM 卡相当,因此常用于手机、小型数码相机、运动相机以及无人机。 MicroSD共有三种容量标准: SD-容量上限为 2 GB,市面已不多见。 SDHC-容量介于 2 GB至 32GB 间,是最常见的类型。(上图为 HC ) SDXC –容量介于 32GB 至 2TB 间,容量较大,更适合拍摄视频的用户。 MicroSD 卡体积很小,因此在装取的过程中比较容易发生遗失,需要小心。 SD卡 SD 卡体积相比 MicroSD 卡要..

whatday的专栏 4773

存储卡图标全解析:SD与micro SD卡的识别

UHS II是SD卡的第二个UHS标准版本,相比于UHS I标准,UHS-II提供了更高的传输速度和更多的功能。:UHS 是SD卡的第一个UHS标准版本,支持更快的数据传输速度。SD卡有不少规范,常用包含存储空间和存储速度两种,厂商会把满足的规范的图标印在卡面上,所以通过卡上有的规格,就能很快判断出这张卡的容量、类型和最低速度,甚至适用场景。MicroSD卡的规范和SD卡相同。需要注意的是,要充分发挥UHS标准的速度优势,不仅需要使用支持相应标准的SD卡,还需要使用支持UHS标准的读卡器或设备。

Mkdkk的博客 6347

SDIO DRIVER

SDIO卡       SDIO卡是在SD内存卡接口的基础上发展起来的接口,SDIO接口兼容以前的SD内存卡,并且可以连接SDIO接口的设备,目前根据SDIO协议的SPEC,SDIO接口支持的设备总类有蓝牙,网卡,电视卡等。       SDIO

3448

SD和SDHC和SDXC卡的区别, class与u1/u3关系

origin: https://product.pconline.com.cn/itbk/digital/ydcc/1107/2483449.html u1/u3与class2/class4/class10等指的是速度 SD和SDHC和SDXC卡的区别是什么   SD和SDHC和SDXC卡的区别是什么?SD卡,SDHC卡,SDXC卡区别在于规格不一样,SD卡最大支持2GB容量,SDHC 最大支...

yazhouren的专栏 5195

SD卡学习笔记

首先对SD卡有一个感性认识:SD卡的技术是基于MultiMedia卡(MMC)格式上发展而来,大小和MMC差不多,尺寸为32mm x 24mm x 2.1mm。SD卡与MMC卡保持着向上兼容。内部结构: SD卡内部主要分两部分:存储介质(nandflash)和主控制器。主控制器多位以51为核心而设计的专用处理器,内部PLL可以倍频到近100m,带内部DMA,最主要的是SD控制器和NAND控制器。而

cuitianxiang的专栏 5984

深入解析SD卡物理层规范:2.0与3.0版本详解

深入解析SD卡物理层规范:2.0与3.0版本详解 【下载地址】SD规范物理层2.0和3.0版 本仓库提供的是SD协会官网上下载的最新协议,具体为SD卡的物理层规范,涵盖了2.0和3.0版本。该规范详细描述了SD卡在物理层上的技术细节和标准,是开发和设计SD卡相关产品的重要参考资料 ...

gitblog_09762的博客 1013
下一篇: ARM V8指令集ARM Cortex-A Series
EmLinuxDeveloper
博客等级 码龄2年 308粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值