Writing to Windbond chips--byte-by-byte reliable, write in sequence is unrelaible

KrisKasprzak

Well-known member
Writing to the Windbon flash chip

All,

I have a library to write to the Teensy approved Windbon chip and to date has been 100% reliable in writing/reading data. I'll estimate I've written some 100 mb and have not lost even 1 bit.

My library writes byte-by-byte and NOT arrays or bytes in sequence, although the data sheet claims you can write pages up to 255 bytes in one shot. You can imagine the byte-by-byte overhead slows things down where on average each byte takes around 34 us to write. I tried to write bytes in sequence and performance is around 12 us/byte. But.... I get a failed writes every 500 to 1000 bytes. Totally unacceptable.

Not shown are the raw data sent to the function but the byte conversion is correct.

Reading the chip and converting bytes to data (note the nan)
Record 0298, 1, 298, 2.72959, 0.24814, 0
Record 0299, 1, 299, 2.72959, nan, 0

looking at the raw data on the chip see 153-255-255-255 for the float--should be similar to row above
Address: 10430, Record: 298 - 82-101-99-111-114-100-32-48-49-52-56-0-0-0-0-0-0-0-0-0-0-1-0-0-0-148-153-177-46-64-153-25-126-62-0-
Address: 10465, Record: 299 - 82-101-99-111-114-100-32-48-49-52-57-0-0-0-0-0-0-0-0-0-0-1-0-0-0-149-153-177-46-64-153-255-255-255-0-

Unless something jumps out. I'm happy leaving things alone.

Code:
byte by byte write method for float (which is 100% reliable)

// convert float to 4 bytes, 100% reliable
WriteData(aBytes[0]);
WriteData(aBytes[1]);
WriteData(aBytes[2]);
WriteData(aBytes[3]);       

void BulletDB::WriteData(uint8_t data) {
    SPI.beginTransaction(SPISettings(SPEED_WRITE, MSBFIRST, SPI_MODE0));
    digitalWriteFast(cspin, LOW);
    SPI.transfer(WRITEENABLE); // write instruction
    digitalWrite(cspin, HIGH);
    SPI.endTransaction();   
    flash_wait_for_write = 1;
    write_pause();
    SPI.beginTransaction(SPISettings(SPEED_WRITE, MSBFIRST, SPI_MODE0));
    digitalWriteFast(cspin, LOW);
    SPI.transfer(WRITE); // write instruction
    SPI.transfer((uint8_t) ((Address >> 16) & 0xFF));
    SPI.transfer((uint8_t) ((Address >> 8) & 0xFF));
    SPI.transfer((uint8_t) (Address & 0xFF));

    SPI.transfer(data);

    digitalWriteFast(cspin, HIGH); 
    SPI.endTransaction();
    flash_wait_for_write = 1;
    write_pause();


    Address = Address + 1;
}

Code:
sequential byte write method for a float (which is very unreliable)

// convert float to 4 bytes in array called aBytes (which is a global array in my lib)
WriteData(4); // 100% reliable

void BulletDB::WriteBytes(uint8_t Length) {
    
     uint8_t i = 0;
    
    SPI.beginTransaction(SPISettings(SPEED_WRITE, MSBFIRST, SPI_MODE0));
    digitalWriteFast(cspin, LOW);
    SPI.transfer(WRITEENABLE);
    digitalWrite(cspin, HIGH);
    
    SPI.endTransaction();
    
    flash_wait_for_write = 1;
    write_pause();
  
    SPI.beginTransaction(SPISettings(SPEED_WRITE, MSBFIRST, SPI_MODE0));
    digitalWriteFast(cspin, LOW);
    SPI.transfer(WRITE);
    SPI.transfer((uint8_t) ((Address >> 16) & 0xFF));
    SPI.transfer((uint8_t) ((Address >> 8) & 0xFF));
    SPI.transfer((uint8_t) (Address & 0xFF));
    
    for (i = 0; i < Length; i++){   
        SPI.transfer((uint8_t) aBytes[i]);
    }
 
    digitalWriteFast(cspin, HIGH); 
    SPI.endTransaction();

    flash_wait_for_write = 1;
    write_pause();


    Address = Address + Length;

}

Thanks in advance.
 
Looking at the datasheet for the W25Q128JV- DTR (you don’t give the exact part you used…), section 8.2.16 on page programming, it states that if a write goes past a 256-byte page boundary it will wrap to the page start and overwrite previously sent data. You may find that record 292 has been corrupted…

The simplest fix I can think of is to check whether a write will cross a page boundary: if so, split into two writes, if not, do it in a burst.

You might want to consider having your record defined as a packed struct, assuming you can organise it so it packs exactly like your existing data. Then you can write the whole 35 bytes in one or two transactions, depending on page boundary crossings, and not have to mess about converting floats to arrays of uint8_t.
 
Address: 10465, Record: 299 - 82-101-99-111-114-100-32-48-49-52-57-0-0-0-0-0-0-0-0-0-0-1-0-0-0-149-153-177-46-64-153-255-255-255-0-
This confirms the problem is as stated above; if this record starts at address 10465 then the bad data is at 10496, which is address 0x2900.
 
All, thanks for jumping in.

A bit more detail. My chip is the W25Q64JVSSIQ

I saw that part about page boundaries. however my write errors are very random. After a full erase and writing 150 records. Oddly I don't get a fail every 256-byte writes. But when it does fails seem to happen at the boundary. Maybe you are correct that fails are because of the boundary, but it seems to happen randomly.

Here are the following results
note
1. I reserve the 0 record for special data, it's still 35 bytes which is that is the length of a record
2. the 35 at address 0 is the record length, I use this to make sure the fields of any newly uploaded code match what's on the chip

A data dump is a follows, notice errors at records 21, 43, 65, 88 but not one at 102, 122, 142 (seems a fail every 22 records)

