跳到主要内容

AN-CM-255 SLG46824/6 MTP Arduino编程示例

内容

术语和定义

eepm电可擦可编程只读存储器
一世2CInter-integrated电路
MTP多次可编程
NVM非易失性内存
OTP一次性可编程

参考文献

有关文件及软件,请浏览:

https://www.dialog-seminile.com/configurable-mixed-signal.

下载我们的免费格林帕克软件设计师(1]以打开。gp文件[2]并查看所提出的电路设计。使用格林帕克开发工具[3.]在几分钟内将设计冻结到您自己的定制IC中。yabo国际娱乐对话框半导体提供完整的应用程序笔记库[4.]具有设计示例以及对话框IC中的功能和块的说明。

  1. GreenPAK设计软件,软件下载和用户指南,对话框半导体yabo国际娱乐
  2. AN-CM-255 SLG46824/6 MTP Arduino Programming Eample.gp格林帕克设计文件,Dialog半导yabo国际娱乐体
  3. GreenPAK开发工具格林帕克开发工具网页,对话半导体yabo国际娱乐
  4. GreenPak应用笔记格林帕克应用笔记网页,对话框半导体yabo国际娱乐
  5. 在系统编程指南,GreenPak用户指南和手册,对话半导体yabo国际娱乐

作者:克雷格·卡里

介绍

在这个应用笔记中,我们展示了如何使用SLG46824/6 Arduino编程草图来编写对话框SLG46824/6格林帕克多次可编程(MTP)设备。

大多数格林帕克设备是一次性可编程(OTP),这意味着一旦写入非易失性存储库(NVM),它就无法覆盖。格林帕克与MTP功能一样,与SLG46824和SLG46826一样,具有不同类型的NVM存储库,可以多次编程。

我们写了一个arduino素描允许用户编程MTP格林帕克使用一些简单的串行监视器命令。在本申请中,我们使用SLG46826作为我们的格林帕克用mtp。

我们提供了基于C/ c++的开源平台的Arduino Uno示例代码。设计人员应该推断Arduino代码中用于他们特定平台的技术。

有关我的具体信息2C信号规格,I2C寻址和内存空间,请参考格林帕克提供的系统内部编程指南SLG46826产品页面.此应用笔记提供此编程指南的简单实现。

Arduino-GreenPAK连接

编程我们的SLG46826的NVM格林帕克在我们的Arduino草图中,我们首先需要连接四个Arduino Uno引脚到我们的格林帕克.您可以直接连接这些引脚格林帕克插座适配器或接线板与格林帕克焊接。

表1:Arduino Uno / GreenPAK连接
格林帕克
arduino.

VDD(销1)

数字销2

GND(销11)

GND.

sci(销8)

A5

SDA(PIN 9)

A4

图1. Arduino连接

请注意外部我2C上拉电阻未显示图1.请将4.7kΩ从SCL和SDA连接到Arduino的3.3 V输出。

从GreenPAK设计文件中导出GreenPAK NVM数据

我们要做一个非常简单的格林帕克设计来说明如何导出NVM数据。下面的设计是一个简单的水平移位器,左边的蓝色大头针系在VDD (3.3v)上,而右边的黄色大头针系在VDD2 (1.8v)上。

图2. SLG46826中简单的GreenPak设计

导出该设计的信息,需要选择“文件→导出→导出NVM”,如下图所示图3.

图3。出口NVM

然后您需要进行选择Intel HEX文件(* .hex)作为文件类型并保存文件。

图4.另存为.hex文件

现在,您需要使用文本编辑器(如Notepad ++)打开.hex文件。要了解有关英特尔的十六进制文件格式和语法的更多信息,请查看其维基百科页面.对于此应用程序,我们只对文件的数据部分感兴趣,如图所示图5.

图5.查看Notepad ++中的NVM数据

突出显示并复制位于十六进制文件中的256个字节的NVM配置数据。我们复制的每一行都是32个字符长,对应于16个字节。

将信息粘贴到Arduino草图的突出显示的nvmString[]部分,如下所示图6..如果您使用的是一个非arduino微控制器,您可以编写一个函数来解析保存在格林帕克.GP6文件。(如果你打开一个格林帕克文件,您将看到我们以易于访问的XML格式存储项目信息。)

图6。Arduino草图

