OpenCores
URL https://opencores.org/ocsvn/openarty/openarty/trunk

Subversion Repositories openarty

[/] [openarty/] [trunk/] [sw/] [host/] [flashdrvr.cpp] - Diff between revs 14 and 18

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 14 Rev 18
Line 82... Line 82...
}
}
 
 
bool    FLASHDRVR::erase_sector(const unsigned sector, const bool verify_erase) {
bool    FLASHDRVR::erase_sector(const unsigned sector, const bool verify_erase) {
        DEVBUS::BUSW    page[SZPAGEW];
        DEVBUS::BUSW    page[SZPAGEW];
 
 
 
        printf("EREG before   : %08x\n", m_fpga->readio(R_QSPI_EREG));
        printf("Erasing sector: %08x\n", sector);
        printf("Erasing sector: %08x\n", sector);
        m_fpga->writeio(R_QSPI_EREG, DISABLEWP);
        m_fpga->writeio(R_QSPI_EREG, DISABLEWP);
 
        printf("EREG with WEL : %08x\n", m_fpga->readio(R_QSPI_EREG));
        SETSCOPE;
        SETSCOPE;
        m_fpga->writeio(R_QSPI_EREG, ERASEFLAG + sector);
        m_fpga->writeio(R_QSPI_EREG, ERASEFLAG + sector);
 
        printf("EREG after    : %08x\n", m_fpga->readio(R_QSPI_EREG));
 
 
        // If we're in high speed mode and we want to verify the erase, then
        // If we're in high speed mode and we want to verify the erase, then
        // we can skip waiting for the erase to complete by issueing a read
        // we can skip waiting for the erase to complete by issueing a read
        // command immediately.  As soon as the erase completes the read will
        // command immediately.  As soon as the erase completes the read will
        // begin sending commands back.  This allows us to recover the lost 
        // begin sending commands back.  This allows us to recover the lost 
Line 158... Line 161...
                        }
                        }
                } // printf("\nVerify success\n");
                } // printf("\nVerify success\n");
        } return true;
        } return true;
}
}
 
 
 
#define VCONF_VALUE     0x8b
 
 
 
bool    FLASHDRVR::verify_config(void) {
 
        unsigned cfg = m_fpga->readio(R_QSPI_VCONF);
 
        printf("CFG = %02x\n", cfg);
 
        return (cfg == VCONF_VALUE);
 
}
 
 
 
void    FLASHDRVR::set_config(void) {
 
        // There is some delay associated with these commands, but it should
 
        // be dwarfed by the communication delay.  If you wish to do this on the
 
        // device itself, you may need to use some timers.
 
        //
 
        // Set the write-enable latch
 
        m_fpga->writeio(R_QSPI_EREG, DISABLEWP);
 
        // Set the volatile configuration register
 
        m_fpga->writeio(R_QSPI_VCONF, VCONF_VALUE);
 
        // Clear the write-enable latch, since it didn't clear automatically
 
        printf("EREG = %08x\n", m_fpga->readio(R_QSPI_EREG));
 
        m_fpga->writeio(R_QSPI_EREG, ENABLEWP);
 
}
 
 
bool    FLASHDRVR::write(const unsigned addr, const unsigned len,
bool    FLASHDRVR::write(const unsigned addr, const unsigned len,
                const unsigned *data, const bool verify) {
                const unsigned *data, const bool verify) {
 
 
 
        if (!verify_config()) {
 
                set_config();
 
                if (!verify_config())
 
                        return false;
 
        }
 
 
        // Work through this one sector at a time.
        // Work through this one sector at a time.
        // If this buffer is equal to the sector value(s), go on
        // If this buffer is equal to the sector value(s), go on
        // If not, erase the sector
        // If not, erase the sector
 
 
        /*
 
        fprintf(stderr, "FLASH->write(%08x, %d, ..., %s)\n", addr, len,
 
                        (verify)?"Verify":"");
 
        */
 
        // m_fpga->writeio(R_QSPI_CREG, 2);
        // m_fpga->writeio(R_QSPI_CREG, 2);
        // m_fpga->readio(R_VERSION);   // Read something innocuous
        // m_fpga->readio(R_VERSION);   // Read something innocuous
 
 
        // Just to make sure the driver knows that these values are ...
        // Just to make sure the driver knows that these values are ...
        // m_fpga->readio(R_QSPI_CREG);
        // m_fpga->readio(R_QSPI_CREG);

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.