MAX16065–MAX16068和MAX16070/MAX16071闪存配置系统管理器的在电路编程
Abstract
MAX16065–MAX16068与MAX16070/MAX16071微处理器监控电路可以在焊接到电路板之后进行编程。这意味着只需存储没有编程的器件,可以在生产测试中写入最新的配置信息。进行一些简单的测量,确保应用电路能够通过SMBus™或JTAG总线对硬件编程,并在编程期间为器件供电。本应用笔记介绍了用SMBus和JTAG总线的编程算法。
引言
MAX16065/MAX16066、MAX16067、MAX16068和MAX16070/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总线与系统微处理器,或连接SMBus总线与编程测试点。系统微处理器的VCC控制开关切换。如果没有作用VCC,而是由12V供电,开关将SMBus接口连接到编程测试点。施加VCC后,开关将SMBus总线连接到系统微处理器。
应用电路举例
下图给出了设计用于在电路编程的三种不同电路。
由12V中等电源总线供电,通过SMBus接口编程
图2电路采用12V中等电源总线对MAX16065供电,通过模拟使能EN信号线监测。当12V总线上升到由EN连接的电阻分压器设定的门限值以上时,已经编程的MAX16065将尝试排序电源输出。没有编程的MAX16065不会有任何动作,排序输出仍然保持高阻抗状态。
图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复用器编程。
从12V中等电源总线供电,通过JTAG接口编程
图4所示MAX16066通过连接到12V中等电源总线的二极管“或”逻辑电路供电,可安全加载电源而且不会对下游电路供电,JTAG和电源连接到编程测试点。
图4. MAX16066由12V中等电源总线供电,通过JTAG接口编程。
编程算法
Maxim的电源管理器件集成了闪存存储器,用于存储器件的配置参数。电源上电时,闪存中的内容加载到RAM寄存器。RAM和闪存都可通过JTAG或SMBus接口访问。为了正确编程器件,所要求的参数必须编程到闪存存储器内。存储器地址如图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 |