设置您的EEPROM数据格林帕克设计,从组件面板中选择EEPROM块,打开其属性面板,然后单击“设置数据”。

图7.设置EEPROM数据

现在,您可以使用GUI接口单独编辑EEPROM中的每个字节。

图8。eepm数据编辑器

一旦设置了EEPROM数据,就可以使用前面介绍的导出NVM数据的相同方法将其导出到HEX文件。将这些256字节的EEPROM数据插入到Arduino草图的eepromString[]部分。

对于每个自定义设计,检查项目设置的“安全”选项卡中的保护设置是很重要的。此选项卡为矩阵配置寄存器、NVM和EEPROM配置保护位。在一定的配置下,上传NVM序列可以将SLG46824/6锁定到当前配置,移除芯片的MTP功能。

图9.矩阵寄存器,NVM和EEPROM保护设置

使用Arduino Sketch

将草图上传到您的Arduino,并以115200波特率打开串行监视器。现在你可以使用草图的MENU提示符来执行几个命令:

  • 读取-使用指定的从地址读取设备的NVM数据或EEPROM数据
  • 擦除-使用指定的从地址擦除设备的NVM数据或EEPROM数据
  • 写—使用指定的从地址擦除并写入设备的NVM数据或EEPROM数据。写入nvmString[]或eepromString[]数组中的数据。
  • ping - 返回连接到I的设备从站地址列表2C巴士

这些命令的结果将被打印到串行监视器控制台。

图10。Arduino连续监控

编程提示和最佳实践

在支持SLG46824 / 6的过程中,我们记录了一些编程技巧,以帮助避免与擦除和写入NVM地址空间相关的常见缺陷。以下小节更详细地概述了本主题。

执行精确的16字节NVM页写:

将数据写入SLG46824 / 6的NVM时,有三种技术可避免:

  • 页面写入少于16个字节
  • 页写入大于16字节
  • 不从页面的第一个寄存器开始的页面写入(IE: 0x10, 0x20,等等)。

如果使用任何上述技术,MTP界面将忽略I2C写入以避免使用不正确的信息加载NVM。我们建议执行我2C写入后读取NVM地址空间以验证正确的数据传输。

转移NVM数据到矩阵配置寄存器

当写入NVM时,矩阵配置寄存器不会自动重新加载新写入的NVM数据。必须通过循环PAK VDD或通过使用i产生软复位来手动启动转移2C.通过在0xC8地址中设置寄存器<1601>,设备重新启用上电复位(POR)序列并从NVM重新加载寄存器数据到寄存器中。

重置我2C NVM擦除后的地址:

当擦除NVM时,包含I的NVM地址2C从站地址将设置为0000.在擦除之后,芯片将在配置寄存器内保持其当前从地址,直到设备重置如上所述。一旦芯片重置,我2C从地址必须在配置寄存器中设置在地址0xca中,每次格林帕克断电或复位。这必须在新的I2NVM中已经写入C从地址页。

勘误表讨论

当写入“Page Erase Byte”(地址:0xE3)时,SLG46824/6在I2C命令的“Data”部分之后产生一个非I2C兼容的ACK。根据I2C主机的实现,这种行为可能被解释为NACK。

为了适应这种行为,我们修改了Arduino程序员,注释掉了图11中所示的代码。这段代码在eraschip()函数中每个I2C命令的末尾检查I2C ACK。该功能用于擦除NVM和EEPROM页面。由于这段代码位于For循环中," return -1; "行导致MCU提前退出函数。

图11:对Arduino程序员的ACK行为修改

尽管存在NACK,但NVM和EEPROM擦除功能将正确执行。有关此行为的详细说明,请参考SLG46824 / 6 Errata文档(修订版XC)中的“问题2:NVM和EEPROM页面擦除字节”的“问题2:非I2C兼容的ACK行为”对话框的网站

结论

在本申请中,我们描述了使用提供的Arduino程序员将自定义NVM和EEPROM字符串上传到A的过程格林帕克Arduino草图中的代码经过了详细的注释,但如果您对草图有任何疑问,请联系我们的现场应用工程师或将您的问题张贴在我们的论坛.有关MTP编程寄存器和程序的更深入的信息,请参考Dialog的在系统编程指南(在参考资料部分的链接中提供)。