コード例 #1
0
ファイル: mmchost_mmchs.c プロジェクト: jedivind/minix
/* write count blocks */
static int
mmchs_host_write(struct sd_card *card,
    uint32_t blknr, uint32_t count, unsigned char *buf)
{
	uint32_t i;

	i = count;
	for (i = 0; i < count; i++) {
		write_single_block(&card->regs, blknr + i,
		    buf + (i * card->blk_size));
	}

	return OK;
}
コード例 #2
0
ファイル: bonemmc.c プロジェクト: keesj/bonecode
int main(void)
{
	struct sd_card card;
	int i;

	unsigned char buf[1024];
	memset(buf, 0, 1024);

	if (mmchs_init(1)) {
		printf("Failed to initialize the host controller\n");
		return 1;
	}

	if (card_goto_idle_state()) {
		printf("Failed to go into idle state\n");
		return 1;
	}
	if (card_identification()) {
		printf("Failed to go card_identification\n");
		return 1;
	}
	if (card_query_voltage_and_type(&card)) {
		printf("Failed to go card_query_voltage_and_type\n");
		return 1;
	}
	if (card_identify(&card)) {
		printf("Failed to identify card\n");
		return 1;
	}
	/* We have now initialized the hardware identified the card */
	if (card_csd(&card)) {
		printf("failed to read csd (card specific data)\n");
		return 1;
	}
	if (select_card(&card)) {
		printf("Failed to select card\n");
		return 1;
	}

	if (read_single_block(&card, 0, buf)) {
		printf("Failed to read a single block\n");
		return 1;
	}

	/* check signature */
	if (!(buf[0x01fe] == 0x55 && buf[0x01ff] == 0xaa)) {
		printf("Failed to find MBR signature\n");
		return 1;
	}

	for (i = 0; i < 512; i++) {
		buf[i] = i % 256;
	}

	if (read_single_block(&card, 0, buf)) {
		printf("Failed to read a single block\n");
		return 1;
	}

	/* check signature */
	if (!(buf[0x01fe] == 0x55 && buf[0x01ff] == 0xaa)) {
		printf("Failed to find MBR signature\n");
		return 1;
	}

	/* DESCUCTIVE... */
	for (i = 0; i < 512; i++) {
		buf[i] = i % 256;
	}

	if (write_single_block(&card, 0xfffff, buf)) {
		printf("Failed to write a single block\n");
		return 1;
	}

	for (i = 0; i < 512; i++) {
		buf[i] = 0;
	}

	if (read_single_block(&card, 0xfffff, buf)) {
		printf("Failed to write a single block (check)\n");
		return 1;
	}

	for (i = 0; i < 512; i++) {
		if (!buf[i] == i % 256) {
			printf("Failed to write a single block and read it again \n");
			return 1;
		}
	}
	printf("Finished\n");
	return 0;
}