带你走进飞思卡尔Flashloader(3)

0?wx_fmt=gif

学习完协议篇,今天我们来学习飞思卡尔Flashloader之命令API。

获取属性命令

获取属性命令用来查询Flashloader的各种属性和设置,每一个支持的属性都有一个关联的32位标签名称,标签名称占据命令包的第一个参数,目标板会返回一个带有属性值的获取命令响应包。可以通过获取属性或者设置属性命令存取访问属性,属性有可能是只读的也有可能是可读可写的,所有可读可写的属性是32位整形,所以他们可以被命令参数简单的携带。获取属性命令仅仅需要一个参数那就是32位的参数属性标签名称。

获取属性命令按照协议完整过程如下:

0?wx_fmt=jpeg获取属性命令包格式可以通过下面的例子看出:

0?wx_fmt=jpeg

响应:

对主机发送的获取属性命令的响应,目标机将会发送带有响应标签名称设置为0xA7的获取属性响应包,通过一个例子来说明:

0?wx_fmt=jpeg

0?wx_fmt=jpeg

设置属性命令

设置属性命令用来改变后者修改属性的值,设置属性命令仅仅可以用来修改可写的属性的值,如果试图设置一个只读属性的值,Flashloader将会返回一个错误。

设置属性命令需要属性标签名称和要设置的值两个参数。

整个传输过程如下:

0?wx_fmt=jpeg

以一个例子来说明设置属性命令包格式

0?wx_fmt=jpeg

目标机会回送一个带有状态字的通用响应包。

Flash全擦除命令

Flash全擦除命令会执行擦除整个Flash空间,如果任何一个Flash分区是被保护的,那么全擦除命令将会失败并且返回一个错误状态码,Flash全擦除命令不需要参数,协议要求的过程如下:

0?wx_fmt=jpeg

以一个例子;来说明Flash全擦除命令包格式如下:

0?wx_fmt=jpeg

响应: 目标机会返回一个带有状态码的通用响应包。

Flash分区擦除命令

分区擦除命令执行擦除Flash的一个或者多个分区,这条命令需要两个参数,起始地址和要擦除的字节数

必须正确指定分区否则将会返回错误。分区擦除命令协议要求的过程如下:

0?wx_fmt=jpeg

响应:目标机将会返回一个带有状态码的通用响应包。

填充命令

Flash填充命令以固定的数据模式填充一定范围的flash,与写flash有相同的规则,但是不同的是数据模式包含在填充命令的参数中,没有数据阶段,而写命令则含有数据阶段,填充命令参数如下:

0?wx_fmt=jpeg

0~3字节为开始填充地址,4~7字节为需要填充的字节数量,8~11字节为填充的数据模式,也就是填充数据。需要注意的是,如果是以一个字节8位模式填充,则填充字节必须重复四次,以32位模式存在,如果是以16位字模式填充,则填充数据必须重复两次以32模式存在。

例如以字节0xFE填充,则字模式将是0xFEFEFEFE, 如果是以16位0x5AFE填充,则填充的字模式将是0x5AFE5AFE.写FLASH必须要特别注意:

首先任何扇区的Flash在写之前必须被全擦除或者分区擦除。

其次必须提供起始地址

如果验证写属性被置为真,则写Flash将会执行一个flash验证操作。

填充命令的协议完整过程如下:

0?wx_fmt=jpeg

以一个例子来说明填充命令包格式:

0?wx_fmt=jpeg

填充命令没有数据阶段。

响应: 一旦填充命令成功执行,目标机将会返回一个带有状态码的通用响应包。

写命令

写命令将数据阶段提供的数据写入指定范围的存储器Flash或者RAM,然而如果Flash的写保护使能,则写被保护的扇区将会失败。写Flash必须特别注意:

首先,写任何扇区的Flash必须先执行全擦除或者分区擦除。

提供起始地址

如果验证写属性被置为真,则写Flash将会执行一个flash验证操作。

当写RAM的时候,地址没必要对齐,数据将不会被填充。

起始地址和写入字节数量是必须的两个参数在执行写命令时。

写命令参数如下:

0?wx_fmt=jpeg

0~3字节为起始地址,4~7字节为字节数量。

写命令协议完整过程如下:

0?wx_fmt=jpeg

以一个例子说明写命令包格式:

0?wx_fmt=jpeg

数据阶段:写命令含有数据阶段,主机会发送数据直到目标机介绍到指定数量字节的数据完成。

响应:目标机会返回带有状态码的通用响应包。

读命令

读命令会返回指定数量,指定地址存储的内容,读命令可以读取任何CPU可访问且没被保护的扇区。

起始地址和要读取的字节数量是读命令必须的两个参数。

0?wx_fmt=jpeg0~3字节为起始地址,4~7字节为要读取的字节数量。

读命令协议整个过程如下:

0?wx_fmt=jpeg

以一个例子说明读命令包格式:

0?wx_fmt=jpeg

数据阶段:读命令含有数据阶段,目标机工作在从模式,主机需要抽取数据包,直到指定数量指定字节的数据被主机获取。

响应:目标机会返回一个带有状态码的通用响应包。

执行命令

在Flashloader中,执行命令的结果就是设置PC指针到代码中指定的跳转地址,以及堆栈指针到指定的地址,在跳转之前,系统会返回到复位状态。执行命令需要跳转地址,函数参数指针以及堆栈指针是必须的三个参数。

0?wx_fmt=jpeg

执行命令无数据阶段。

响应:在执行执行命令之前,目标机会验证参数和返回一个带有状态码的通用响应包。

复位命令

复位命令的结果就是复位芯片。复位命令无参数。

复位命令的协议完整过程如下:

0?wx_fmt=jpeg

以一个例子说明复位命令包格式:

复位命令的协议完整过程如下:

0?wx_fmt=jpeg

复位命令无数据阶段。

响应:在复位芯片之前,目标机会返回一个带有状态码的通用响应包。

0

未完待续,持续更新中,敬请期待。

0

嵌入式

程序猿

微信号:InterruptISR

嵌入式程序猿致力于打造程序猿工程师交流分享的精品移动平台,欢迎各位猿友加入和分享。微信搜索嵌入式程序猿添加关注,或者长按下方二维码,选择识别图中二维码添加关注。

0?wx_fmt=jpeg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值