有什么方法可以从Linux用户空间向SD卡发送命令吗?
| 
                         我有一个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 
 听起来像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源代码树 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...                        (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!  | 
                  
- 电子邮件 – 什么是Curl SMTP命令行参数支持GMail TLS / ST
 - linux – 设备树和手动注册
 - 在Linux中编译PHP脚本
 - linux 查看文件的行数
 - linux – 建议测试“pam.d / common- *”文件更改的方法
 - linux – xorg.conf,xset和xinput set之间有什么区别?
 - linux – 使用inittab确保sshd(和其他重要项)仍在运行 – 有
 - linux – warning:GDB:无法设置控制终端:参数无效
 - Device eth0 does not seem to be present, delaying initi
 - LINUX教程:netstat命令详解状态
 
