应用笔记 4715

MAX16065–MAX16068和MAX16070/MAX16071闪存配置系统管理器的在电路编程

By: Eric Schlaepfer

摘要 : MAX16065–MAX16068与MAX16070/MAX16071微处理器监控电路可以在焊接到电路板之后进行编程。这意味着只需存储没有编程的器件,可以在生产测试中写入最新的配置信息。进行一些简单的测量,确保应用电路能够通过SMBus™或JTAG总线对硬件编程,并在编程期间为器件供电。本应用笔记介绍了用SMBus和JTAG总线的编程算法。

引言

MAX16065/MAX16066MAX16067MAX16068MAX16070/MAX16071能够在复杂的多电压供电系统中进行电压排序与监测。利用数字比较器对电源进行监测,通过可编程状态机进行电源排序,表1概括了该系列产品的器件特性。

表1. 系统管理器总结
Part Monitoring Inputs Sequencing Outputs
MAX16065 12 12
MAX16066 10 8
MAX16067 6 6
MAX16070 12
MAX16071 8
MAX16068 6

这些器件包含SMBus兼容接口和JTAG接口,通过这些接口可以访问所有的器件寄存器,并对内部配置闪存进行编程。这些器件都可以在电路编程,只需遵循一些简单的准则,即可在焊接应用电路板之后对器件进行编程。在电路编程还意味着只需存储尚未编程的器件,可以在生产测试中将最新配置信息写入器件。

供电

器件的供电范围为2.8V至14V,典型应用中将VCC连接到12V中等电压总线或3.3V辅助电源。

对于Maxim具有排序输出的系统管理器,可以用部分供电的电路板对器件编程。例如,可以仅使用3.3V辅助电源或12V中等电压总线供电。由于器件尚未进行编程,应关闭所有下游电源。另一选择是采用常见的双二极管,从编程连接器供电。由于二极管存在压降,这种方式比较适合12V总线供电的情况。

如果没有使用“或”逻辑二极管,系统管理器在编程时由板上电源供电,需要注意顺序输出的状态,以防过早打开下游电源。

没有编程时,系统管理器具有高阻输出。带高电平有效使能输入的电源应在使能端接下拉电阻;带低电平有效使能输入的电源应在使能端接上拉电阻。顺序输出可以配置成推挽式或开漏式控制,由于开漏式配置需要外接上拉电阻,只能配合低电平有效的使能输入使用。

不推荐将系统管理器连接到JTAG链路,因为电源可能不会对链路中的上游器件供电,从而切断了器件的访问路径。推荐使用JTAG复用器或特定的JTAG端口。如果系统管理器没有用于控制电源的供电顺序,则可安全地放置在JTAG链路中。

共享总线

正常工作时,IC需要与系统管理器进行通信时会产生一些潜在问题。例如,系统监控的微处理器需要读取MAX16065的ADC读数时,如果电路板还没有供电或部分供电,而MAX16065正在编程,连接在SMBus或JTAG总线的其它器件可能产生干扰。最简单的解决方案是通过JTAG接口对MAX16065编程,把监控微处理器连接到SMBus接口。如果微处理器支持真正的开漏SMBus总线I/O (引脚没有连接ESD保护二极管至VCC),如果上拉电阻足够大,编程和常规操作可共用SMBus接口。如果微处理器的SMBus总线不是开漏输出,ESD二极管将会钳位总线并干扰编程。

系统微处理器没有真正的开漏SMBus总线时,可以使用图1所示电路自动切换微处理器和编程SMBus接口。

图1. 通过MAX4525复用器/开关共享系统管理器的SMBus接口
图1. 通过MAX4525复用器/开关共享系统管理器的SMBus接口

图1中的MAX4525复用器可以自动连接SMBus总线与系统微处理器,或连接SMBus总线与编程测试点。系统微处理器的VCC控制开关切换。如果没有作用VCC,而是由12V供电,开关将SMBus接口连接到编程测试点。施加VCC后,开关将SMBus总线连接到系统微处理器。

应用电路举例

下图给出了设计用于在电路编程的三种不同电路。

由12V中等电源总线供电,通过SMBus接口编程

图2电路采用12V中等电源总线对MAX16065供电,通过模拟使能EN信号线监测。当12V总线上升到由EN连接的电阻分压器设定的门限值以上时,已经编程的MAX16065将尝试排序电源输出。没有编程的MAX16065不会有任何动作,排序输出仍然保持高阻抗状态。

图2. MAX16065由12V中等电源总线供电,通过SMBus接口编程。
图2. MAX16065由12V中等电源总线供电,通过SMBus接口编程。

一路电源采用高电平有效的推挽式使能控制信号,另一路电源采用低电平有效的开漏式使能控制信号。增加适当的上拉、下拉电阻可以防止在未经编程的输出处于高阻态时错误地打开电源。

