Line 79... |
Line 79... |
m_mode_byte = 0;
|
m_mode_byte = 0;
|
|
|
memset(m_mem, 0x0ff, MEMBYTES);
|
memset(m_mem, 0x0ff, MEMBYTES);
|
}
|
}
|
|
|
void QSPIFLASHSIM::load(const char *fname) {
|
void QSPIFLASHSIM::load(const unsigned addr, const char *fname) {
|
FILE *fp;
|
FILE *fp;
|
int nr = 0;
|
size_t len;
|
|
|
|
if (addr >= MEMBYTES)
|
|
return;
|
|
len = MEMBYTES-addr*4;
|
|
|
if (NULL != (fp = fopen(fname, "r"))) {
|
if (NULL != (fp = fopen(fname, "r"))) {
|
nr = fread(m_mem, sizeof(char), MEMBYTES, fp);
|
int nr = 0;
|
|
nr = fread(&m_mem[addr], sizeof(char), len, fp);
|
fclose(fp);
|
fclose(fp);
|
|
if (nr == 0) {
|
|
fprintf(stderr, "SPI-FLASH: Could not read %s\n", fname);
|
|
perror("O/S Err:");
|
|
}
|
} else {
|
} else {
|
fprintf(stderr, "SPI-FLASH: Could not open %s\n", fname);
|
fprintf(stderr, "SPI-FLASH: Could not open %s\n", fname);
|
perror("O/S Err:");
|
perror("O/S Err:");
|
}
|
}
|
|
|
for(int i=nr; i<MEMBYTES; i++)
|
|
m_mem[i] = 0x0ff;
|
|
}
|
}
|
|
|
#define QOREG(A) m_oreg = ((m_oreg & (~0x0ff))|(A&0x0ff))
|
#define QOREG(A) m_oreg = ((m_oreg & (~0x0ff))|(A&0x0ff))
|
|
|
int QSPIFLASHSIM::operator()(const int csn, const int sck, const int dat) {
|
int QSPIFLASHSIM::operator()(const int csn, const int sck, const int dat) {
|
Line 383... |
Line 389... |
m_addr = m_ireg & 0x0ffffff;
|
m_addr = m_ireg & 0x0ffffff;
|
if (m_debug) printf("FAST READ, ADDR = %08x\n", m_addr);
|
if (m_debug) printf("FAST READ, ADDR = %08x\n", m_addr);
|
QOREG(0x0c3);
|
QOREG(0x0c3);
|
assert((m_addr & 0xfc00000)==0);
|
assert((m_addr & 0xfc00000)==0);
|
} else if ((m_count >= 40)&&(0 == (m_sreg&0x01))) {
|
} else if ((m_count >= 40)&&(0 == (m_sreg&0x01))) {
|
if (m_count == 40)
|
//if (m_count == 40)
|
printf("DUMMY BYTE COMPLETE ...\n");
|
//printf("DUMMY BYTE COMPLETE ...\n");
|
QOREG(m_mem[m_addr++]);
|
QOREG(m_mem[m_addr++]);
|
// if (m_debug) printf("SPIF[%08x] = %02x\n", m_addr-1, m_oreg);
|
// if (m_debug) printf("SPIF[%08x] = %02x\n", m_addr-1, m_oreg);
|
} else m_oreg = 0;
|
} else m_oreg = 0;
|
break;
|
break;
|
case QSPIF_QUAD_READ_CMD:
|
case QSPIF_QUAD_READ_CMD:
|