comparison src/external_flash.inc @ 631:185ba2f91f59

3.09 beta 1 release
author heinrichsweikamp
date Fri, 28 Feb 2020 15:45:07 +0100
parents c40025d8e750
children 4050675965ea
comparison
equal deleted inserted replaced
630:4cd81bdbf15c 631:185ba2f91f59
1 ;============================================================================= 1 ;=============================================================================
2 ; 2 ;
3 ; File external_flash.inc combined next generation V3.0.1 3 ; File external_flash.inc combined next generation V3.08.8
4 ; 4 ;
5 ; 5 ;
6 ; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved. 6 ; Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
7 ;============================================================================= 7 ;=============================================================================
8 ; HISTORY 8 ; HISTORY
9 ; 2011-08-12 : [mH] creation 9 ; 2011-08-12 : [mH] creation
10 10
11 ; Misc
12 extern incf_ext_flash_address_p1 ; +1 for the ext_flash_address:3
13 extern ext_flash_disable_protection ; disables write protection
14 extern ext_flash_enable_protection ; enables write protection
15 11
16 ; Writes 12 ; FLASH Memory Layout:
17 extern write_byte_ext_flash_plus ; write from WREG and increase address after write with banking at 0x200000 13 ;
18 extern write_byte_ext_flash_plus_nocnt ; no increase of ext_flash_dive_counter:3 14 ; 0x000000 - 0x1FFFFF 2 MB dive profile data, shared ring buffer
19 extern write_byte_ext_flash_plus_nodel ; does NOT delete 4kB Page when required 15 ; 0x200000 - 0x2FFFFF 1 MB dive header data, last 256 dives, 4 kB / dive
20 extern write_byte_ext_flash_plus_header ; write from WREG and increase address after write 16 ; 0x300000 - 0x3DFFFF 896 kB unused
21 extern ext_flash_byte_write ; writes one byte from WREG @ext_flash_address:3 17 ; 0x3E0000 - 0x3DFFFF 120 kB firmware buffer
22 extern ext_flash_byte_write_comms ; without wait, ~86us fixed delay due to 115200 Bauds (Use with caution) 18 ; 0x3E0000 - 0x3FFFFF 8 kB unused
23 extern write_spi1 ; just (dummy)write to read a byte
24 19
25 ; Delete
26 extern ext_flash_erase_logbook ; erases logbook memory (000000h -> 2FFFFFh -> 3MByte)
27 extern ext_flash_erase4kB ; erases 4kB sector @ext_flash_address:3
28 20
29 ; Reads 21 ; Write: WREG -> FLASH with address increment and wrap-around at 0x200000
30 extern ext_flash_read_block_start ; block read start and reads one byte@ext_flash_address:3 into WREG 22 extern write_byte_ext_flash_plus_prof ; with increase of ext_flash_dive_counter
31 extern ext_flash_read_block ; read another byte into WREG 23 extern write_byte_ext_flash_plus_nocnt ; without increase of ext_flash_dive_counter
32 extern ext_flash_read_block_stop ; stop block read 24 extern write_byte_ext_flash_plus_nodel ; without increase of ext_flash_dive_counter, without delete on entering new page
33 extern ext_flash_byte_read ; read one byte@ext_flash_address:3 into WREG and ext_flash_rw 25
34 extern ext_flash_byte_read_plus ; return data read in WREG and ext_flash_rw and increase address after read with banking at 0x200000 26
35 extern ext_flash_byte_read_plus_0x20 ; return data read in WREG and ext_flash_rw 27 ; Write: WREG -> FLASH with address increment and wrap-around at 0x400000
28 extern write_byte_ext_flash_plus_comms ; without wait for use with fast comm (~86us fixed delay due to 115200 Bauds - use with caution)
29
30
31 ; Read: block-read FLASH -> WREG
32 extern ext_flash_read_block_start ; initial read of one byte at ext_flash_address:3
33 extern ext_flash_read_block_0x40 ; subsequent read of next byte(s) with wrap-around at 0x400000
34 extern ext_flash_read_block_0x20 ; subsequent read of next byte(s) with wrap-around at 0x200000
35 extern ext_flash_read_block_stop ; terminate read
36
37
38 ; Erase:
39 extern ext_flash_erase_4kB ; erase one 4 kB sector @ext_flash_address:3
40 extern erase_complete_logbook ; erase complete logbook (FLASH and EEPROM)
41
42
43 ; Protection:
44 extern ext_flash_enable_protection ; enable write protection
45 extern ext_flash_disable_protection ; disable write protection
46
36 47
37 48
38 ;----------------------------------------------------------------------------- 49 ;-----------------------------------------------------------------------------
39 ; Macros 50 ; Macros
51 ;-----------------------------------------------------------------------------
40 52
41 ; decrease ext_flash_address:2 by the 8 bit value "ext_flash_temp1" 53
42 extern decf_ext_flash_address0 54 ; read 1 byte from FLASH to WREG with address auto-increment and wrap-around at 0x200000
43 decf_ext_flash_address macro ext_flash_temp1 55 ;
44 movlw ext_flash_temp1 56 ; the byte read is also copied to ext_flash_rw
45 call decf_ext_flash_address0 57 ;
58 FLASH_CW_READ_0x20 macro
59 extern ext_flash_byte_read_plus_0x20
60 call ext_flash_byte_read_plus_0x20
46 endm 61 endm
47 62
48 ; increase ext_flash_address:2 by the 8 bit value "ext_flash_temp1" 63
49 extern incf_ext_flash_address0 64 ; read 1 byte from FLASH to memory with address auto-increment and wrap-around at 0x200000
50 incf_ext_flash_address macro ext_flash_temp1 65 ;
51 movlw ext_flash_temp1 66 ; mem_address: address:2 containing target address in memory
52 call incf_ext_flash_address0 67 ;
68 FLASH_CC_READ_0x20 macro mem_address
69 extern ext_flash_byte_read_plus_0x20
70 call ext_flash_byte_read_plus_0x20 ; read from flash
71 movff WREG,mem_address ; copy to memory
53 endm 72 endm
54 73
55 ; increase ext_flash_address:2 by the 8 bit value "ext_flash_temp1" with banking at 0x200000 74
56 extern incf_ext_flash_address0_0x20 75 ; read 2 bytes from FLASH to memory with address auto-increment and wrap-around at 0x200000
57 incf_ext_flash_address_0x20 macro ext_flash_temp1 76 ;
58 movlw ext_flash_temp1 77 ; mem_address: address:2 containing start address in memory
78 ;
79 FLASH_II_READ_0x20 macro mem_address
80 extern ext_flash_byte_read_plus_0x20
81 call ext_flash_byte_read_plus_0x20 ; read 1st byte from flash
82 movff WREG,mem_address+0 ; copy 1st byte to memory
83 call ext_flash_byte_read_plus_0x20 ; read 2nd byte from flash
84 movff WREG,mem_address+1 ; copy 2nd byte to memory
85 endm
86
87
88 ; read a range of data from FLASH to memory (destroys WREG, FSR1) - wraps around at 0x400000
89 ; - increments ext_flash_address
90 ; flash_start : address:3 containing start address in flash
91 ; memory_start: address:2 containing start address in memory
92 ; range : literal:1 giving the number of bytes to read (1-256)
93 ;
94 FLASH_RR_READ macro flash_start, memory_start, range
95 MOVTT flash_start,ext_flash_address ; set start address in FLASH
96 lfsr FSR1,memory_start ; set start address in memory
97 movlw low(range) ; set size of range to read
98 extern ext_flash_read_range
99 call ext_flash_read_range ; execute range-read
100 endm
101
102
103 ; write a range of data from memory to FLASH (destroys WREG, FSR1) - Attention: range must fit into a 256 byte block!
104 ; - does not increment ext_flash_address!
105 ; memory_start: address:2 containing start address in memory
106 ; flash_start : address:3 containing start address in flash
107 ; range : literal:1 giving the number of bytes to write (1-256)
108 ;
109 FLASH_RR_WRITE macro memory_start, flash_start, range
110 lfsr FSR1,memory_start ; set start address in memory
111 MOVTT flash_start,ext_flash_address ; set start address in FLASH
112 movlw low(range) ; set size of range to read
113 extern ext_flash_write_range
114 call ext_flash_write_range ; execute range-write
115 endm
116
117
118 ; move forward in FLASH with wrap-around at 0x400000 to 0x000000
119 ;
120 ; increment: literal (1-255)
121 ;
122 ext_flash_inc_address_0x40 macro increment
123 movlw increment
124 extern incf_ext_flash_address0_0x40
125 call incf_ext_flash_address0_0x40
126 endm
127
128
129 ; move forward in FLASH with wrap-around at 0x200000 to 0x000000
130 ;
131 ; increment: literal (1-255)
132 ;
133 ext_flash_inc_address_0x20 macro increment
134 movlw increment
135 extern incf_ext_flash_address0_0x20
59 call incf_ext_flash_address0_0x20 136 call incf_ext_flash_address0_0x20
60 endm 137 endm
138
139
140 ; decrement length count
141 ;
142 ; decrement: literal (1-255)
143 ;
144 ext_flash_dec_length macro decrement
145 movlw decrement
146 extern decf_ext_flash_length0
147 call decf_ext_flash_length0
148 endm