重要的是,推挽式输出不能上拉到VDBP以上;开漏输出不能上拉到6V以上。SMBus连接到编程测试点;编程硬件电路必须提供适当的上拉电阻。此电路非常简单,无需其它板上器件即可连接SMBus总线。

从3.3V辅助电源供电,通过JTAG复用器编程

图3中,MAX16067由3.3V辅助电源供电,通过DS26900 JTAG复用器与其它器件共用JTAG接口,DS26900也由3.3V辅助电源供电。编程时只需提供3.3V电源,无需打开12V中等电源总线。

图3. MAX16067由3.3V辅助电源供电,通过DS26900 JTAG复用器编程。
图3. MAX16067由3.3V辅助电源供电,通过DS26900 JTAG复用器编程。

从12V中等电源总线供电,通过JTAG接口编程

图4所示MAX16066通过连接到12V中等电源总线的二极管“或”逻辑电路供电,可安全加载电源而且不会对下游电路供电,JTAG和电源连接到编程测试点。

图4. MAX16066由12V中等电源总线供电,通过JTAG接口编程。
图4. MAX16066由12V中等电源总线供电,通过JTAG接口编程。

编程算法

Maxim的电源管理器件集成了闪存存储器,用于存储器件的配置参数。电源上电时,闪存中的内容加载到RAM寄存器。RAM和闪存都可通过JTAG或SMBus接口访问。为了正确编程器件,所要求的参数必须编程到闪存存储器内。存储器地址如图5所示。

图5. 系统管理器存储器地址
图5. 系统管理器存储器地址

配置文件

MAX16065EVKIT软件提供两种配置文件:一种是标准Intel® HEX文件,通过选择File Save As生成,该文件可用于SMBus编程;第二种文件通过选择File Export to SVF File生成,这种矢量格式(SVF)文件用于第三方的JTAG工具和JTAG编程的在电路PCB测试。

关于Intel HEX格式说明超出了本文探讨的内容范围,详细资料请参见:http://en.wikipedia.org/wiki/Intel_HEX

关于SVF文件格式的详细说明,请参见:www.asset-intertech.com/support/svf.pdf

SMBus编程过程

编程闪存配置存储器时,首先要保证寄存器r8Ch (配置存储器页面,不是闪存页面)的存储器锁存位为零。在该寄存器写入00,清除所有存储器锁存位。将内容写入闪存时,首先要发送正确命令给闪存存储器页,载入初始地址(8字节对齐),发送一系列数据块写指令。闪存按照8字节数据块编程,关于SMBus总线协议的详细信息请参考MAX16065数据资料。

以下给出了典型的闪存编程代码。
FlashPageOff()
UserFlashPageOff()
If ReadRegister(8Ch) != 0 Then WriteRegister(8Ch, 00h)
FlashPageOn()

Loop Address from 30h to 8Dh 
  SetAddress(Address)           // Load address
  WriteBlock(Data, 08h)         // Write a block of 8 bytes
  Wait(150 milliseconds)        // Wait for programming
SetAddress(Address)
ReadBlock(DataRead, 08h)     	// Read back data block
If DataRead != Data Then    
  Fail
Else
  Address = Address + 08h    	// Advance to next block
End Loop
FlashPageOff()                  // Return to default page
Success
写入用户闪存存储器时可以使用相同流程,但地址范围是00h至FFh (A0h–AFh保留区除外)。

为保证成功写入闪存,必须保证写入的8字节数据块对齐8字节边界(地址的3个LSB必须为零)。

JTAG编程过程

使用标准的第三方JTAG工具、MAX16065–MAX16068和MAX16070/MAX16071 BSDL文件和评估软件生成的SVF数据文件,通过JTAG编程电缆或在电路PCB测试电路对器件编程。BSDL文件可以从网站下载

注意,评估软件生成的SVF文件用于测试IDCODE寄存器。下列代码来自MAX16065评估软件生成的SVF文件:
ENDDR IDLE;
ENDIR IDLE;
SIR 5 TDI(00) TDO(01);
SDR 32 TDI(00000000) TDO(18001197);
TDO(18001197)声明检验完整的IDCODE状态,包括器件的修订代码。如果器件使用不同的修订代码,则该声明失效。如果要SVF文件忽略IDCODE寄存器的修订代码,使用如下程序代替:
SDR 32 TDI(00000000) TDO(18001197) MASK(0FFFFFFF);
上述声明忽略了4位修订代码(参见表2)。IDCODE对应于每个系统管理器的型号,参见表3

表2. IDCODE寄存器位图
  Revision (4 Bits) Part Number (16 Bits) Manufacturer (11 Bits)  
Binary 0001 1000 0000 0000 0001 00011001011 1
Hex 1 8001 197

表3. 器件的IDCODE寄存器
Part IDCODE
MAX16065 _8001197
MAX16066 _8002197
MAX16067 _8003197
MAX16070 _8005197
MAX16071 _8006197
MAX16068 _8004197
注:下划线代表4位修订代码,可能会更改这些代码—请参考器件数据资料。