Code:
1, Record 0001, 2, 1, 2.72959, 0.23203, 0
2, Record 0002, 2, 2, 2.72637, 0.23203, 0
3, Record 0003, 2, 3, 2.72959, 0.23203, 0
4, Record 0004, 2, 4, 2.72959, 0.23203, 0
5, Record 0005, 2, 5, 2.72637, 0.23203, 0
6, Record 0006, 2, 6, 2.72637, 0.23203, 0
7, Record 0007, 2, 7, 2.72959, 0.23203, 0
8, Record 0008, 2, 8, 2.72637, 0.23203, 0
9, Record 0009, 2, 9, 2.72637, 0.23203, 0
10, Record 0010, 2, 10, 2.72637, 0.23203, 0
11, Record 0011, 2, 11, 2.72637, 0.23203, 0
12, Record 0012, 2, 12, 2.72959, 0.23203, 0
13, Record 0013, 2, 13, 2.72637, 0.23203, 0
14, Record 0014, 2, 14, 2.72637, 0.23203, 0
15, Record 0015, 2, 15, 2.72637, 0.23203, 0
16, Record 0016, 2, 16, 2.72959, 0.23203, 0
17, Record 0017, 2, 17, 2.72637, 0.23203, 0
18, Record 0018, 2, 18, 2.72637, 0.23203, 0
19, Record 0019, 2, 19, 2.72959, 0.23203, 0
20, Record 0020, 2, 20, 2.72637, 0.23203, 0
21, Record 0021, 2, 21, 2.72959, ovf, 0
22, Record 0022, 2, 22, 2.72959, 0.23203, 0
23, Record 0023, 2, 23, 2.72637, 0.23203, 0
24, Record 0024, 2, 24, 2.72637, 0.23203, 0
25, Record 0025, 2, 25, 2.72959, 0.23203, 0
26, Record 0026, 2, 26, 2.72637, 0.23203, 0
27, Record 0027, 2, 27, 2.72959, 0.23203, 0
28, Record 0028, 2, 28, 2.72959, 0.23203, 0
29, Record 0029, 2, 29, 2.72637, 0.23203, 0
30, Record 0030, 2, 30, 2.72959, 0.23203, 0
31, Record 0031, 2, 31, 2.72637, 0.23203, 0
32, Record 0032, 2, 32, 2.72637, 0.23203, 0
33, Record 0033, 2, 33, 2.72637, 0.23203, 0
34, Record 0034, 2, 34, 2.72637, 0.23203, 0
35, Record 0035, 2, 35, 2.72637, 0.23203, 0
36, Record 0036, 0, 36, 2.72637, 0.23203, 0
37, Record 0037, 2, 37, 2.72637, 0.23203, 0
38, Record 0038, 2, 38, 2.72637, 0.23203, 0
39, Record 0039, 2, 39, 2.72959, 0.23203, 0
40, Record 0040, 2, 40, 2.72959, 0.23203, 0
41, Record 0041, 2, 41, 2.72637, 0.23203, 0
42, Record 0042, 2, 42, 2.72959, 0.23203, 0
43, Record 0043, 2, 43, 2.72959, nan, 0
44, Record 0044, 2, 44, 2.72637, 0.23203, 0
45, Record 0045, 2, 45, 2.72959, 0.23203, 0
46, Record 0046, 2, 46, 2.72637, 0.23203, 0
47, Record 0047, 2, 47, 2.72959, 0.23203, 0
48, Record 0048, 2, 48, 2.72637, 0.23203, 0
49, Record 0049, 2, 49, 2.72637, 0.23203, 0
50, Record 0050, 2, 50, 2.72959, 0.23203, 0
51, Record 0051, 2, 51, 2.72637, 0.23203, 0
52, Record 0052, 2, 52, 2.72637, 0.23203, 0
53, Record 0053, 2, 53, 2.72637, 0.23203, 0
54, Record 0054, 2, 54, 2.72637, 0.23203, 0
55, Record 0055, 2, 55, 2.72959, 0.23203, 0
56, Record 0056, 2, 56, 2.72959, 0.23203, 0
57, Record 0057, 2, 57, 2.72637, 0.23203, 0
58, Record 0058, 2, 58, 2.72637, 0.23203, 0
59, Record 0059, 2, 59, 2.72637, 0.23203, 0
60, Record 0060, 2, 60, 2.72637, 0.23203, 0
61, Record 0061, 2, 61, 2.72637, 0.23203, 0
62, Record 0062, 2, 62, 2.72959, 0.23203, 0
63, Record 0063, 2, 63, 2.72637, 0.23203, 0
64, Record 0064, 2, 64, 2.72637, 0.23203, 0
65, Record 0065, 2, 65, ovf, 0.23203, 0
66, Record 0066, 2, 66, 2.72637, 0.23203, 0
67, Record 0067, 2, 67, 2.72959, 0.23203, 0
68, Record 0068, 2, 68, 2.72637, 0.23203, 0
69, Record 0069, 2, 69, 2.72637, 0.23203, 0
70, Record 0070, 2, 70, 2.72959, 0.23203, 0
71, Record 0071, 2, 71, 2.72637, 0.23203, 0
72, Record 0072, 2, 72, 2.72637, 0.23203, 0
73, Record 0073, 2, 73, 2.72637, 0.23203, 0
74, Record 0074, 2, 74, 2.72637, 0.23203, 0
75, Record 0075, 2, 75, 2.72637, 0.23203, 0
76, Record 0076, 2, 76, 2.72959, 0.23203, 0
77, Record 0077, 2, 77, 2.72959, 0.23203, 0
78, Record 0078, 2, 78, 2.72959, 0.23203, 0
79, Record 0079, 2, 79, 2.72959, 0.23203, 0
80, Record 0080, 2, 80, 2.72637, 0.23203, 0
81, Record 0081, 2, 81, 2.72637, 0.23203, 0
82, Record 0082, 2, 82, 2.72637, 0.23203, 0
83, Record 0083, 2, 83, 2.72637, 0.23203, 0
84, Record 0084, 2, 84, 2.72637, 0.23203, 0
85, Record 0085, 2, 85, 2.72637, 0.23203, 0
86, Record 0086, 2, 86, 2.72959, 0.23203, 0
87, Record 0087, 2, 87, nan, 0.23203, 0
88, Record 0088, 2, 88, 2.72637, 0.23203, 0
89, Record 0089, 2, 89, 2.72959, 0.23203, 0
90, Record 0090, 2, 90, 2.72637, 0.23203, 0
91, Record 0091, 2, 91, 2.72637, 0.23203, 0
92, Record 0092, 2, 92, 2.72959, 0.23203, 0
93, Record 0093, 2, 93, 2.72637, 0.23203, 0
94, Record 0094, 2, 94, 2.72637, 0.23203, 0
95, Record 0095, 2, 95, 2.72959, 0.23203, 0
96, Record 0096, 2, 96, 2.72959, 0.23203, 0
97, Record 0097, 2, 97, 2.72637, 0.23203, 0
98, Record 0098, 2, 98, 2.72637, 0.23203, 0
99, Record 0099, 2, 99, 2.72637, 0.23203, 0
100, Record 0100, 2, 100, 2.72637, 0.23203, 0
101, Record 0101, 2, 101, 2.72637, 0.23203, 0
102, Record 0102, 2, 102, 2.72959, 0.23203, 0
103, Record 0103, 2, 103, 2.72959, 0.23203, 0
104, Record 0104, 2, 104, 2.72637, 0.23203, 0
105, Record 0105, 2, 105, 2.72637, 0.23203, 0
106, Record 0106, 2, 106, 2.72637, 0.23203, 0
107, Record 0107, 2, 107, 2.72959, 0.23203, 0
108, Record 0108, 2, 108, 2.72637, 0.23203, 0
109, Record 0109, 2, 109, 2.72959, 0.23203, 0
110, Record 0110, 2, 110, 2.72637, 0.23203, 0
111, Record 0111, 2, 111, 2.72637, 0.23203, 0
112, Record 0112, 2, 112, 2.72959, 0.23203, 0
113, Record 0113, 2, 113, 2.72637, 0.23203, 0
114, Record 0114, 2, 114, 2.72637, 0.23203, 0
115, Record 0115, 2, 115, 2.72637, 0.23203, 0
116, Record 0116, 2, 116, 2.72637, 0.23203, 0
117, Record 0117, 2, 117, 2.72637, 0.23203, 0
118, Record 0118, 2, 118, 2.72637, 0.23203, 0
119, Record 0119, 2, 119, 2.72637, 0.23203, 0
120, Record 0120, 2, 120, 2.72959, 0.23203, 0
121, Record 0121, 2, 121, 2.72637, 0.23203, 0
122, Record 0122, 2, 122, 2.72637, 0.23203, 0
123, Record 0123, 2, 123, 2.72637, 0.23203, 0
124, Record 0124, 2, 124, 2.72637, 0.23203, 0
125, Record 0125, 2, 125, 2.72637, 0.23203, 0
126, Record 0126, 2, 126, 2.72637, 0.23203, 0
127, Record 0127, 2, 127, 2.72637, 0.23203, 0
128, Record 0128, 2, 128, 2.72637, 0.23203, 0
129, Record 0129, 2, 129, 2.72637, 0.23203, 0
130, Record 0130, 2, 130, 2.72637, 0.23203, 0
131, Record 0131, 2, 131, 2.72637, 0.23203, 0
132, Record 0132, 2, 132, 2.72637, 0.23203, 0
133, Record 0133, 2, 133, 2.72637, 0.23203, 0
134, Record 0134, 2, 134, 2.72959, 0.23203, 0
135, Record 0135, 2, 135, 2.72637, 0.23203, 0
136, Record 0136, 2, 136, 2.72637, 0.23203, 0
137, Record 0137, 2, 137, 2.72637, 0.23203, 0
138, Record 0138, 2, 138, 2.72637, 0.23203, 0
139, Record 0139, 2, 139, 2.72959, 0.23203, 0
140, Record 0140, 2, 140, 2.72637, 0.23203, 0
141, Record 0141, 2, 141, 2.72637, 0.23203, 0
142, Record 0142, 2, 142, 2.72637, 0.23203, 0
143, Record 0143, 2, 143, 2.72637, 0.23203, 0
144, Record 0144, 2, 144, 2.72637, 0.23203, 0
145, Record 0145, 2, 145, 2.72637, 0.23203, 0
146, Record 0146, 2, 146, 2.72637, 0.23203, 0
147, Record 0147, 2, 147, 2.72637, 0.23203, 0
148, Record 0148, 2, 148, 2.72637, 0.23203, 0
149, Record 0149, 2, 149, 2.72637, 0.23203, 0
150, Record 0150, 2, 150, 2.72637, 0.23203, 0


