前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >带你走进飞思卡尔Flashloader(3)

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

作者头像
用户1605515
发布2018-04-10 16:29:06
6260
发布2018-04-10 16:29:06
举报
文章被收录于专栏:嵌入式程序猿
学习完协议篇,今天我们来学习飞思卡尔Flashloader之命令API。

获取属性命令

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

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

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

响应:

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

设置属性命令

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

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

整个传输过程如下:

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

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

Flash全擦除命令

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

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

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

Flash分区擦除命令

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

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

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

填充命令

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

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

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

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

其次必须提供起始地址

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

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

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

填充命令没有数据阶段。

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

写命令

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

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

提供起始地址

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

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

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

写命令参数如下:

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

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

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

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

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

读命令

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

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

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

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

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

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

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

执行命令

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

执行命令无数据阶段。

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

复位命令

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

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

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

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

复位命令无数据阶段。

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-11-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式程序猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档