JTAG Flash编程


Flash可以通过四个间接寄存器访问:FLASHCON、FLASHADR、FLASHDAT和FLASHSCL。每个寄存器通过间接读和间接写来访问。

FLASHCON

FLASHCON是一个8-bit寄存器,用于控制FLASH逻辑应答对FLASHDAT寄存器的读和写。FLASHCON寄存器由ReadMode和WriteMode设置组成,具体如下:

7:43:0
WriteModeReadMode
ReadMode描述
0000FLBUSY Polling
0010Initiate FLASH read;Increment FLASHADR

注:未注明的状态都是保留状态

WriteMode描述
0000FLBUSY Polling
0001Initiate FLASH Write;Increment FLASHADR
0010Initiate page erase on current page if FLASHDAT = 0xA5; Initiate erase of entire FLASH if FLASHDAT = 0xA5 and FLASHADR is set to the address of the FLASH Read Lock Byte or the FLASH Write/Erase Lock Byte.

注:未注明的状态都是保留状态

FLASHADR

FLASHADR是一个16bit位宽的寄存器,用于指定读操作或写操作的目的地址。FLASHADR在完成一次读操作或写操作后会自动增加。

FLASHDAT

FLASHDAT是一个10-bit位宽的寄存器,包含8bit数据,1bit FLFail和1bit的FLBusy。

9:210
FLDataFLFailFLBusy

对FLASHDAT写操作仅仅需要8bit,因为被锁存的最后一位假定是MSB位置。

对FLASHDAT读操作要求11个DR_SHIFT周期,8Cycle用于FLDATA,1个周期用于FLFail,1个周期用于FLBusy,1个周期用于Busy。

FLBusy轮询需要至少两个DR_SHIFT周期,一个周期用于FLBust,另一个周期用于Busy。

FLASHSCL

FLASHSCL是一个8bit寄存器,用于设置FLASH操作时序所需要的预分频值。当工作在内部2MHz系统时钟时,该寄存器应该配置为0x86.

7:43:0
10000110

FLASH访问流程

在FLASH被编程前,设备需要被复位,看门狗需要被设置为离线模式,否则看门狗可能在FLASH编程过程中发起系统复位,进而导致不确定的行为。

禁用看门狗定时器(WDT)

流程图显示了禁用看门狗定时器的过程,整个过程如下:

  1. 系统通过加载0x2FFF到指令寄存器迫使系统复位;
  2. 加载0x1004到指令寄存器读取IDCODE,通过在TDI写入0x0000_0000,从而在接收端TDO获得IDCODE;
  3. 所有后续的指令地址都需要设置StateCntl为0x4,这样使得CPU核处于SUSPEND状态,使得FLASH处于Off-Line。

在这里插入图片描述

读取FLASH内部的一个字节

具体流程如下:

  1. 加载0x86到FLASHSCL,使用内部2MHz系统时钟设置合适的FLASH时序。这可以通过一个对FLASHSCL的间接写0x86来实现;
  2. 将读操作的目标地址加载到FLASHADR;
  3. 加载0x01到FLASHCON,发起一次读操作;
  4. 通过读FLASHDAT发起读,这是一次间接读0bit操作;
  5. 加载0x00到FLASHCON来轮询FLBusy,查看是否处于忙状态;
  6. 轮询FLBusy直到该信号变低,表示读操作已完成;
  7. 读FLASHDAT;

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值