a dump of byte date is as follows

Code:
Address: 3185, Record: 91 - 82-101-99-111-114-100-32-48-48-57-49-0-0-0-0-0-0-0-0-0-0-2-0-0-0-91-205-124-46-64-153-153-109-62-0-
Address: 3220, Record: 92 - 82-101-99-111-114-100-32-48-48-57-50-0-0-0-0-0-0-0-0-0-0-2-0-0-0-92-153-177-46-64-153-153-109-62-0-
Address: 3255, Record: 93 - 82-101-99-111-114-100-32-48-48-57-51-0-0-0-0-0-0-0-0-0-0-2-0-0-0-93-205-124-46-64-153-153-109-62-0-
Address: 3290, Record: 94 - 82-101-99-111-114-100-32-48-48-57-52-0-0-0-0-0-0-0-0-0-0-2-0-0-0-94-205-124-46-64-153-153-109-62-0-
Address: 3325, Record: 95 - 82-101-99-111-114-100-32-48-48-57-53-0-0-0-0-0-0-0-0-0-0-2-0-0-0-95-153-177-46-64-153-153-109-62-0-
Address: 3360, Record: 96 - 82-101-99-111-114-100-32-48-48-57-54-0-0-0-0-0-0-0-0-0-0-2-0-0-0-96-153-177-46-64-153-153-109-62-0-
Address: 3395, Record: 97 - 82-101-99-111-114-100-32-48-48-57-55-0-0-0-0-0-0-0-0-0-0-2-0-0-0-97-205-124-46-64-153-153-109-62-0-
Address: 3430, Record: 98 - 82-101-99-111-114-100-32-48-48-57-56-0-0-0-0-0-0-0-0-0-0-2-0-0-0-98-205-124-46-64-153-153-109-62-0-
Address: 3465, Record: 99 - 82-101-99-111-114-100-32-48-48-57-57-0-0-0-0-0-0-0-0-0-0-2-0-0-0-99-205-124-46-64-153-153-109-62-0-
Address: 3500, Record: 100 - 82-101-99-111-114-100-32-48-49-48-48-0-0-0-0-0-0-0-0-0-0-2-0-0-0-100-205-124-46-64-153-153-109-62-0-
Address: 3535, Record: 101 - 82-101-99-111-114-100-32-48-49-48-49-0-0-0-0-0-0-0-0-0-0-2-0-0-0-101-205-124-46-64-153-153-109-62-0-
Address: 3570, Record: 102 - 82-101-99-111-114-100-32-48-49-48-50-0-0-0-0-0-0-0-0-0-0-2-0-0-0-102-153-177-46-64-153-153-109-62-0-
Address: 3605, Record: 103 - 82-101-99-111-114-100-32-48-49-48-51-0-0-0-0-0-0-0-0-0-0-2-0-0-0-103-153-177-46-64-153-153-109-62-0-
Address: 3640, Record: 104 - 82-101-99-111-114-100-32-48-49-48-52-0-0-0-0-0-0-0-0-0-0-2-0-0-0-104-205-124-46-64-153-153-109-62-0-
Address: 3675, Record: 105 - 82-101-99-111-114-100-32-48-49-48-53-0-0-0-0-0-0-0-0-0-0-2-0-0-0-105-205-124-46-64-153-153-109-62-0-
Address: 3710, Record: 106 - 82-101-99-111-114-100-32-48-49-48-54-0-0-0-0-0-0-0-0-0-0-2-0-0-0-106-205-124-46-64-153-153-109-62-0-
Address: 3745, Record: 107 - 82-101-99-111-114-100-32-48-49-48-55-0-0-0-0-0-0-0-0-0-0-2-0-0-0-107-153-177-46-64-153-153-109-62-0-
Address: 3780, Record: 108 - 82-101-99-111-114-100-32-48-49-48-56-0-0-0-0-0-0-0-0-0-0-2-0-0-0-108-205-124-46-64-153-153-109-62-0-
Address: 3815, Record: 109 - 82-101-99-111-114-100-32-48-49-48-57-0-0-0-0-0-0-0-0-0-0-2-0-0-0-109-153-177-46-64-153-153-109-62-0-
Address: 3850, Record: 110 - 82-101-99-111-114-100-32-48-49-49-48-0-0-0-0-0-0-0-0-0-0-2-0-0-0-110-205-124-46-64-153-153-109-62-0-
Address: 3885, Record: 111 - 82-101-99-111-114-100-32-48-49-49-49-0-0-0-0-0-0-0-0-0-0-2-0-0-0-111-205-124-46-64-153-153-109-62-0-
Address: 3920, Record: 112 - 82-101-99-111-114-100-32-48-49-49-50-0-0-0-0-0-0-0-0-0-0-2-0-0-0-112-153-177-46-64-153-153-109-62-0-
Address: 3955, Record: 113 - 82-101-99-111-114-100-32-48-49-49-51-0-0-0-0-0-0-0-0-0-0-2-0-0-0-113-205-124-46-64-153-153-109-62-0-
Address: 3990, Record: 114 - 82-101-99-111-114-100-32-48-49-49-52-0-0-0-0-0-0-0-0-0-0-2-0-0-0-114-205-124-46-64-153-153-109-62-0-
Address: 4025, Record: 115 - 82-101-99-111-114-100-32-48-49-49-53-0-0-0-0-0-0-0-0-0-0-2-0-0-0-115-205-124-46-64-153-153-109-62-0-
Address: 4060, Record: 116 - 82-101-99-111-114-100-32-48-49-49-54-0-0-0-0-0-0-0-0-0-0-2-0-0-0-116-205-124-46-64-153-153-109-62-0-
Address: 4095, Record: 117 - 82-101-99-111-114-100-32-48-49-49-55-0-0-0-0-0-0-0-0-0-0-2-0-0-0-117-205-124-46-64-153-153-109-62-0-
Address: 4130, Record: 118 - 82-101-99-111-114-100-32-48-49-49-56-0-0-0-0-0-0-0-0-0-0-2-0-0-0-118-205-124-46-64-153-153-109-62-0-
Address: 4165, Record: 119 - 82-101-99-111-114-100-32-48-49-49-57-0-0-0-0-0-0-0-0-0-0-2-0-0-0-119-205-124-46-64-153-153-109-62-0-
Address: 4200, Record: 120 - 82-101-99-111-114-100-32-48-49-50-48-0-0-0-0-0-0-0-0-0-0-2-0-0-0-120-153-177-46-64-153-153-109-62-0-
Address: 4235, Record: 121 - 82-101-99-111-114-100-32-48-49-50-49-0-0-0-0-0-0-0-0-0-0-2-0-0-0-121-205-124-46-64-153-153-109-62-0-
Address: 4270, Record: 122 - 82-101-99-111-114-100-32-48-49-50-50-0-0-0-0-0-0-0-0-0-0-2-0-0-0-122-205-124-46-64-153-153-109-62-0-
Address: 4305, Record: 123 - 82-101-99-111-114-100-32-48-49-50-51-0-0-0-0-0-0-0-0-0-0-2-0-0-0-123-205-124-46-64-153-153-109-62-0-
Address: 4340, Record: 124 - 82-101-99-111-114-100-32-48-49-50-52-0-0-0-0-0-0-0-0-0-0-2-0-0-0-124-205-124-46-64-153-153-109-62-0-
Address: 4375, Record: 125 - 82-101-99-111-114-100-32-48-49-50-53-0-0-0-0-0-0-0-0-0-0-2-0-0-0-125-205-124-46-64-153-153-109-62-0-
Address: 4410, Record: 126 - 82-101-99-111-114-100-32-48-49-50-54-0-0-0-0-0-0-0-0-0-0-2-0-0-0-126-205-124-46-64-153-153-109-62-0-
Address: 4445, Record: 127 - 82-101-99-111-114-100-32-48-49-50-55-0-0-0-0-0-0-0-0-0-0-2-0-0-0-127-205-124-46-64-153-153-109-62-0-
Address: 4480, Record: 128 - 82-101-99-111-114-100-32-48-49-50-56-0-0-0-0-0-0-0-0-0-0-2-0-0-0-128-205-124-46-64-153-153-109-62-0-
Address: 4515, Record: 129 - 82-101-99-111-114-100-32-48-49-50-57-0-0-0-0-0-0-0-0-0-0-2-0-0-0-129-205-124-46-64-153-153-109-62-0-
Address: 4550, Record: 130 - 82-101-99-111-114-100-32-48-49-51-48-0-0-0-0-0-0-0-0-0-0-2-0-0-0-130-205-124-46-64-153-153-109-62-0-
Address: 4585, Record: 131 - 82-101-99-111-114-100-32-48-49-51-49-0-0-0-0-0-0-0-0-0-0-2-0-0-0-131-205-124-46-64-153-153-109-62-0-
Address: 4620, Record: 132 - 82-101-99-111-114-100-32-48-49-51-50-0-0-0-0-0-0-0-0-0-0-2-0-0-0-132-205-124-46-64-153-153-109-62-0-
Address: 4655, Record: 133 - 82-101-99-111-114-100-32-48-49-51-51-0-0-0-0-0-0-0-0-0-0-2-0-0-0-133-205-124-46-64-153-153-109-62-0-
Address: 4690, Record: 134 - 82-101-99-111-114-100-32-48-49-51-52-0-0-0-0-0-0-0-0-0-0-2-0-0-0-134-153-177-46-64-153-153-109-62-0-
Address: 4725, Record: 135 - 82-101-99-111-114-100-32-48-49-51-53-0-0-0-0-0-0-0-0-0-0-2-0-0-0-135-205-124-46-64-153-153-109-62-0-
Address: 4760, Record: 136 - 82-101-99-111-114-100-32-48-49-51-54-0-0-0-0-0-0-0-0-0-0-2-0-0-0-136-205-124-46-64-153-153-109-62-0-
Address: 4795, Record: 137 - 82-101-99-111-114-100-32-48-49-51-55-0-0-0-0-0-0-0-0-0-0-2-0-0-0-137-205-124-46-64-153-153-109-62-0-
Address: 4830, Record: 138 - 82-101-99-111-114-100-32-48-49-51-56-0-0-0-0-0-0-0-0-0-0-2-0-0-0-138-205-124-46-64-153-153-109-62-0-
Address: 4865, Record: 139 - 82-101-99-111-114-100-32-48-49-51-57-0-0-0-0-0-0-0-0-0-0-2-0-0-0-139-153-177-46-64-153-153-109-62-0-
Address: 4900, Record: 140 - 82-101-99-111-114-100-32-48-49-52-48-0-0-0-0-0-0-0-0-0-0-2-0-0-0-140-205-124-46-64-153-153-109-62-0-
Address: 4935, Record: 141 - 82-101-99-111-114-100-32-48-49-52-49-0-0-0-0-0-0-0-0-0-0-2-0-0-0-141-205-124-46-64-153-153-109-62-0-
Address: 4970, Record: 142 - 82-101-99-111-114-100-32-48-49-52-50-0-0-0-0-0-0-0-0-0-0-2-0-0-0-142-205-124-46-64-153-153-109-62-0-
Address: 5005, Record: 143 - 82-101-99-111-114-100-32-48-49-52-51-0-0-0-0-0-0-0-0-0-0-2-0-0-0-143-205-124-46-64-153-153-109-62-0-
Address: 5040, Record: 144 - 82-101-99-111-114-100-32-48-49-52-52-0-0-0-0-0-0-0-0-0-0-2-0-0-0-144-205-124-46-64-153-153-109-62-0-
Address: 5075, Record: 145 - 82-101-99-111-114-100-32-48-49-52-53-0-0-0-0-0-0-0-0-0-0-2-0-0-0-145-205-124-46-64-153-153-109-62-0-
Address: 5110, Record: 146 - 82-101-99-111-114-100-32-48-49-52-54-0-0-0-0-0-0-0-0-0-0-2-0-0-0-146-205-124-46-64-153-153-109-62-0-
Address: 5145, Record: 147 - 82-101-99-111-114-100-32-48-49-52-55-0-0-0-0-0-0-0-0-0-0-2-0-0-0-147-205-124-46-64-153-153-109-62-0-
Address: 5180, Record: 148 - 82-101-99-111-114-100-32-48-49-52-56-0-0-0-0-0-0-0-0-0-0-2-0-0-0-148-205-124-46-64-153-153-109-62-0-
Address: 5215, Record: 149 - 82-101-99-111-114-100-32-48-49-52-57-0-0-0-0-0-0-0-0-0-0-2-0-0-0-149-205-124-46-64-153-153-109-62-0-
Address: 5250, Record: 150 - 82-101-99-111-114-100-32-48-49-53-48-0-0-0-0-0-0-0-0-0-0-2-0-0-0-150-205-124-46-64-153-153-109-62-0-
 
