美文网首页
2020/09/28_D-Flash读写、擦除实验纪要

2020/09/28_D-Flash读写、擦除实验纪要

作者: HACHI_8 | 来源:发表于2020-10-09 08:29 被阅读0次

1、准备

(1)D-Flash的全局地址范围0x100000-0x107FFF,共32K。全分页。

(2)D-Flash读取时,都需要分页符访问。

(3)分页映射空间大小1K,地址范围0x800-0xBFF。

(4)分页符0x00-0x1F。

(5)注意,Flash空间里面的变化不能通过TBDML仿真观察,可以通过CAN/SCI等通信接口,将读回的数据上传到电脑端验证。

2、擦除、写编程的步骤

(1)设置合适的FCLK,XEP100型号建议频率设定在1MHz。

(2)读取FCLK,检查其最高位FDIVLD是否为1,如果为1,说明时钟初始化完成,可进行下一步。

(3)检查FSTAT的ACCERR、FPVIOL是否为1,如果为1,则向该位写1,清除该位(使其变为0)。

(4)按照NVM指令模式,先向FCCOBIX写索引号,再根据索引号对应的项,向FCCOB写入指令或地址或数据。具体按步骤(5)分步写。

(5)擦除操作如下:

            MOVB #$00,FCCOBIX                         ;索引号00,对应需向FCCOB写入指令和D-Flash的高(22:16)位的地址

            MOVW    #$1210,FCCOB                     ; 擦除D-Flash指令 0x12,  D-Flash全局地址从0x100000,所以这里写入10

            MOVB    #$01,FCCOBIX                       ;索引号01,对应需向FCCOB写入D-Flash的低(15:0)位地址

            MOVW    #$0000,FCCOB                      ;这里写入0x0000,D-Flash地址就是0x100000, 对应.prm里面的映射地址 第0页0x800开始。

       编程4个字(8个字节),每次写D-Flash,至少一次性写8个字节。操作如下:

           MOVB #$00,FCCOBIX                              ;索引号00

            MOVW    #$1110,FCCOB

            MOVB    #$01,FCCOBIX                           ;索引号01

            MOVW    #$0000,FCCOB

            MOVB    #$02,FCCOBIX                            ;索引号02开始,陆续向FCCOB写入4个字的数据

            LDX    #d_flash_dt

            MOVW    2,X+,FCCOB

            MOVB    #$03,FCCOBIX                               ;索引号03,第二个字

            MOVW    2,X+,FCCOB

            MOVB    #$04,FCCOBIX                               ;索引号04,第三个字

            MOVW    2,X+,FCCOB

            MOVB    #$05,FCCOBIX                                ;索引号05,第四个字

            MOVW    2,X+,FCCOB

(6)写入指令或相关的数据后,向FSTAT写入0x80,将其最高位CCIF置1,启动Flash指令的执行,然后检查FSTAT最高位是否变为0,检查指令是否执行完成,代码如下:

            MOVB #$80,FSTAT

            BRCLR  FSTAT,mFSTAT_CCIF,*                    ; 指令执行时,最高位为0,如果再次变为1,则表示指令执行完毕。

3、读D-Flash

(1)先保存当前的EPAGE寄存器值,读数据操作完成后,需恢复EPAGE。假设需读取地址为addr的D-Flash中的数据。将addr右移10位,取低字节作为分页符EPAGE的值,  EPAGE=addr>>10。           D-Flash全局地址空间 100000-107FFF(32K)。

(2)读D-Flash时,需要映射到0x800-0xBFF地址空间,空间大小为0x0-0x3FF, 因此将addr和0x3FF作&运算,再加上起始地址,就是实际用到的读取地址。     e_addr=(addr&0x3FF)+0x800

(3)分页符EPAGE设置完成,映射地址计算好后,就可以使用64k地址空间寻址的方式,读取D-Flash的数据了,代码如下:

            addr        DS.W   1                           ;2个字节变量表示需要寻址的D-Flash地址,由于高位始终是10, 所以只取低16位地址来表示

           e_addr     DS.W   1

            LDAA EPAGE

            STAA    last_epage                      ;保存当前的EPAGE值

            LDX      #10

            LDD      addr

lsr_addr:        LSRD      

                      DEX

                      CPX       #0          

                      BNE       lsr_addr                ;addr  右移10位

            STAB    EPAGE                      ;取addr的低字节值作为EPAGE

            LDD      addr

            ANDA   #$03

            ANDB    #$FF

           ADDD    #$800

            STD       e_addr                       ;计算得到全局地址对应的 映射地址

            LDAA    #$00

            STAA    EPAGE

            LDX    #sci_data                        ;变量:保存读取到的数据

            LDY    #e_addr

            LDAB    #4

read_df:    MOVW    2,Y+,2,X+

                 DBNE    B,read_df

                 MOVB    last_epage,EPAGE              ;恢复EPAGE

相关文章

网友评论

      本文标题:2020/09/28_D-Flash读写、擦除实验纪要

      本文链接:https://www.haomeiwen.com/subject/bslduktx.html