This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] DS90UB947-Q1:DES 和#39;926和 SER 和#39;947 BIST 模式故障

Guru**** 2782445 points

Other Parts Discussed in Thread: TMP102

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/719131/ds90ub947-q1-des-926-and-ser-947-bist-mode-failure

器件型号:DS90UB947-Q1
主题中讨论的其他器件:TMP102

(我尝试添加 t 我之前的线程、但您的系统不会让我这样做)

我在将设置置于 BIST 模式时出错

我有一个小工具可以让我创建 CLI 命令的脚本。

忽略 script()宏中的数字-它用于创建唯一符号,可以是任何值。

设置为  :I2C_MASTER -- 947 -- 926。 I2C_MASTER 是运行命令的器件。 有时、我还使用 SparkFun 提供的 TMP102分线来测试 I2C 与 I2C 从设备的链路、以测试整个链路。 此测试中未使用、但用于设置它的代码仍在脚本中

947地址为 xC0;926是 XC2 -与评估板上的默认值相同

// script_947_BIST.h
//将947 SER 上的 I2C 通道设置为926 DES
//然后设置 BIST
//
//宏的格式:script( unique ID,string )
//其中
// UNIQUE ID 是一些使用数字的唯一字符集
//
//“主电源 <1..7数据>"
//"主电源 <1..7数据>"
//"master_rd "
//
//====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//这只是为了将947设置为主 I2C 器件
//以及947与926通信的能力
//我们连接到947
//====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

Script( 1,"IIC-master")//确保

Script( 10,"IIC-wrrd x0C 1 x00")//从 reg 0中读取1个字节// dev ID

// reg 0x03 default = 0xD2 = 1101 0010
//位 val 含义
// x80 x80启用反向通道 CRC 校验器
// x40 x40保留-为什么设置??
// x20 x00 =0不自动 ACK
// x10 x10 =启用相对于 PCLK 的 DE/HS/VS 输入上的滤波
// x08 x08 ==通过所有已知的从器件地址
// x04 x00 =保留
// x02 x02 ==如果 PCLK 失败,请使用内部 osc
// x01 x00 =保留
//结果 XDA

Script( 40,"IIC-wrx0C x03 XDA")// reg x03 = XDA

Script( 50,"IIC-wrrd x0C 1 x06")//读取 DES 开发 ID

// reg x07 ==从器件 ID[0]- DES "8位"I2C 地址
// reg x07 ==从器件别名[0]- DES "8位"I2C 地址
//这让我们可以与 DES 进行通信

Script( 60,"IIC-wrx0C x07 x58")//从机 ID[0]
Script( 70,"IIC-wrx0C x08 x58")//从别名[0]

//我们使用来自 SparkFun 的 TMP102分线板作为简单的 I2C 从设备
//它的7位地址是 x48;向左移动到8位 addr =x90
//寄存器 x70和 x77分别是 ID[1]和 Alias[1]寄存器

script( 80,"IIC-wrx0C x70 x90")//从机 ID[1]= TMP102 8位地址
script( 90,"IIC-Wr x0C x77 x90")//从别名[1]= TMP102 8位地址

//寄存器 XC2 == CFG 寄存器
//默认值=x80、用于设置 ENH_LV 位:
//启用增强链接验证
//基本上,检查 SER-LINK_DES 连接
//
//位 x20 =TX_Rptr、这允许 SER 作为 I2C msg 的中继器
// x80 | x20 == xA0

//script( 100,"IIC-wrx0C XC2 xA0")//设置 CFG 寄存器

//读取两个 ID 寄存器

Script( 103,"Read 947 ID str")
Script( 104,"IIC-wrrd x0C 6 xF0")//读取 ID 字符串947

Script( 105,"Read 926 ID str")
Script( 106,"delay 100")//延迟以查看它是否有用
Script( 107,"IIC-wrrd x2C 6 xF0")//读取 ID 字符串926
Script( 108,"delay 100")//延迟以查看它是否有用