We'd probably learn a bit more if your data dump and byte dumps had more overlap... You're right, it's hard to see why there isn't an error in the byte dump; I though it might be because you switched to the reliable code sometime after writing record 87, but you've stated it's 150 records after a full erase, so it's puzzling.

It looks as if you have a zero-padded string at the start of the record - would you notice a corruption in the middle of that? As noted, you didn't provide the byte dump that early, so we can't see.
 
not sure why my copy/paste lost the first set of records.

Here's the full record set.



Code:
Address: 0, Record: 0 - 35-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-255-
Address: 35, Record: 1 - 82-101-99-111-114-100-32-48-48-48-49-0-0-0-0-0-0-0-0-0-0-2-0-0-0-1-153-177-46-64-153-153-109-62-0-
Address: 70, Record: 2 - 82-101-99-111-114-100-32-48-48-48-50-0-0-0-0-0-0-0-0-0-0-2-0-0-0-2-205-124-46-64-153-153-109-62-0-
Address: 105, Record: 3 - 82-101-99-111-114-100-32-48-48-48-51-0-0-0-0-0-0-0-0-0-0-2-0-0-0-3-153-177-46-64-153-153-109-62-0-
Address: 140, Record: 4 - 82-101-99-111-114-100-32-48-48-48-52-0-0-0-0-0-0-0-0-0-0-2-0-0-0-4-153-177-46-64-153-153-109-62-0-
Address: 175, Record: 5 - 82-101-99-111-114-100-32-48-48-48-53-0-0-0-0-0-0-0-0-0-0-2-0-0-0-5-205-124-46-64-153-153-109-62-0-
Address: 210, Record: 6 - 82-101-99-111-114-100-32-48-48-48-54-0-0-0-0-0-0-0-0-0-0-2-0-0-0-6-205-124-46-64-153-153-109-62-0-
Address: 245, Record: 7 - 82-101-99-111-114-100-32-48-48-48-55-0-0-0-0-0-0-0-0-0-0-2-0-0-0-7-153-177-46-64-153-153-109-62-0-
Address: 280, Record: 8 - 82-101-99-111-114-100-32-48-48-48-56-0-0-0-0-0-0-0-0-0-0-2-0-0-0-8-205-124-46-64-153-153-109-62-0-
Address: 315, Record: 9 - 82-101-99-111-114-100-32-48-48-48-57-0-0-0-0-0-0-0-0-0-0-2-0-0-0-9-205-124-46-64-153-153-109-62-0-
Address: 350, Record: 10 - 82-101-99-111-114-100-32-48-48-49-48-0-0-0-0-0-0-0-0-0-0-2-0-0-0-10-205-124-46-64-153-153-109-62-0-
Address: 385, Record: 11 - 82-101-99-111-114-100-32-48-48-49-49-0-0-0-0-0-0-0-0-0-0-2-0-0-0-11-205-124-46-64-153-153-109-62-0-
Address: 420, Record: 12 - 82-101-99-111-114-100-32-48-48-49-50-0-0-0-0-0-0-0-0-0-0-2-0-0-0-12-153-177-46-64-153-153-109-62-0-
Address: 455, Record: 13 - 82-101-99-111-114-100-32-48-48-49-51-0-0-0-0-0-0-0-0-0-0-2-0-0-0-13-205-124-46-64-153-153-109-62-0-
Address: 490, Record: 14 - 82-101-99-111-114-100-32-48-48-49-52-0-0-0-0-0-0-0-0-0-0-2-0-0-0-14-205-124-46-64-153-153-109-62-0-
Address: 525, Record: 15 - 82-101-99-111-114-100-32-48-48-49-53-0-0-0-0-0-0-0-0-0-0-2-0-0-0-15-205-124-46-64-153-153-109-62-0-
Address: 560, Record: 16 - 82-101-99-111-114-100-32-48-48-49-54-0-0-0-0-0-0-0-0-0-0-2-0-0-0-16-153-177-46-64-153-153-109-62-0-
Address: 595, Record: 17 - 82-101-99-111-114-100-32-48-48-49-55-0-0-0-0-0-0-0-0-0-0-2-0-0-0-17-205-124-46-64-153-153-109-62-0-
Address: 630, Record: 18 - 82-101-99-111-114-100-32-48-48-49-56-0-0-0-0-0-0-0-0-0-0-2-0-0-0-18-205-124-46-64-153-153-109-62-0-
Address: 665, Record: 19 - 82-101-99-111-114-100-32-48-48-49-57-0-0-0-0-0-0-0-0-0-0-2-0-0-0-19-153-177-46-64-153-153-109-62-0-
Address: 700, Record: 20 - 82-101-99-111-114-100-32-48-48-50-48-0-0-0-0-0-0-0-0-0-0-2-0-0-0-20-205-124-46-64-153-153-109-62-0-
Address: 735, Record: 21 - 82-101-99-111-114-100-32-48-48-50-49-0-0-0-0-0-0-0-0-0-0-2-0-0-0-21-153-177-46-64-153-153-109-255-0-
Address: 770, Record: 22 - 82-101-99-111-114-100-32-48-48-50-50-0-0-0-0-0-0-0-0-0-0-2-0-0-0-22-153-177-46-64-153-153-109-62-0-
Address: 805, Record: 23 - 82-101-99-111-114-100-32-48-48-50-51-0-0-0-0-0-0-0-0-0-0-2-0-0-0-23-205-124-46-64-153-153-109-62-0-
Address: 840, Record: 24 - 82-101-99-111-114-100-32-48-48-50-52-0-0-0-0-0-0-0-0-0-0-2-0-0-0-24-205-124-46-64-153-153-109-62-0-
Address: 875, Record: 25 - 82-101-99-111-114-100-32-48-48-50-53-0-0-0-0-0-0-0-0-0-0-2-0-0-0-25-153-177-46-64-153-153-109-62-0-
Address: 910, Record: 26 - 82-101-99-111-114-100-32-48-48-50-54-0-0-0-0-0-0-0-0-0-0-2-0-0-0-26-205-124-46-64-153-153-109-62-0-
Address: 945, Record: 27 - 82-101-99-111-114-100-32-48-48-50-55-0-0-0-0-0-0-0-0-0-0-2-0-0-0-27-153-177-46-64-153-153-109-62-0-
Address: 980, Record: 28 - 82-101-99-111-114-100-32-48-48-50-56-0-0-0-0-0-0-0-0-0-0-2-0-0-0-28-153-177-46-64-153-153-109-62-0-
Address: 1015, Record: 29 - 82-101-99-111-114-100-32-48-48-50-57-0-0-0-0-0-0-0-0-0-0-2-0-0-0-29-205-124-46-64-153-153-109-62-0-
Address: 1050, Record: 30 - 82-101-99-111-114-100-32-48-48-51-48-0-0-0-0-0-0-0-0-0-0-2-0-0-0-30-153-177-46-64-153-153-109-62-0-
Address: 1085, Record: 31 - 82-101-99-111-114-100-32-48-48-51-49-0-0-0-0-0-0-0-0-0-0-2-0-0-0-31-205-124-46-64-153-153-109-62-0-
Address: 1120, Record: 32 - 82-101-99-111-114-100-32-48-48-51-50-0-0-0-0-0-0-0-0-0-0-2-0-0-0-32-205-124-46-64-153-153-109-62-0-
Address: 1155, Record: 33 - 82-101-99-111-114-100-32-48-48-51-51-0-0-0-0-0-0-0-0-0-0-2-0-0-0-33-205-124-46-64-153-153-109-62-0-
Address: 1190, Record: 34 - 82-101-99-111-114-100-32-48-48-51-52-0-0-0-0-0-0-0-0-0-0-2-0-0-0-34-205-124-46-64-153-153-109-62-0-
Address: 1225, Record: 35 - 82-101-99-111-114-100-32-48-48-51-53-0-0-0-0-0-0-0-0-0-0-2-0-0-0-35-205-124-46-64-153-153-109-62-0-
Address: 1260, Record: 36 - 82-101-99-111-114-100-32-48-48-51-54-0-0-0-0-0-0-0-0-0-0-0-0-0-0-36-205-124-46-64-153-153-109-62-0-
Address: 1295, Record: 37 - 82-101-99-111-114-100-32-48-48-51-55-0-0-0-0-0-0-0-0-0-0-2-0-0-0-37-205-124-46-64-153-153-109-62-0-
Address: 1330, Record: 38 - 82-101-99-111-114-100-32-48-48-51-56-0-0-0-0-0-0-0-0-0-0-2-0-0-0-38-205-124-46-64-153-153-109-62-0-
Address: 1365, Record: 39 - 82-101-99-111-114-100-32-48-48-51-57-0-0-0-0-0-0-0-0-0-0-2-0-0-0-39-153-177-46-64-153-153-109-62-0-
Address: 1400, Record: 40 - 82-101-99-111-114-100-32-48-48-52-48-0-0-0-0-0-0-0-0-0-0-2-0-0-0-40-153-177-46-64-153-153-109-62-0-
Address: 1435, Record: 41 - 82-101-99-111-114-100-32-48-48-52-49-0-0-0-0-0-0-0-0-0-0-2-0-0-0-41-205-124-46-64-153-153-109-62-0-
Address: 1470, Record: 42 - 82-101-99-111-114-100-32-48-48-52-50-0-0-0-0-0-0-0-0-0-0-2-0-0-0-42-153-177-46-64-153-153-109-62-0-
Address: 1505, Record: 43 - 82-101-99-111-114-100-32-48-48-52-51-0-0-0-0-0-0-0-0-0-0-2-0-0-0-43-153-177-46-64-153-255-255-255-0-
Address: 1540, Record: 44 - 82-101-99-111-114-100-32-48-48-52-52-0-0-0-0-0-0-0-0-0-0-2-0-0-0-44-205-124-46-64-153-153-109-62-0-
Address: 1575, Record: 45 - 82-101-99-111-114-100-32-48-48-52-53-0-0-0-0-0-0-0-0-0-0-2-0-0-0-45-153-177-46-64-153-153-109-62-0-
Address: 1610, Record: 46 - 82-101-99-111-114-100-32-48-48-52-54-0-0-0-0-0-0-0-0-0-0-2-0-0-0-46-205-124-46-64-153-153-109-62-0-
Address: 1645, Record: 47 - 82-101-99-111-114-100-32-48-48-52-55-0-0-0-0-0-0-0-0-0-0-2-0-0-0-47-153-177-46-64-153-153-109-62-0-
Address: 1680, Record: 48 - 82-101-99-111-114-100-32-48-48-52-56-0-0-0-0-0-0-0-0-0-0-2-0-0-0-48-205-124-46-64-153-153-109-62-0-
Address: 1715, Record: 49 - 82-101-99-111-114-100-32-48-48-52-57-0-0-0-0-0-0-0-0-0-0-2-0-0-0-49-205-124-46-64-153-153-109-62-0-
Address: 1750, Record: 50 - 82-101-99-111-114-100-32-48-48-53-48-0-0-0-0-0-0-0-0-0-0-2-0-0-0-50-153-177-46-64-153-153-109-62-0-
Address: 1785, Record: 51 - 82-101-99-111-114-100-32-48-48-53-49-0-0-0-0-0-0-0-0-0-0-2-0-0-0-51-205-124-46-64-153-153-109-62-0-
Address: 1820, Record: 52 - 82-101-99-111-114-100-32-48-48-53-50-0-0-0-0-0-0-0-0-0-0-2-0-0-0-52-205-124-46-64-153-153-109-62-0-
Address: 1855, Record: 53 - 82-101-99-111-114-100-32-48-48-53-51-0-0-0-0-0-0-0-0-0-0-2-0-0-0-53-205-124-46-64-153-153-109-62-0-
Address: 1890, Record: 54 - 82-101-99-111-114-100-32-48-48-53-52-0-0-0-0-0-0-0-0-0-0-2-0-0-0-54-205-124-46-64-153-153-109-62-0-
Address: 1925, Record: 55 - 82-101-99-111-114-100-32-48-48-53-53-0-0-0-0-0-0-0-0-0-0-2-0-0-0-55-153-177-46-64-153-153-109-62-0-
Address: 1960, Record: 56 - 82-101-99-111-114-100-32-48-48-53-54-0-0-0-0-0-0-0-0-0-0-2-0-0-0-56-153-177-46-64-153-153-109-62-0-
Address: 1995, Record: 57 - 82-101-99-111-114-100-32-48-48-53-55-0-0-0-0-0-0-0-0-0-0-2-0-0-0-57-205-124-46-64-153-153-109-62-0-
Address: 2030, Record: 58 - 82-101-99-111-114-100-32-48-48-53-56-0-0-0-0-0-0-0-0-0-0-2-0-0-0-58-205-124-46-64-153-153-109-62-0-
Address: 2065, Record: 59 - 82-101-99-111-114-100-32-48-48-53-57-0-0-0-0-0-0-0-0-0-0-2-0-0-0-59-205-124-46-64-153-153-109-62-0-
Address: 2100, Record: 60 - 82-101-99-111-114-100-32-48-48-54-48-0-0-0-0-0-0-0-0-0-0-2-0-0-0-60-205-124-46-64-153-153-109-62-0-
Address: 2135, Record: 61 - 82-101-99-111-114-100-32-48-48-54-49-0-0-0-0-0-0-0-0-0-0-2-0-0-0-61-205-124-46-64-153-153-109-62-0-
Address: 2170, Record: 62 - 82-101-99-111-114-100-32-48-48-54-50-0-0-0-0-0-0-0-0-0-0-2-0-0-0-62-153-177-46-64-153-153-109-62-0-
Address: 2205, Record: 63 - 82-101-99-111-114-100-32-48-48-54-51-0-0-0-0-0-0-0-0-0-0-2-0-0-0-63-205-124-46-64-153-153-109-62-0-
Address: 2240, Record: 64 - 82-101-99-111-114-100-32-48-48-54-52-0-0-0-0-0-0-0-0-0-0-2-0-0-0-64-205-124-46-64-153-153-109-62-0-
Address: 2275, Record: 65 - 82-101-99-111-114-100-32-48-48-54-53-0-0-0-0-0-0-0-0-0-0-2-0-0-0-65-205-124-46-255-153-153-109-62-0-
Address: 2310, Record: 66 - 82-101-99-111-114-100-32-48-48-54-54-0-0-0-0-0-0-0-0-0-0-2-0-0-0-66-205-124-46-64-153-153-109-62-0-
Address: 2345, Record: 67 - 82-101-99-111-114-100-32-48-48-54-55-0-0-0-0-0-0-0-0-0-0-2-0-0-0-67-153-177-46-64-153-153-109-62-0-
Address: 2380, Record: 68 - 82-101-99-111-114-100-32-48-48-54-56-0-0-0-0-0-0-0-0-0-0-2-0-0-0-68-205-124-46-64-153-153-109-62-0-
Address: 2415, Record: 69 - 82-101-99-111-114-100-32-48-48-54-57-0-0-0-0-0-0-0-0-0-0-2-0-0-0-69-205-124-46-64-153-153-109-62-0-
Address: 2450, Record: 70 - 82-101-99-111-114-100-32-48-48-55-48-0-0-0-0-0-0-0-0-0-0-2-0-0-0-70-153-177-46-64-153-153-109-62-0-
Address: 2485, Record: 71 - 82-101-99-111-114-100-32-48-48-55-49-0-0-0-0-0-0-0-0-0-0-2-0-0-0-71-205-124-46-64-153-153-109-62-0-
Address: 2520, Record: 72 - 82-101-99-111-114-100-32-48-48-55-50-0-0-0-0-0-0-0-0-0-0-2-0-0-0-72-205-124-46-64-153-153-109-62-0-
Address: 2555, Record: 73 - 82-101-99-111-114-100-32-48-48-55-51-0-0-0-0-0-0-0-0-0-0-2-0-0-0-73-205-124-46-64-153-153-109-62-0-
Address: 2590, Record: 74 - 82-101-99-111-114-100-32-48-48-55-52-0-0-0-0-0-0-0-0-0-0-2-0-0-0-74-205-124-46-64-153-153-109-62-0-
Address: 2625, Record: 75 - 82-101-99-111-114-100-32-48-48-55-53-0-0-0-0-0-0-0-0-0-0-2-0-0-0-75-205-124-46-64-153-153-109-62-0-
Address: 2660, Record: 76 - 82-101-99-111-114-100-32-48-48-55-54-0-0-0-0-0-0-0-0-0-0-2-0-0-0-76-153-177-46-64-153-153-109-62-0-
Address: 2695, Record: 77 - 82-101-99-111-114-100-32-48-48-55-55-0-0-0-0-0-0-0-0-0-0-2-0-0-0-77-153-177-46-64-153-153-109-62-0-
Address: 2730, Record: 78 - 82-101-99-111-114-100-32-48-48-55-56-0-0-0-0-0-0-0-0-0-0-2-0-0-0-78-153-177-46-64-153-153-109-62-0-
Address: 2765, Record: 79 - 82-101-99-111-114-100-32-48-48-55-57-0-0-0-0-0-0-0-0-0-0-2-0-0-0-79-153-177-46-64-153-153-109-62-0-
Address: 2800, Record: 80 - 82-101-99-111-114-100-32-48-48-56-48-0-0-0-0-0-0-0-0-0-0-2-0-0-0-80-205-124-46-64-153-153-109-62-0-
Address: 2835, Record: 81 - 82-101-99-111-114-100-32-48-48-56-49-0-0-0-0-0-0-0-0-0-0-2-0-0-0-81-205-124-46-64-153-153-109-62-0-
Address: 2870, Record: 82 - 82-101-99-111-114-100-32-48-48-56-50-0-0-0-0-0-0-0-0-0-0-2-0-0-0-82-205-124-46-64-153-153-109-62-0-
Address: 2905, Record: 83 - 82-101-99-111-114-100-32-48-48-56-51-0-0-0-0-0-0-0-0-0-0-2-0-0-0-83-205-124-46-64-153-153-109-62-0-
Address: 2940, Record: 84 - 82-101-99-111-114-100-32-48-48-56-52-0-0-0-0-0-0-0-0-0-0-2-0-0-0-84-205-124-46-64-153-153-109-62-0-
Address: 2975, Record: 85 - 82-101-99-111-114-100-32-48-48-56-53-0-0-0-0-0-0-0-0-0-0-2-0-0-0-85-205-124-46-64-153-153-109-62-0-
Address: 3010, Record: 86 - 82-101-99-111-114-100-32-48-48-56-54-0-0-0-0-0-0-0-0-0-0-2-0-0-0-86-153-177-46-64-153-153-109-62-0-
Address: 3045, Record: 87 - 82-101-99-111-114-100-32-48-48-56-55-0-0-0-0-0-0-0-0-0-0-2-0-0-0-87-153-255-255-255-153-153-109-62-0-
Address: 3080, Record: 88 - 82-101-99-111-114-100-32-48-48-56-56-0-0-0-0-0-0-0-0-0-0-2-0-0-0-88-205-124-46-64-153-153-109-62-0-
Address: 3115, Record: 89 - 82-101-99-111-114-100-32-48-48-56-57-0-0-0-0-0-0-0-0-0-0-2-0-0-0-89-153-177-46-64-153-153-109-62-0-
Address: 3150, Record: 90 - 82-101-99-111-114-100-32-48-48-57-48-0-0-0-0-0-0-0-0-0-0-2-0-0-0-90-205-124-46-64-153-153-109-62-0-
Address: 3185, Record: 91 - 82-101-99-111-114-100-32-48-48-57-49-0-0-0-0-0-0-0-0-0-0-2-0-0-0-91-205-124-46-64-153-153-109-62-0-
Address: 3220, Record: 92 - 82-101-99-111-114-100-32-48-48-57-50-0-0-0-0-0-0-0-0-0-0-2-0-0-0-92-153-177-46-64-153-153-109-62-0-
Address: 3255, Record: 93 - 82-101-99-111-114-100-32-48-48-57-51-0-0-0-0-0-0-0-0-0-0-2-0-0-0-93-205-124-46-64-153-153-109-62-0-
Address: 3290, Record: 94 - 82-101-99-111-114-100-32-48-48-57-52-0-0-0-0-0-0-0-0-0-0-2-0-0-0-94-205-124-46-64-153-153-109-62-0-
Address: 3325, Record: 95 - 82-101-99-111-114-100-32-48-48-57-53-0-0-0-0-0-0-0-0-0-0-2-0-0-0-95-153-177-46-64-153-153-109-62-0-
Address: 3360, Record: 96 - 82-101-99-111-114-100-32-48-48-57-54-0-0-0-0-0-0-0-0-0-0-2-0-0-0-96-153-177-46-64-153-153-109-62-0-
Address: 3395, Record: 97 - 82-101-99-111-114-100-32-48-48-57-55-0-0-0-0-0-0-0-0-0-0-2-0-0-0-97-205-124-46-64-153-153-109-62-0-
Address: 3430, Record: 98 - 82-101-99-111-114-100-32-48-48-57-56-0-0-0-0-0-0-0-0-0-0-2-0-0-0-98-205-124-46-64-153-153-109-62-0-
Address: 3465, Record: 99 - 82-101-99-111-114-100-32-48-48-57-57-0-0-0-0-0-0-0-0-0-0-2-0-0-0-99-205-124-46-64-153-153-109-62-0-
Address: 3500, Record: 100 - 82-101-99-111-114-100-32-48-49-48-48-0-0-0-0-0-0-0-0-0-0-2-0-0-0-100-205-124-46-64-153-153-109-62-0-
Address: 3535, Record: 101 - 82-101-99-111-114-100-32-48-49-48-49-0-0-0-0-0-0-0-0-0-0-2-0-0-0-101-205-124-46-64-153-153-109-62-0-
Address: 3570, Record: 102 - 82-101-99-111-114-100-32-48-49-48-50-0-0-0-0-0-0-0-0-0-0-2-0-0-0-102-153-177-46-64-153-153-109-62-0-
Address: 3605, Record: 103 - 82-101-99-111-114-100-32-48-49-48-51-0-0-0-0-0-0-0-0-0-0-2-0-0-0-103-153-177-46-64-153-153-109-62-0-
Address: 3640, Record: 104 - 82-101-99-111-114-100-32-48-49-48-52-0-0-0-0-0-0-0-0-0-0-2-0-0-0-104-205-124-46-64-153-153-109-62-0-
Address: 3675, Record: 105 - 82-101-99-111-114-100-32-48-49-48-53-0-0-0-0-0-0-0-0-0-0-2-0-0-0-105-205-124-46-64-153-153-109-62-0-
Address: 3710, Record: 106 - 82-101-99-111-114-100-32-48-49-48-54-0-0-0-0-0-0-0-0-0-0-2-0-0-0-106-205-124-46-64-153-153-109-62-0-
Address: 3745, Record: 107 - 82-101-99-111-114-100-32-48-49-48-55-0-0-0-0-0-0-0-0-0-0-2-0-0-0-107-153-177-46-64-153-153-109-62-0-
Address: 3780, Record: 108 - 82-101-99-111-114-100-32-48-49-48-56-0-0-0-0-0-0-0-0-0-0-2-0-0-0-108-205-124-46-64-153-153-109-62-0-
Address: 3815, Record: 109 - 82-101-99-111-114-100-32-48-49-48-57-0-0-0-0-0-0-0-0-0-0-2-0-0-0-109-153-177-46-64-153-153-109-62-0-
Address: 3850, Record: 110 - 82-101-99-111-114-100-32-48-49-49-48-0-0-0-0-0-0-0-0-0-0-2-0-0-0-110-205-124-46-64-153-153-109-62-0-
Address: 3885, Record: 111 - 82-101-99-111-114-100-32-48-49-49-49-0-0-0-0-0-0-0-0-0-0-2-0-0-0-111-205-124-46-64-153-153-109-62-0-
Address: 3920, Record: 112 - 82-101-99-111-114-100-32-48-49-49-50-0-0-0-0-0-0-0-0-0-0-2-0-0-0-112-153-177-46-64-153-153-109-62-0-
Address: 3955, Record: 113 - 82-101-99-111-114-100-32-48-49-49-51-0-0-0-0-0-0-0-0-0-0-2-0-0-0-113-205-124-46-64-153-153-109-62-0-
Address: 3990, Record: 114 - 82-101-99-111-114-100-32-48-49-49-52-0-0-0-0-0-0-0-0-0-0-2-0-0-0-114-205-124-46-64-153-153-109-62-0-
Address: 4025, Record: 115 - 82-101-99-111-114-100-32-48-49-49-53-0-0-0-0-0-0-0-0-0-0-2-0-0-0-115-205-124-46-64-153-153-109-62-0-
Address: 4060, Record: 116 - 82-101-99-111-114-100-32-48-49-49-54-0-0-0-0-0-0-0-0-0-0-2-0-0-0-116-205-124-46-64-153-153-109-62-0-
Address: 4095, Record: 117 - 82-101-99-111-114-100-32-48-49-49-55-0-0-0-0-0-0-0-0-0-0-2-0-0-0-117-205-124-46-64-153-153-109-62-0-
Address: 4130, Record: 118 - 82-101-99-111-114-100-32-48-49-49-56-0-0-0-0-0-0-0-0-0-0-2-0-0-0-118-205-124-46-64-153-153-109-62-0-
Address: 4165, Record: 119 - 82-101-99-111-114-100-32-48-49-49-57-0-0-0-0-0-0-0-0-0-0-2-0-0-0-119-205-124-46-64-153-153-109-62-0-
Address: 4200, Record: 120 - 82-101-99-111-114-100-32-48-49-50-48-0-0-0-0-0-0-0-0-0-0-2-0-0-0-120-153-177-46-64-153-153-109-62-0-
Address: 4235, Record: 121 - 82-101-99-111-114-100-32-48-49-50-49-0-0-0-0-0-0-0-0-0-0-2-0-0-0-121-205-124-46-64-153-153-109-62-0-
Address: 4270, Record: 122 - 82-101-99-111-114-100-32-48-49-50-50-0-0-0-0-0-0-0-0-0-0-2-0-0-0-122-205-124-46-64-153-153-109-62-0-
Address: 4305, Record: 123 - 82-101-99-111-114-100-32-48-49-50-51-0-0-0-0-0-0-0-0-0-0-2-0-0-0-123-205-124-46-64-153-153-109-62-0-
Address: 4340, Record: 124 - 82-101-99-111-114-100-32-48-49-50-52-0-0-0-0-0-0-0-0-0-0-2-0-0-0-124-205-124-46-64-153-153-109-62-0-
Address: 4375, Record: 125 - 82-101-99-111-114-100-32-48-49-50-53-0-0-0-0-0-0-0-0-0-0-2-0-0-0-125-205-124-46-64-153-153-109-62-0-
Address: 4410, Record: 126 - 82-101-99-111-114-100-32-48-49-50-54-0-0-0-0-0-0-0-0-0-0-2-0-0-0-126-205-124-46-64-153-153-109-62-0-
Address: 4445, Record: 127 - 82-101-99-111-114-100-32-48-49-50-55-0-0-0-0-0-0-0-0-0-0-2-0-0-0-127-205-124-46-64-153-153-109-62-0-
Address: 4480, Record: 128 - 82-101-99-111-114-100-32-48-49-50-56-0-0-0-0-0-0-0-0-0-0-2-0-0-0-128-205-124-46-64-153-153-109-62-0-
Address: 4515, Record: 129 - 82-101-99-111-114-100-32-48-49-50-57-0-0-0-0-0-0-0-0-0-0-2-0-0-0-129-205-124-46-64-153-153-109-62-0-
Address: 4550, Record: 130 - 82-101-99-111-114-100-32-48-49-51-48-0-0-0-0-0-0-0-0-0-0-2-0-0-0-130-205-124-46-64-153-153-109-62-0-
Address: 4585, Record: 131 - 82-101-99-111-114-100-32-48-49-51-49-0-0-0-0-0-0-0-0-0-0-2-0-0-0-131-205-124-46-64-153-153-109-62-0-
Address: 4620, Record: 132 - 82-101-99-111-114-100-32-48-49-51-50-0-0-0-0-0-0-0-0-0-0-2-0-0-0-132-205-124-46-64-153-153-109-62-0-
Address: 4655, Record: 133 - 82-101-99-111-114-100-32-48-49-51-51-0-0-0-0-0-0-0-0-0-0-2-0-0-0-133-205-124-46-64-153-153-109-62-0-
Address: 4690, Record: 134 - 82-101-99-111-114-100-32-48-49-51-52-0-0-0-0-0-0-0-0-0-0-2-0-0-0-134-153-177-46-64-153-153-109-62-0-
Address: 4725, Record: 135 - 82-101-99-111-114-100-32-48-49-51-53-0-0-0-0-0-0-0-0-0-0-2-0-0-0-135-205-124-46-64-153-153-109-62-0-
Address: 4760, Record: 136 - 82-101-99-111-114-100-32-48-49-51-54-0-0-0-0-0-0-0-0-0-0-2-0-0-0-136-205-124-46-64-153-153-109-62-0-
Address: 4795, Record: 137 - 82-101-99-111-114-100-32-48-49-51-55-0-0-0-0-0-0-0-0-0-0-2-0-0-0-137-205-124-46-64-153-153-109-62-0-
Address: 4830, Record: 138 - 82-101-99-111-114-100-32-48-49-51-56-0-0-0-0-0-0-0-0-0-0-2-0-0-0-138-205-124-46-64-153-153-109-62-0-
Address: 4865, Record: 139 - 82-101-99-111-114-100-32-48-49-51-57-0-0-0-0-0-0-0-0-0-0-2-0-0-0-139-153-177-46-64-153-153-109-62-0-
Address: 4900, Record: 140 - 82-101-99-111-114-100-32-48-49-52-48-0-0-0-0-0-0-0-0-0-0-2-0-0-0-140-205-124-46-64-153-153-109-62-0-
Address: 4935, Record: 141 - 82-101-99-111-114-100-32-48-49-52-49-0-0-0-0-0-0-0-0-0-0-2-0-0-0-141-205-124-46-64-153-153-109-62-0-
Address: 4970, Record: 142 - 82-101-99-111-114-100-32-48-49-52-50-0-0-0-0-0-0-0-0-0-0-2-0-0-0-142-205-124-46-64-153-153-109-62-0-
Address: 5005, Record: 143 - 82-101-99-111-114-100-32-48-49-52-51-0-0-0-0-0-0-0-0-0-0-2-0-0-0-143-205-124-46-64-153-153-109-62-0-
Address: 5040, Record: 144 - 82-101-99-111-114-100-32-48-49-52-52-0-0-0-0-0-0-0-0-0-0-2-0-0-0-144-205-124-46-64-153-153-109-62-0-
Address: 5075, Record: 145 - 82-101-99-111-114-100-32-48-49-52-53-0-0-0-0-0-0-0-0-0-0-2-0-0-0-145-205-124-46-64-153-153-109-62-0-
Address: 5110, Record: 146 - 82-101-99-111-114-100-32-48-49-52-54-0-0-0-0-0-0-0-0-0-0-2-0-0-0-146-205-124-46-64-153-153-109-62-0-
Address: 5145, Record: 147 - 82-101-99-111-114-100-32-48-49-52-55-0-0-0-0-0-0-0-0-0-0-2-0-0-0-147-205-124-46-64-153-153-109-62-0-
Address: 5180, Record: 148 - 82-101-99-111-114-100-32-48-49-52-56-0-0-0-0-0-0-0-0-0-0-2-0-0-0-148-205-124-46-64-153-153-109-62-0-
Address: 5215, Record: 149 - 82-101-99-111-114-100-32-48-49-52-57-0-0-0-0-0-0-0-0-0-0-2-0-0-0-149-205-124-46-64-153-153-109-62-0-
Address: 5250, Record: 150 - 82-101-99-111-114-100-32-48-49-53-48-0-0-0-0-0-0-0-0-0-0-2-0-0-0-150-205-124-46-64-153-153-109-62-0-
 
