/************************************************************************ * 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); }
/************************************************************************ * Function: void SST25WriteWord(WODR data, DWORD address) * * Overview: this function writes a 16-bit word to the address specified * * Input: data to be written and address * * Output: none * ************************************************************************/ void SST25WriteWord(WORD data, DWORD address) { SST25WriteByte(((WORD_VAL) data).v[0], address); SST25WriteByte(((WORD_VAL) data).v[1], address + 1); }
/************************************************************************ * Function: void SST25WriteWord(WODR data, DWORD address) * * Overview: this function writes a 16-bit word to the address specified * * Input: data to be written and address * * Output: none * ************************************************************************/ void SST25WriteWord(uint16_t data, uint32_t address) { SST25WriteByte(data, address); SST25WriteByte(data>>8, address + 1); }