Other Parts Discussed in Thread: TMP102
主题中讨论的其他器件: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