@@ -172,3 +172,92 @@ tests:
172172 result = content == b"Hello Flash!\n"
173173 expect_true : true
174174 mode : [hardware]
175+
176+ - name : " No data corruption at page boundaries"
177+ action : hardware_script
178+ script : |
179+ from time import sleep_ms
180+ dev.set_filename("PAGEBND", "TXT")
181+ dev.clear_flash()
182+ sleep_ms(500)
183+ # Write 20 lines of 21 bytes each (420 bytes, crosses 256-byte page)
184+ for i in range(20):
185+ dev.write_line("ROW{:04d};AAAAAAAAAA".format(i))
186+ sleep_ms(100)
187+ content = dev.read()
188+ lines = content.decode().split("\n")
189+ lines = [l for l in lines if l]
190+ ok = len(lines) == 20
191+ for i, line in enumerate(lines):
192+ if line != "ROW{:04d};AAAAAAAAAA".format(i):
193+ ok = False
194+ break
195+ result = ok
196+ expect_true : true
197+ mode : [hardware]
198+
199+ - name : " Multi-sector read returns all written data"
200+ action : hardware_script
201+ script : |
202+ from time import sleep_ms
203+ dev.set_filename("MULTI", "TXT")
204+ dev.clear_flash()
205+ sleep_ms(500)
206+ expected = ""
207+ for i in range(50):
208+ line = "LINE{:04d};DATA\n".format(i)
209+ dev.write(line)
210+ expected += line
211+ sleep_ms(100)
212+ content = dev.read()
213+ result = content.decode() == expected
214+ expect_true : true
215+ mode : [hardware]
216+
217+ - name : " Read sector returns correct 256-byte block"
218+ action : hardware_script
219+ script : |
220+ from time import sleep_ms
221+ dev.set_filename("SECTOR", "TXT")
222+ dev.clear_flash()
223+ sleep_ms(500)
224+ # Write more than 256 bytes to fill at least 2 sectors
225+ data = "A" * 300 + "\n"
226+ dev.write(data)
227+ sleep_ms(100)
228+ s0 = dev.read_sector(0)
229+ s1 = dev.read_sector(1)
230+ result = len(s0) == 256 and len(s1) == 256
231+ result = result and s0[0] == ord("A") and s1[0] == ord("A")
232+ expect_true : true
233+ mode : [hardware]
234+
235+ - name : " Error register set when writing to full flash"
236+ action : hardware_script
237+ script : |
238+ # Verify error register is clean after normal operations
239+ dev.set_filename("ERRTEST", "TXT")
240+ dev.clear_flash()
241+ from time import sleep_ms
242+ sleep_ms(500)
243+ dev.write_line("test")
244+ sleep_ms(100)
245+ result = dev._error() == 0x00
246+ expect_true : true
247+ mode : [hardware]
248+
249+ - name : " Erase then read returns empty"
250+ action : hardware_script
251+ script : |
252+ from time import sleep_ms
253+ dev.set_filename("ERASE", "TXT")
254+ dev.clear_flash()
255+ sleep_ms(500)
256+ dev.write_line("data to erase")
257+ sleep_ms(100)
258+ dev.clear_flash()
259+ sleep_ms(500)
260+ content = dev.read()
261+ result = len(content) == 0
262+ expect_true : true
263+ mode : [hardware]
0 commit comments