It's only going to happen when you write a multi-byte value (i.e. your WriteBytes function above) across a page boundary. It's not completely clear what other values make up the records but I'm guessing most of them are written as single bytes, which aren't going to trigger the issue because they can't span across a boundary. And the location of a boundary within a record shifts around due to their size not being a multiple of 2.
 
What @jmarsh said.

I just did a quick spreadsheet and if you’d carried on a bit longer, you’d’ve seen an error at record 160, none at 182 (because the 256-byte boundary is exactly between your two floats), then the errors resuming at record 277. That depends on my spreadsheet being right, but even if not, the principle remains.

As noted in post#2 above, you need to check for boundary-spanning writes and split them. Here's some speculative code that is intended to do that, for any flash address or data length. It compiles, but no further testing done. I've omitted the actual flash write code for brevity, but commented where it should be.
C++:
void safeWrite(uint8_t data, size_t len, size_t flashAddr)
{
  const size_t pageSize = 256;
  size_t pageOffset = flashAddr % pageSize;

  // if we span boundary, write up to end of page
  if (pageOffset + len > pageSize) // write will span page boundary
  {
    size_t firstPart = pageSize - pageOffset;
    safeWrite(data, firstPart, flashAddr); // write up to the page boundary
    data += firstPart;
    flashAddr += firstPart; // account for data already written
    len -= firstPart;
  }

  // if there are whole pages to write, do those
  while (len > pageSize)
  {
    safeWrite(data, pageSize, flashAddr);
    data += pageSize;
    flashAddr += pageSize;
    len -= pageSize;
  }

  // code here to actually write data to flash:
  // it's guaranteed NOT to cross the boundary!
  
}
 
Back
Top