/************************************************************************ * Function: WORD SST25ReadWord(DWORD address) * * Overview: this function reads a 16-bit word from the address specified * * Input: address * * Output: data read * ************************************************************************/ WORD SST25ReadWord(DWORD address) { WORD_VAL temp; temp.v[0] = SST25ReadByte(address); temp.v[1] = SST25ReadByte(address + 1); return (temp.Val); }
/************************************************************************ * Function: uint16_t SST25ReadWord(DWORD address) * * Overview: this function reads a 16-bit word from the address specified * * Input: address * * Output: data read * ************************************************************************/ uint16_t SST25ReadWord(uint32_t address) { uint16_t temp; temp = SST25ReadByte(address); temp |= (uint16_t)(SST25ReadByte(address + 1) << 8 ); return (temp); }
/************************************************************************ * Function: BYTE SST25WriteArray(DWORD address, BYTE* pData, nCount) * * Overview: this function writes a data array at the address specified * * Input: flash memory address, pointer to the data array, data number * * Output: return 1 if the operation was successfull * ************************************************************************/ BYTE SST25WriteArray(DWORD address, BYTE *pData, WORD nCount) { DWORD addr; BYTE *pD; WORD counter; addr = address; pD = pData; // WRITE for(counter = 0; counter < nCount; counter++) { SST25WriteByte(*pD++, addr++); } // VERIFY for(counter = 0; counter < nCount; counter++) { if(*pData != SST25ReadByte(address)) return (0); pData++; address++; } return (1); }
/************************************************************************ * Function: BYTE SST25WriteArray(DWORD address, BYTE* pData, nCount) * * Overview: this function writes a data array at the address specified * * Input: flash memory address, pointer to the data array, data number * * Output: return 1 if the operation was successfull * ************************************************************************/ BYTE SST25WriteArray(DWORD address, BYTE *pData, WORD nCount) { DWORD addr; BYTE *pD; WORD counter; #if defined(USE_M25P80) BYTE status; #endif addr = address; pD = pData; // WRITE for(counter = 0; counter < nCount; counter++) { SST25WriteByte(*pD++, addr++); } #if defined(USE_M25P80) // check status of Write in Progress // wait for BULK ERASE to be done SST25CSLow(); SPIPut(spiInitData.channel, SST25_CMD_RDSR); SPIGet(spiInitData.channel); while(1) { SPIPut(spiInitData.channel, 0); status = (SPIGet(spiInitData.channel)& SST25_WIP_STATUS); if ((status & SST25_WIP_STATUS) == 0) break; } SST25CSHigh(); #endif // VERIFY for(counter = 0; counter < nCount; counter++) { if(*pData != SST25ReadByte(address)) return (0); pData++; address++; } return (1); }
/************************************************************************ * Function: BYTE SST25WriteArray(DWORD address, BYTE* pData, nCount) * * Overview: this function writes a data array at the address specified * * Input: flash memory address, pointer to the data array, data number * * Output: return 1 if the operation was successfull * ************************************************************************/ uint8_t SST25WriteArray(uint32_t address, uint8_t *pData, uint16_t nCount) { uint32_t addr; uint8_t *pD; uint16_t counter; #if defined(USE_M25P80) uint8_t status; #endif addr = address; pD = pData; // WRITE for(counter = 0; counter < nCount; counter++) { SST25WriteByte(*pD++, addr++); } #if defined(USE_M25P80) // check status of Write in Progress // wait for BULK ERASE to be done SST25CSLow(); SPIPut(spiInitData.spiId, SST25_CMD_RDSR); SPIGet(spiInitData.spiId); while(1) { SPIPut(spiInitData.spiId, 0); status = (SPIGet(spiInitData.spiId)& SST25_WIP_STATUS); if ((status & SST25_WIP_STATUS) == 0) break; } SST25CSHigh(); #endif // VERIFY for(counter = 0; counter < nCount; counter++) { if(*pData != SST25ReadByte(address)) return (0); pData++; address++; } return (1); }