#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include <stdarg.h>
#include <fcntl.h>
#include <unistd.h>
#include "imx6ull_mtd_flash_api.h"
void usage(char **argv)
{
printf("usage:\n");
printf("%s -f {0/1} -e {addr len} / -w {addr val} / -r {addr len} \n",argv[0]);
}
int main(int argc, char **argv)
{
int fd;
int ret;
unsigned int i;
extern char *optarg;
signed char command;
char flash_mtd_path[32];
char flash_mtdblock_path[32];
unsigned int flash_node;
unsigned int flash_mode=-1;
unsigned int addr;
unsigned char val;
unsigned int len;
unsigned char data[128];
if (argc < 2)
{
usage(argv);
return -1;
}
while ((command = getopt(argc, argv, "f:e:w:r:")) != -1)
{
switch (command)
{
case 'f':
flash_node = strtol(optarg,NULL,10);
break;
case 'e':
flash_mode = 1;
break;
case 'w':
flash_mode = 2;
break;
case 'r':
flash_mode = 3;
break;
default:
usage(argv);
return -1;
}
}
sprintf(flash_mtd_path, "%s%d", "/dev/mtd",flash_node);
sprintf(flash_mtdblock_path, "%s%d", "/dev/mtdblock",flash_node);
#if 0
printf("flash_mtd_path=%s\n",flash_mtd_path);
printf("flash_mtdblock_path=%s\n",flash_mtdblock_path);
#endif
switch(flash_mode)
{
case 1:
addr = strtol(argv[4],NULL,16);
len = atoi(argv[5]);
ret = erase_flash(flash_mtd_path, addr, len);
if(ret < 0)
{
printf("fail to erase flash %s, in %s\n", flash_mtd_path, __func__);
return -1;
}
break;
case 2:
addr = strtol(argv[4],NULL,16);
val = strtol(argv[5],NULL,16);
ret = write_flash(flash_mtdblock_path, &val, 1, addr);
if(ret < 0)
{
printf("fail to write flash %s, in %s\n", flash_mtdblock_path, __func__);
return -1;
}
break;
case 3:
addr = strtol(argv[4],NULL,16);
len = atoi(argv[5]);
ret = read_flash(flash_mtdblock_path, addr, len, data);
if(ret < 0)
{
printf("fail to read flash %s, in %s\n", flash_mtdblock_path, __func__);
return -1;
}
#if 1
for(i=0; i<len; i++)
{
if(i%8 == 0)
printf("\n");
printf("0x%x\t",data[i]);
}
#endif
break;
default :
break;
}
return 0;
}