//====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
//从947到926之间的连接很好
//====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

//现在在'947上启用 BIST
// x14 = 0x05 100MHz 时钟、启用 BIST
//***** 注:947 (本地) BIST 错误计数为 x1B ****

Script( 110,"IIC-wrx0C x14 x05")//本地947进入 BIST 模式

//查看 w 是否可以读取另一侧

Script( 114,"delay 100")//延迟以查看它是否有用
Script( 115,"IIC-wrrd x2C 6 xF0")//读取 ID 字符串926
Script( 116,"delay 100")//延迟以查看它是否有用
Script( 117,"IIC-wrrd x0C 6 xF0")//读取 ID 字符串947
//
//然后尝试错误
// TI 建议设置'947 DES 寄存器:
// X44位0 = 1禁用自适应 EQ
// X44位7..5 (0xE0)、自0x00到0xE0
//然后 X44位3.0.1 =从0x00到0x0E

//script( 117,“BIST 打开”)
//script( 118,"IIC-wrx2C x24 x03")// AEQ =关闭;设置阶段1=0E

script( 120,"Aeq = 0;范围最大值;读取计数)
Script( 121,"IIC-wrx2C X44 x0F")// AEQ = off;设置阶段1=0E

script( 125,“读取 BIST 计数”)
script( 126,"IIC-wrrd x2C 1 x25")

script( 130,"Aeq = 0;范围最大值;读取计数)
Script( 131,"IIC-wrx2C X44 x0F")// AEQ = off;设置阶段1=0E

Script( 135,"delay 3000")//遵守

===========================================================================================================================================

这是包含注释的照射行程结果

启动串行命令行
注:这是帮助:(括号中的数字是预期/最小 args 数)

定义的命令:
函数[args]帮助
IIC-MASTER [0] init I2C MASTER
IIC 从器件[1] INIT I2C 从器件+addr
IIC 电源[2]主电源 <1..7数据>
IIC-wrrd [2]主电源 <1..7数据>
IIC-rd [2] MASTER_rd
延迟[1]延迟


四 cmd>脚本

首先确保这是 I2C 主设备
请注意、这是使用 I2C 硬件在 Adafruit mini-pro 上运行的代码

IIC 主设备
正在合并 I2C 主设备

===================================================================================================================================================

这将从本地器件读取947 I2C 地址

1.4-cmd> IIC-wrrd x0C 1 x00
读取计数:1;rd_buf:18

===================================================================================================================================================

这会将 I2C 反向通道设置为926

四向 CMD > IIC-wr x0C x03 XDA
slave_addr C;num_data 2;数据(十六进制):3、DA、

===================================================================================================================================================

读取远程926 DES 的 I2C 地址-"58"(十六进制)是正确的

四 CMD > IIC-wrrd x0C 1 x06
读取计数:1;rd_buf:58

===================================================================================================================================================

这些设置本地926 SER 上 DES 的从 ID /别名寄存器

四向 CMD > IIC-wr x0C x07 x58
slave_addr C;num_data 2;数据(十六进制):7、58、  
四向 CMD > IIC-wr x0C x08 x58
slave_addr C;num_data 2;数据(十六进制):8、58、

===================================================================================================================================================

阅读本地947 ID 字符串以显示我们可以看到自己

四 CMD > IIC-wrrd x0C 6 xF0
读取计数:6;rd_buf:5F 55 42 39 34 37 -正确

===================================================================================================================================================

现在读取远程926 ID 字符串。

四 CMD > 延迟100

四 CMD > IIC-wrrd x2C 6 xF0
读取计数:0;rd_buf:14 C 54 2 D2 5

它失败了。 但是,如果存在延迟,则有时读取为正确:

四 CMD > 延迟100
四 CMD > IIC-wrrd x2C 6 xF0
写入数据(十六进制):F0、  
读取计数:6;rd_buf:5F 55 42 39 32 36

===================================================================================================================================================

在本地947侧进入 BIST 模式

四向 CMD > IIC-wr x0C x14 x05

===================================================================================================================================================

我们将返回到读取远程926 ID 字符串的垃圾箱

四 CMD > IIC-wrrd x2C 6 xF0
读取计数:0;rd_buf:B8 3 A 0 2 0

===================================================================================================================================================

但本地947还可以

四 CMD > IIC-wrrd x0C 6 xF0
读取计数:6;rd_buf:5F 55 42 39 34 37

===================================================================================================================================================

现在情况确实在下滑

AEQ = 0;范围最大值;读取计数

四向 CMD > IIC-wr x2C X44 x0F
SLAVE_addr 2C;num_data 2;数据(十六进制):44、F、错误写入寄存器 xFFFFFFFE:I2C_ERR_Nack_ADDR

===================================================================================================================================================

这位于 Nack_ADDR 之后-不应信任任何内容
需要947和926的完整电源周期才能恢复到可信状态
请注意读取计数为0
这也可能是 Arduino I2C"线"库工作方式的伪影
但不知道我是否可以信任(十六进制)计数54

读取 BIST 计数

四 CMD > IIC-wrrd x2C 1 x25
写入数据(十六进制):25、  
读取计数:0;rd_buf:54

===================================================================================================================================================

AEQ = 0;范围最大值;读取计数


四向 CMD > IIC-wr x2C X44 x0F
SLAVE_addr 2C;num_data 2;数据(十六进制):44、F、错误写入寄存器 xFFFFFFFE:I2C_ERR_Nack_ADDR

四 CMD >延迟3000

===================================================================================================================================================

(返回到正常的计划节目)

因此、我基本上被卡住了。 最令人困扰的是进入 BIST 模式可擦除 I2C 反向通道。

我只能假设我没有在947至926上正确进入 I2C 模式、或者没有正确进入 BIST 模式。 评估板设置为出厂默认值。

请注意、我在913/914链接上获得了类似的结果、其中我连接到914 DES、因为这是我的智能设备所在的系统。

我唯一能想到的是查看/pass 输出选通。

我还可以查看这是否是一个时钟扩展问题-我今天将对此进行检查。

谢谢。。。 Bandit

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这似乎是时钟拉伸问题。 我有一些一定会显示时钟展宽的示波器图像。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好-

    在我看来、您已经确定了问题的根本原因。 如果需要进一步的援助,请告诉我们。

    此致、
    Davor
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我一直在寻找一个可以扩展时钟的 I2C 总线主设备。

    我需要通过 RS232或 USB 连接到 PC 的器件、并且可以在 PC 上运行一个工具、该工具将与 I2C 主接口器件通信、然后与 SER 或 DES 通信。 然后、我需要一个 API、我可以用它替换该工具、以便我可以运行自动测试-一个使用 API 与 I2C 主接口通信的 C 程序。

    您对此类工具有什么建议吗?

    时钟拉伸的有趣之处在于开始时(这是拉伸镜捕捉的左侧(如下)

    这是正常-成功-序列。 它必须升高 SCL 线路、然后执行启动模式。 请注意、DES 7位 addr 为 x58。 LS 位为高电平=读取。

    时钟拉伸约为2.5毫秒

    这是拉伸末端后的序列(上述序列的右侧部分)。 但是、此时主器件会被混淆、读取0字节、并在缓冲区中打印6字节的回收站。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好-

    可选择 Aardvark I2C/SPI 主机适配器的总相位数。

    此致、
    Davor
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    有趣。

    我还四处寻找了能正常工作的芯片。

    我找到了2. 这两款评估套件都包含在 Digikey 上:微芯片 MCP2221A (套件:ADM00678-ND;82.40美元)和 FTDI FT2221A (套件:768-1361-ND;15.91美元)-足以让我快速入门。

    但是 、Aardvark I2C/SPI 主机适配器将是生产线仪器的理想选择。 300美元对这种情况来说还不错。

    谢谢! (笑声) Bandit