有什么方法可以从Linux用户空间向SD卡发送命令吗?

有什么方法可以从Linux用户空间向SD卡发送命令吗?,第1张

概述我有一个Debian 7.0 Linux 3.2嵌入式ARM TI AM335x系统.这是我们开发的定制板,但SD卡部分至少与开发板相同.我想向卡发出一些供应商特定的SD卡命令,即使用CMD56读取一些SMART数据. 有没有办法向SD卡控制器发送命令并从用户空间读取响应? 根据 http://processors.wiki.ti.com/index.php/AM335x_MMC/SD_Drive 我有一个Debian 7.0 Linux 3.2嵌入式ARM TI AM335x系统.这是我们开发的定制板,但SD卡部分至少与开发板相同.我想向卡发出一些供应商特定的SD卡命令,即使用CMD56读取一些SMART数据.

有没有办法向SD卡控制器发送命令并从用户空间读取响应?

解决方法 根据 http://processors.wiki.ti.com/index.php/AM335x_MMC/SD_Driver%27s_Guide,你的驱动程序是 omap_hsmmc,也是 https://www.kernel.org/doc/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt的一些信息

在网上搜索SD卡中的SMART监控支持后,我得到了搜索查询mmc smartctl(因为smartctl是linux中* ATA的SMART监控实用程序的名称,而mmc是实现MMC,SD,SDHC卡和控制器的内核子系统我发现Gwendal Grignou在某些移动PC OS https://code.google.com/p/chromium/issues/detail?id=315380上填充了这个BUG

If the root device is a SATA device:

Add output of hdparm -I /dev/sda Add output of smartctl -a /dev/sda

If the root device is a emmC device:

When mmc-utils will be part of the image,add a similar command output.

听起来像mmc-utils它是实现SMART SD卡的首选工具. kernel.org上有mmc-utils的主页git:http://git.kernel.org/cgit/linux/kernel/git/cjb/mmc-utils.git/tree/

我在这里看不到“SMART”,但是mmc-utils/mmc_cmds.c有代码通过使用ioctl(fd,MMC_IOC_CMD,(struct mmc_ioc_cmd *)& ioctl_data)向fd指向正确的mmcblkX设备向卡发送自定义命令(我希望这适用于大多数SD控制器).代码:Johan RUDHolM(来自st-eriCSSon,2012,GPLv2):

int read_extcsd(int fd,__u8 *ext_csd)   {       struct mmc_ioc_cmd IData;       memset(&IData,sizeof(IData));       memset(ext_csd,sizeof(__u8) * 512);       IData.write_flag = 0;       IData.opcode = MMC_SEND_EXT_CSD;       IData.arg = 0;       IData.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_ADTC;       IData.blksz = 512;       IData.blocks = 1;       mmc_ioc_cmd_set_data(IData,ext_csd);       return  ioctl(fd,&IData);   }   int write_extcsd_value(int fd,__u8 index,__u8 value)   {       struct mmc_ioc_cmd IData;       memset(&IData,sizeof(IData));       IData.write_flag = 1;       IData.opcode = MMC_SWITCH;       IData.arg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |            (index << 16) |            (value << 8) |            EXT_CSD_CMD_SET_norMAL;       IData.flags = MMC_RSP_SPI_R1B | MMC_RSP_R1B | MMC_CMD_AC;       return ioctl(fd,&IData);   }

MMC_IOC_CMD的一些文档和示例由ShashIDhar Hiremath于2011年12月20日14:54 “[PATCH 1/1] mmc: User Application for testing SD/MMC Commands and extra IOCTL Command for MMC card reset”发布在LKML中

struct mmc_ioc_cmd的官方userAPI(uAPI)位于linux源代码树include/uapi/linux/mmc/ioctl.h中:

6 struct mmc_ioc_cmd {... 10         /* Application-specific command.  true = precede with CMD55 */ 11         int is_acmd;... 51  * Since this ioctl is only meant to enhance (and not replace) normal access 52  * to the mmc bus device...
总结

以上是内存溢出为你收集整理的有什么方法可以从Linux用户空间向SD卡发送命令吗?全部内容,希望文章能够帮你解决有什么方法可以从Linux用户空间向SD卡发送命令吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1049675.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存