MCPcopy Create free account
hub / github.com/PaulStoffregen/SerialFlash / write

Method write

SerialFlashChip.cpp:181–216  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

179}
180
181void SerialFlashChip::write(uint32_t addr, const void *buf, uint32_t len)
182{
183 const uint8_t *p = (const uint8_t *)buf;
184 uint32_t max, pagelen;
185
186 //Serial.printf("WR: addr %08X, len %d\n", addr, len);
187 do {
188 if (busy) wait();
189 SPIPORT.beginTransaction(SPICONFIG);
190 CSASSERT();
191 // write enable command
192 SPIPORT.transfer(0x06);
193 CSRELEASE();
194 max = 256 - (addr & 0xFF);
195 pagelen = (len <= max) ? len : max;
196 //Serial.printf("WR: addr %08X, pagelen %d\n", addr, pagelen);
197 delayMicroseconds(1); // TODO: reduce this, but prefer safety first
198 CSASSERT();
199 if (flags & FLAG_32BIT_ADDR) {
200 SPIPORT.transfer(0x02); // program page command
201 SPIPORT.transfer16(addr >> 16);
202 SPIPORT.transfer16(addr);
203 } else {
204 SPIPORT.transfer16(0x0200 | ((addr >> 16) & 255));
205 SPIPORT.transfer16(addr);
206 }
207 addr += pagelen;
208 len -= pagelen;
209 do {
210 SPIPORT.transfer(*p++);
211 } while (--pagelen > 0);
212 CSRELEASE();
213 busy = 4;
214 SPIPORT.endTransaction();
215 } while (len > 0);
216}
217
218void SerialFlashChip::eraseAll()
219{

Callers 4

check_signatureFunction · 0.45
removeMethod · 0.45
createMethod · 0.45

Calls

no outgoing calls

Tested by

no test coverage detected