无法在Linux中读取CID

时间:2018-05-08 07:53:00

标签: c linux linux-device-driver

我是MMC IOCTL的新手。我试图阅读我的三星4.5 eMMC的CID。但是我似乎让Connection超时了。我正在使用CMD10进行cid阅读。

使用的mmc.h文件类似于mmc-utils中的文件。

附件是我的代码和错误屏幕截图:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include "mmc.h"

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <stdint.h>
#include <assert.h>

#define CID_SIZE 16
#define MMC_SEND_CID                    10

int read_cid(int fd, __u8 *cid)
{
       int ret = 0;
       struct mmc_ioc_cmd idata;

       memset(&idata, 0, sizeof(idata));
       memset(cid, 0, sizeof(__u8) * CID_SIZE);

       idata.write_flag = 0;
       idata.opcode = MMC_SEND_CID;
       idata.arg    = 0;
       idata.flags  = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_ADTC;
       idata.blksz  = CID_SIZE;
       idata.blocks = 1;
       mmc_ioc_cmd_set_data(idata, cid);

       ret = ioctl(fd, MMC_IOC_CMD, &idata);
       if (ret)
               perror("ioctl SEND_CID");

        return ret;
}

主要功能如下:

void main(int argc, const char **argv) {
    int fd, ret, i=0;
    if (argc != 2) {
        printf("Usage: ./CIDread <device> \n");
        printf("device - sd card block device e.g. /dev/block/mmcblk1\n");
        printf("\n");
        printf("Warning: use at own risk!\n");
        return;
    }

// open device
    fd = open(argv[1], O_RDWR);
    __u8 cid[CID_SIZE]={0};

    for (i=0;i<CID_SIZE;i++)
    {
        printf("CID DEBUG values is:");
        printf("%lu",cid[i]);
        printf("\n");
    }   

    /* 4) read the device manfid */
       ret = read_cid(fd, cid);
       if (ret) {
               fprintf(stderr, "ERROR: Read EXT_CSD from %s: %m\n",argv[1]);
       }
       else{
           for (i=0;i<CID_SIZE;i++){
                printf("CID values is:");
                printf("%lu",cid[i]);
                printf("\n");
            }  
       }
    close(fd);
}

错误消息如下:

User # ./cid /dev/mmcblk1
CID DEBUG values is:0
CID DEBUG values is:0
CID DEBUG values is:0
CID DEBUG values is:0
CID DEBUG values is:0
CID DEBUG values is:0
CID DEBUG values is:0
CID DEBUG values is:0
CID DEBUG values is:0
CID DEBUG values is:0
CID DEBUG values is:0
CID DEBUG values is:0
CID DEBUG values is:0
CID DEBUG values is:0
CID DEBUG values is:0
CID DEBUG values is:0
ioctl SEND_CID: Connection timed out
ERROR: Read EXT_CSD from /dev/mmcblk1: Connection timed out

0 个答案:

没有答案