dsPIC30F系列数字信号控制器编程规范详解
在电子工程领域,数字信号控制器(DSCs)的应用越来越广泛。Microchip的dsPIC30F系列DSCs以其高性能和灵活性受到众多开发者的青睐。今天,我们就来详细探讨一下dsPIC30F的编程规范。
一、概述
这份编程规范文档主要是为第三方工具开发者编写的,用于指导他们对dsPIC30F设备进行编程。对于使用dsPIC30F设备的客户,建议使用已经支持设备编程的开发工具。文档涵盖了dsPIC30F多个型号的编程规范,包括dsPIC30F2010/2011/2012等。
二、编程概述
2.1 片上内存与编程执行器
dsPIC30F系列DSCs包含一个片上内存区域,用于简化设备编程。这个区域可以存储编程执行器,使得dsPIC30F的编程速度比传统方法更快。外部编程器(如Microchip的MPLAB® ICD 2、MPLAB PM3等)将编程执行器存储到内存后,它可以与外部编程器交互,高效地对设备进行编程。编程器和编程执行器之间是主从关系,编程器是主设备,编程执行器是从设备。
2.2 编程方法
有两种方法可用于对用户系统中的芯片进行编程:
- Enhanced ICSP协议:使用更快的高压方法,利用编程执行器。编程执行器通过一个小命令集提供擦除、编程和验证芯片的所有必要功能,使编程器无需处理芯片的底层编程协议。
- ICSP协议:不使用编程执行器,提供原生的底层编程能力来擦除、编程和验证芯片。但这种方法速度明显较慢,因为它使用控制代码在dsPIC30F设备上串行执行指令。
三、硬件要求与引脚使用
3.1 硬件要求
在ICSP或Enhanced ICSP模式下,dsPIC30F需要两个可编程电源,分别为VDD和MCLR供电。对于擦除代码保护位所需的批量擦除编程,VDD必须大于4.5伏。
3.2 编程引脚
| 编程时使用的引脚如下: | Pin Name | Pin Type | Pin Description |
|---|---|---|---|
| MCLR/V PP | P | Programming Enable | |
| V DD | P | Power Supply | |
| V SS | P | Ground | |
| PGC | I | Serial Clock | |
| PGD | I/O | Serial Data |
四、内存映射
4.1 程序内存映射
| 程序内存空间从0x0到0xFFFFFE,代码存储位于内存映射的底部,支持高达144 Kbytes(48K指令字)。代码存储在三个48 Kbyte的内存面板中。不同型号的设备代码内存和数据EEPROM的位置和大小不同,具体如下表所示: | Device | Code Memory map (Size in Instruction Words) | Data EEPROM Memory Map (Size in Bytes) |
|---|---|---|---|
| dsPIC30F2010 | 0x000000 - 0x001FFE (4K) | 0x7FFC00 - 0x7FFFFE (1K) | |
| dsPIC30F2011 | 0x000000 - 0x001FFE (4K) | None (0K) | |
| ... | ... | ... |
4.2 数据EEPROM内存
数据EEPROM阵列支持高达4 Kbytes的数据,位于一个内存面板中,映射在程序内存空间的用户内存空间末尾。
五、编程执行器应用
5.1 编程执行器概述
编程执行器位于执行内存中,在进入Enhanced ICSP编程模式时执行。它通过一个简单的命令集和通信协议,为编程器提供对dsPIC30F进行编程和验证的机制。其功能包括读取内存、擦除内存、编程内存和查询等。
5.2 编程执行器代码内存和数据RAM
编程执行器存储在执行代码内存中,执行时不需要用户代码内存或数据EEPROM的资源。它使用设备的数据RAM进行变量存储和程序执行,运行后数据RAM的内容不可预测。
六、确认执行内存内容
在开始编程之前,编程器必须确认编程执行器是否存储在执行内存中。具体步骤是先进入ICSP模式,读取执行内存中存储的唯一应用ID字。如果该字为0xBB,则表示编程执行器已驻留在内存中,可以正常编程;否则,需要使用特定方法将编程执行器编程到执行代码内存中。
七、设备编程
7.1 编程流程概述
确认编程执行器在内存中(如果不存在则加载)后,可以使用一系列命令对dsPIC30F进行编程。编程过程包括进入Enhanced ICSP模式、进行芯片擦除、验证芯片擦除、编程代码内存、数据Flash和配置位,最后退出Enhanced ICSP模式。如果验证失败,需要从芯片擦除步骤重新开始。
7.2 各部分编程详细步骤
7.2.1 进入Enhanced ICSP模式
通过将PGC和PGD保持为高电平,然后将MCLR/VPP升高到VIHH(高电压)来进入该模式。在此模式下,可以使用编程执行器命令通过PGC和PGD串行传输来高效编程代码内存、数据EEPROM和配置位。
7.2.2 芯片擦除
使用Bulk Erase命令(ERASEB)擦除芯片,将所有代码内存、数据EEPROM和代码保护配置位设置为‘1’。非代码保护配置位需要手动设置为‘1’。如果启用了高级安全功能,则需要根据需要执行单个段擦除操作。
7.2.3 空白检查
使用QBLANK命令验证设备是否已成功擦除,确保所有实现的代码内存、数据EEPROM和配置位都为空白。如果设备未空白,则需要先进行擦除操作。
7.2.4 代码内存编程
使用PROGP命令对代码内存进行编程,每次编程一行。编程行数取决于设备的代码内存大小。编程完成后,可以使用READP命令读取代码内存进行验证,也可以使用校验和计算进行验证。
7.2.5 数据EEPROM编程
使用PROGD命令对数据EEPROM进行编程,每次编程一行。编程行数取决于设备的数据EEPROM大小。编程完成后,可以使用READD命令读取数据EEPROM进行验证,也可以使用校验和计算进行验证。
7.2.6 配置位编程
配置位存储在七个16位寄存器中,分为系统操作位和代码保护位。使用PROGC命令每次编程一个配置字,编程后使用READD命令读取配置位进行验证。需要注意的是,系统操作位不能被擦除,应始终编程到所需设置;代码保护位在编程和验证设备时必须为‘1’,只有在设备编程和验证完成后才能将其编程为‘0’。
7.2.7 退出Enhanced ICSP模式
通过移除设备电源或将MCLR设置为VIL来退出该模式,下次进入正常用户模式时,使用Enhanced ICSP存储的程序将执行。
八、其他编程特性
8.1 擦除内存
使用ERASEB、ERASED或ERASEP命令擦除内存。ERASEB提供多种批量擦除选项,可擦除整个芯片、所有代码内存或数据EEPROM,或按段擦除。
8.2 修改内存
可以使用ERASEP和ERASED分别擦除代码内存和数据EEPROM的选择性行,然后使用PROGP和PROGD命令对修改的行进行重新编程。对于高级代码保护位的修改,可能需要先使用ERASEB命令擦除整个芯片。
8.3 读取内存
使用READD命令读取数据EEPROM、配置位和设备ID,使用READP命令读取代码内存。
8.4 编程执行器软件版本
使用QVER命令查询编程执行器软件的版本。
8.5 十六进制文件信息
编程器应从十六进制文件中读取数据EEPROM和配置信息,保存十六进制文件时应包含这些信息。
8.6 单元ID
dsPIC30F设备包含32条单元ID指令,位于地址0x8005C0至0x8005FF。批量擦除不会擦除单元ID位置,可以使用特定步骤擦除执行内存并与编程执行器一起编程单元ID。
8.7 校验和计算
dsPIC30F的校验和为16位,是代码内存位置内容和配置寄存器内容的总和。校验和计算方法根据代码保护设置不同而有所不同。
九、编程器与编程执行器通信
9.1 通信概述
编程器和编程执行器是主从关系,编程器发起通信,每次只能发送一个命令,编程执行器处理命令后返回一个响应。
9.2 通信接口和协议
Enhanced ICSP接口是一个使用PGC和PGD引脚实现的2线SPI接口。PGC作为时钟输入引脚,PGD用于发送命令数据和接收响应数据。数据在PGC的下降沿传输,在上升沿锁存,使用16位模式,先传输最高有效位。
9.3 SPI速率
在Enhanced ICSP模式下,dsPIC30F使用快速内部RC振荡器,有效系统时钟频率为1.84 MHz。由于SPI模块工作在从模式,编程器必须将SPI时钟速率限制在不超过1 MHz。
9.4 超时处理
编程执行器在向编程器发送响应时不使用看门狗定时器或超时机制。编程器应遵循通信协议,使用命令超时设置,若超时则重置编程执行器并重新开始编程。
十、ICSP模式
10.1 ICSP模式概述
ICSP模式是一种特殊的编程协议,允许对dsPIC30F编程执行器进行读写操作。它通过PGC和PGD引脚串行应用控制代码和指令来实现。
10.2 ICSP操作
进入ICSP模式后,CPU处于空闲状态,由内部状态机控制执行。使用4位控制代码(SIX和REGOUT)来命令CPU执行指令或读取数据。
10.3 进入ICSP模式
通过将PGC和PGD保持为低电平,将MCLR/VPP升高到VIHH(高电压),并执行额外步骤进入ICSP模式。
10.4 闪存内存编程
在ICSP模式下,闪存内存的写和擦除操作由NVMCON寄存器控制。编程前需要解锁NVMCON寄存器,设置WR控制位启动编程周期,完成后清除WR控制位。
10.5 不同电压系统下的内存擦除
- 正常电压系统(VDD在4.5 - 5.5伏之间):使用NVMCON设置为0x407F进行批量擦除。
- 低电压系统(VDD在2.5 - 4.5伏之间):需要逐行擦除代码内存、执行内存和数据内存。
10.6 配置内存、代码内存和数据EEPROM的读写
在ICSP模式下,通过一系列指令和操作对配置内存、代码内存和数据EEPROM进行读写操作。
10.7 读取应用ID字
读取执行代码内存中地址0x8005BE处的应用ID字,根据其值判断编程执行器是否驻留在内存中。
10.8 退出ICSP模式
确认编程执行器驻留在内存中或加载编程执行器后,通过移除设备电源或将MCLR设置为VIL退出ICSP模式,然后按照设备编程流程进行编程。
十一、编程执行器编程到内存
11.1 概述
如果编程执行器不在执行内存中,需要使用ICSP和ICSP模式下的技术将其编程到执行内存中。先擦除执行内存,然后每次编程32个字。
11.2 编程验证
编程完成后,通过读取执行内存的内容并与编程器中存储的编程执行器映像进行比较来验证编程是否成功。
十二、AC/DC特性和时序要求
文档提供了dsPIC30F在编程过程中的AC/DC特性和时序要求,包括电压、电流、时钟周期等参数,开发者在编程时需要遵循这些要求以确保编程的正确性。
十三、附录
13.1 校验和计算
详细说明了不同型号设备在不同代码保护状态下的校验和计算方法。
13.2 特定设备编程注意事项
对于dsPIC30F5011和dsPIC30F5013处理器,在芯片擦除前需要使用特定命令对FBS和FSS寄存器进行编程。
13.3 十六进制文件格式
介绍了Microchip开发工具使用的标准HEX格式(Intel® HEX 32 Format),以及文件中各部分的含义和处理方法。
13.4 修订历史
记录了文档的修订信息,方便开发者了解文档的更新情况。
通过以上详细的编程规范,开发者可以更好地对dsPIC30F系列数字信号控制器进行编程操作。在实际应用中,我们还需要根据具体的设备和需求,灵活运用这些知识,确保编程的准确性和高效性。你在使用dsPIC30F进行开发时遇到过哪些问题呢?欢迎在评论区分享你的经验和见解。
-
dsPIC30F
+关注
关注
1文章
71浏览量
24494 -
编程规范
+关注
关注
0文章
10浏览量
9026 -
数字信号控制器
+关注
关注
0文章
109浏览量
13860
发布评论请先 登录
dsPIC30F系列数字信号控制器编程规范详解
评论