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.

[参考译文] EK-TM4C1294XL:具有自动定序的 ADS7142手动模式

Guru**** 2473430 points
Other Parts Discussed in Thread: TM4C1294NCPDT, ADS7142, EK-TM4C1294XL

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/683621/ek-tm4c1294xl-ads7142-manual-mode-with-auto-sequencing

器件型号:EK-TM4C1294XL
主题中讨论的其他器件:TM4C1294NCPDTADS7142

您好!   

我已随附 TM4C1294NCPDT 数据表以参考以下问题以及 ADS7142数据表。  以下代码应仅将 ADS7142置于手动模式扫描 CH0。  然而、单步执行 Code Composer Studio 中的代码显示、主 MCU 由于任何原因而丢失 i2c 总线仲裁。  此错误在单主系统中似乎没有意义、但它是错误、因为我在代码中的错误检查例程是调试器被卡住的地方。   

第1291-1293页上是我用来开发 main 中调用的三个函数的主 Tx/Rx 软件流程图。  代码卡在 ADS7142SingleRegisterWrite()的第一次调用中。  

感谢您对这个问题的任何见解

e2e.ti.com/.../4214.tm4c1294ncpdt.pdf

e2e.ti.com/.../5736.ads7142.pdf

//
//
//// ADS7142_ManualMode_CH0Scan.c -演示简单 I2C
//传输和接收的示例。
//
//版权所有(c) 2010-2016 Texas Instruments Incorporated。 保留所有权利。
//软件许可协议
//
以源代码和二进制形式重新分发和使用,无论是否
进行//修改,只要
满足以下条件//:
//
重新分发源代码必须保留上述版权
//声明、此条件列表和以下免责声明。
//
//二进制形式的再发行必须复制上述版权
//声明、此条件列表和//

分发随附的//文档和/或其他材料中的以下免责声明。
////
未经

事先书面许可,不能使用德州仪器公司的名称或//其贡献者的名称来认可或推广源自此软件的产品//。
////
本软件由版权所有者和贡献者提供
//“按原样”,不

承认任何明示或暗示的保证,包括但不限于//适销性和对//特定用途适用性的暗示保证。 在任何情况下、版权
//所有者或贡献者都不对任何直接、间接、偶然、
//特殊、模范、 或相应的损害(包括但不
限于采购替代产品或服务;丧失使用、
//数据或利润; 或业务中断)、无论

出于何种原因使用
本软件(即使被告知可能会造成此类损坏)、还是出于任何原因而产生的任何//责任理论(无论是合同、严格责任还是侵权行为)//(包括疏忽或其他)。
//
//这是 Tiva 固件开发包版本2.1.3.156的一部分。
////
*****************

#include 
#include 
#include "inc/hw_i2c.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/pin_map.h"
#include "driverlib/i2c.h"
#include "driverlib/i2c.c"
#include "driverlib/pin_map.h"
#include "driverlib/uarticl"






//
//! \addtogroup i2c_examples_list
//!
//!
//! 此示例展示了如何配置 I2C8模块以进行连接/通信
//! 与 ADS7142 BoosterPack 配合使用。
//! 这包括设置主模块和从模块。 回送模式
//! 在内部将主从数据线和时钟线连接在一起。 此示例
//! 不使用环回模式是指正在与外部器件进行通信
//! 连接到 TM4C1294NCPDT 微控制器。
//! 设置从机模块的地址、以便从
//! 主器件。 然后检查数据以确保接收到的数据与
//! 传输的数据。 此示例使用//的轮询方法
! 发送和接收数据。
//!
//! 此示例使用以下外设和 I/O 信号。 您必须
//! 查看这些内容并根据您自己的董事会需要进行更改:
//! - I2C8外设
//! - GPIO 端口 A 外设(用于 I2C8引脚)
//! - I2C8SCL - PA2
//! - I2C8SDA - PA3
//!
//! 此示例使用以下中断处理程序。 要使用此示例
//! 在您自己的应用程序中、您必须将这些中断处理程序添加到
您的//! 矢量表。
//! -无。
////
*****************


//
//
//设置从机模块的地址。 这是以
//以下格式发送的7位地址:
//[A6:A5:A4:A3:A2:A1:A0:RS]
//
第一个字节的"RS"位置为零意味着主
设备//将数据发送到所选的从设备,而在该位置的一
个//意味着主设备将接收来自从设备的数据。
本示例中 ADS7142的从地址//由 ADS7142boostxl
//
//////上的硬件设置
#define SLAVE_ADDRESS 0x18

void
ADS7142SingleRegisterWrite (uint8_t RegisterAddress、uint8_t RegisterData)
{
//ADS7142单寄存器写入

//
////告知主模块在
//与从器件通信时将在总线上放置什么地址。 将地址设置为 SLAVE_ADDRESS
//(在从机模块中设置)。 接收参数设置为 false
//表示 I2C 主机正在向从机发起写入操作。 如果
// true、则表示 I2C 主设备正在从
//从设备开始读取。
//

I2CMasterSlaveAddrSet (I2C8_BASE、SLAVE_ADDRESS、false);

//将要发送的第一个字节放置到 TM4C1294的 I2CMDR 寄存器
中//从地址之后要发送的第一个字节是单寄存器写入操作码
I2CMasterDataPut (I2C8_BASE、SINGLE_WRITE);

//检查 I2C 总线以确保它
在(I2CMasterBusy (I2C8_BASE)时不忙

){
//读取 I2CMCS
}

// I2C 主命令开始突发发送3个字节
I2CMasterControl (I2C8_BASE、I2C_MASTER_CMD_BURST_SEND_START);

//实现延迟
(SysCtl100);

//在移动到下一个字节
之前等待 I2CMaster 完成传输,同时(I2CMasterBusy (I2C8_BASE)

){
//读取 I2CMCS
}

//检查 I2C8模块中的错误
,同时(I2CMasterErr (I2C8_BASE)!= I2C_MASTER_ERR_NOE)

//错误分支指令
(I2CMaster_ERROR


= I2CMaster_ERROR = I2CMaster_ERROR)/I2CMaster_ERROR = I2CMaster_ERROR (I2CMaster_BASE)

{
//错误服务
}

//为接收错误停止写入 I2C 主命令
(如果(I2CMasterErr (I2C8_BASE)!= I2C_MASTER_ERR_ARB_Lost)

{

I2CMasterControl (I2C8_BASE、I2C_MASTER_CMD_BURST_RIVE_ERROR_STOP);

//实施延迟
SysCtlDelay (I2C8_BASE)








;}将所需的数据写入 I2CSR_CMDBASE (I2DRESS)/ I2C8地址/
I2PR_PRISTER;//将数据写入所需的下一个数据写入 I2C8地址/ I2C8寄存器

针对下一个字节
I2CMasterControl (I2C8_BASE、I2C_MASTER_CMD_BURST_SEND_CONT)持续突发发送的/I2C 主命令;

//实现延迟
SysCtlDelay (100);

//在移动到下一个字节
之前等待 I2CMaster 完成传输,while (I2CMasterBusy (I2C8_BASE))

{
//读取 I2CMCS
}

//检查 I2C8模块中的错误
while (I2CMasterErr (I2C8_BASE))

//错误分支
{


//检查丢失的错误条件
if (I2CMaster_Err (I2C8_BASE)= I2CMERR_I2CMaster_I2ARC)

{
//错误服务
}

//为接收错误停止写入 I2C 主命令
(如果(I2CMasterErr (I2C8_BASE)!= I2C_MASTER_ERR_ARB_Lost)
{

I2CMasterControl (I2C8_BASE、I2C_MASTER_CMD_BURST_RIVE_ERROR_STOP);

//实施延迟
SysCtlDelay (I2CMasterControl)(将









数据放在所需的寄存器中)/ I2CI2CI_100字节
(PRB);将数据放在所需的最后一个数据寄存器中;// I2OBJESD20_CMD_RE_I2C8数据寄存器中

// I2C 主机命令用于完成数据的突发发送
I2CMasterControl (I2C8_BASE、I2C_MASTER_CMD_BURST_SEND_FIND);

//实现延迟
SysDelay (100);

//等待 I2C 主机完成发送
while (I2CMasterBusy (I2C8_BASE)))

}{
//读取 I2CMCS_I2ACT_RegisterError


(
while)/I2CM2CM4u.08/I2CM4u.0152CM4u.072R (while)









{
//ADS7142单寄存


器读取////告知主模块在//与从器件通信时它将在总线上放置什么地址。 将地址设置为 SLAVE_ADDRESS
//(在从机模块中设置)。 接收参数设置为 false
//表示 I2C 主机正在向从机发起写入操作。
//要执行寄存器读取、主器件必须首先发送所需的从器件地址进行通信。
//在从机地址之后,将发送单个寄存器读取操作码。
//如果为 true,则表示 I2C 主设备正在启动对
//从设备的读取。
//

// I2CMasterSlaveAddrSet (I2C8_BASE、SLAVE_ADDRESS、FALSE);

//将单个寄存器读取操作码放入 I2CMMDR 寄存器
I2CMasterDataPut (I2C8_BASE、SINGLE_READ);

//检查 I2C 总线以确保其
在(I2CMMCS Busy)(I2CMaster82Q8_BASE






、SIDRY)时不忙;//启动 I2C8_I2C 总线;// I2C8_PRIM_PRIM_START (I2CI_START)




//等待 I2C 主设备完成传输
while (I2CMasterBusy (I2C8_BASE))

{
//读取 I2C8模


块中的错误
while (I2CMC8 Err (I2C8_BASE))

//错误分支
{

//检查任意丢失错误条件
if (I2CMC8_Err_I2C_MASTER)= I2CMaster_I2C_Lost

{
//错误服务
}

//为接收错误停止写入 I2C 主命令
(如果(I2CMasterErr (I2C8_BASE)!= I2C_MASTER_ERR_ARB_Lost)
{

I2CMasterControl (I2C8_BASE、I2C_MASTER_CMD_BURST_RIVE_ERROR_STOP);

//实现延迟
SysCtlDelay (I2CMasterControl);

}







/将 I2C8_BASE (I2PR_CMD_READ)发送到寄存器中;// I2C8地址寄存器/ I2PR_CMD_REGISTER0 (以发送到寄存器中);// I2C8


针对寄存器读取
I2CMasterControl (I2C8_BASE、I2C_MASTER_CMD_BURST_SEND_FIND)所需的两个字节的完成突发发送的/I2C 主命令;

//实现延迟
SysCtlDelay (100);

//等待 I2C 主机完成数据传输
while (I2CMasterBusy (I2C8_BASE)

){
//读取 I2C8


模块中的错误标志
while (I2CMC8 Err (I2C8_BASE))

}//



将接收参数设置为 true 以便从 I2CMasterSet
(I2C8_BASE)接收数据;//从 I2CMaster2SlaveSet (I2C8_IsrasterPack)地址)

//检查 I2C 总线以确保它
在(I2CMasterBusy (I2C8_BASE)时不忙

){
//读取 I2CMCS
}

//从寄存器地址
I2CMasterControl (I2C8_BASE、I2C_MASTER_CMD_SINGLE_Receive)接收的单个字节的 I2C 主命令;

//实现 SysCtlDelay Delay
(100);

//等待 I2C 主机完成数据传输
while (I2CMasterBusy (I2C8_BASE)

){
//读取 I2CMCS
}

//检查 I2C8模块
while (I2CMC8 Err (I2C8_BASE))中的错误标志

{
//错误服务
}

//从 ADS2CMDR_I2CIR 寄存
器中获取数据


void
StartSampling ()
{
//提供器件地址和读取位以开始转换
I2CMasterSlaveAddrSet (I2C8_BASE、SLAVE_ADDRESS、TRUE);

//检查 I2C 总线以确保其
在(I2CMasterBusy (I2C8_BASE))期间不处于繁忙状态;

{
//读取 I2CMCS SysCls
}

//将 I2C 总线写入 I2CMasterStart
(I2CM2CM_I2C 控制主机

/ I2C 主机);I2CM2CMaster_I2C 控制(I2CM100_I2C 主机/主机突发)


{
//读取 I2CMCS
}

//允许主机完成接收第一个字节
while (I2CMasterBusy (I2C8_BASE))

{
//读取 I2CARB
}

//检查 I2C8模块中的错误
while (I2CMasterErr (I2C8_BASE))

//错误分支
{

//检查主机中断条件
= I2CMERR (I2CMasterr)= I2CMasterr_ERROR (I2CM_base)

{
//错误服务
}

//为接收错误停止写入 I2C 主命令
(如果(I2CMasterErr (I2C8_BASE)!= I2C_MASTER_ERR_ARB_Lost)
{

I2CMasterControl (I2C8_BASE、I2C_MASTER_CMD_RST_ERROR_STOP);

//实施延迟
SysCtlDelay (I2C8_BASE







)




;
}/ I2CMD20_CMD/ I2C8_PR_PRIM_PRIM_PRIM_PRIMART/STER_STER_PRIMARY

(CONT_PRIMARY);//接收数据时、2


(I2CI_PRIM_PRIM_PRIM_PRIM_PRIM_PRIM_PRIM_PRIMART/ I2CI_PRIM_PRIMART/ I2CI_COMMAND);//


{
//读取 I2CMCS
}

//允许主设备完成接收每个字节
while (I2CMasterBusy (I2C8_BASE))

{
//读取 I2CMCS
}

//检查 I2C8模块中的错误
while (I2CMARTE Err (I2C8_BASE)!= I2C_MASTER_ERR_NOE)

//错误检查 I2CMART_ERROR



(I2CMART_MASTER)= I2CMRITE_ERROR (I2C8_ERROR = I2CI_ERROR = I2CMSTRAST_ERROR)

{
//错误服务
}

//为接收错误停止写入 I2C 主命令
(如果(I2CMasterErr (I2C8_BASE)!= I2C_MASTER_ERR_ARB_Lost)
{

I2CMasterControl (I2C8_BASE、I2C_MASTER_CMD_BURST_RIVE_ERROR_STOP);

//实施延迟
SysCtlDelay (100));

}
错误服务








*
//
//配置 I2C8主站和从站并将它们连接到 ADS7142 BoosterPack
//
*********
int
main (void)
{
#if defined (target_is_TM4C129_RA0)||\
defined (target_is_TM4C129_RA1)||\
defined (target_is_TM4C129_RA2)
uint32_t ui32SysClock;
#endif

//
//将计时设置为直接从外部振荡器/振荡器运行。
// TODO:必须更改 SYSCTL_XTAL_值以匹配
电路板上//晶体的值。
//
#if defined (target_IS_TM4C129_RA0)||\
defined (target_IS_TM4C129_RA1)||\
defined (target_IS_TM4C129_RA2)
ui32SysClock = SysCtlCockFreqSet ((SYSCTL_XTAL_25MHz)| SYSC_SYSC_UST_SYSC_UST_SYSC_UST_SYSC_UST_SYSC_USTR_USTRL |

#SYSC_UST_SYSC_UST_SYSC_UST_SYSC_UST_SYSC_UST_SYSC_USTR_USTRIP_USTRIP_USTRIP_USTRIP_USTRIP_USTR_USTRIP_USTRIP_USTRIP_USTRIP_SYSC_USTRIP_SYSC_SYSC/#SYSC/







//
SysCtlPeripheralEnable (SYSCTL_Periph_I2C8);

//
对于此示例,I2C8与 PORta[3:2]一起使用。
实际使用的端口和//引脚在您的器件上可能不同、有关
//更多信息、请参阅数据表。 需要启用 GPIO 端口 A、以便可以
//使用这些引脚。
// TODO:将其更改为您正在使用的 GPIO 端口。
//
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);

//
为端口 A2和 A3上的 I2C8功能配置引脚复用。
//如果您的器件不支持引脚复用、则无需执行此步骤。
// TODO:更改此选项以选择您正在使用的端口/引脚。
//
GPIOPinConfigure (GPIO_PA2_I2C8SCL);
GPIOPinConfigure (GPIO_PA3_I2C8SDA);

//
为这些引脚选择 I2C 功能。 此函数还将
//为 I2C 操作配置 GPIO 引脚、将它们设置为
//使用弱上拉操作进行开漏操作。 请参阅数据表
//以查看每个引脚分配了哪些功能。
// TODO:更改此选项以选择您正在使用的端口/引脚。
//
GPIOPinTypeI2CSCL (GPIO_Porta_base、GPIO_PIN_2);
GPIOPinTypeI2C (GPIO_Porta_base、GPIO_PIN_3);

//
启用主中断。 此函数将启用
所有可用于 I2C 主设备的中断//。
// I2CMasterIntEnable (I2C8_BASE);
// I2CSlaveIntEnable (I2C8_BASE);

#if defined (TARGET_IS_TM4C129_RA0)||\
defined (TARGET_IS_TM4C129_RA1)||\
defined (TARGET_TM4C129_RA2)|
SysClaterClock (I2C8_RA2)、SysClitC12_RA2

) false);
#endif


//让我们将器件置于具有单通道单端配置的手动模式
//用于数据转换

//选择通道输入配置
ADS7142SingleSingerWrite (ADS7142_REG_CHANNE_CFG、ADS7142_VAL_CHANNEL_CFG_INPUT_CFG_1_CHANNEL_CONST_END_BENDENT);ADS7142_OPANE_RE_MOREG_OPALE_CONFILE_MORE_MORE_142_MORE_MORE_MODE_MODE_MODE_OPALE_OPALE_OPANE_MORE_MORE_MORE_MORE_MORE_MOREGLE_MOREGLE_MODE_MODE_MODE_MODE_MODE_MODE_OPANE_OPALE_OPANE_MOREG/

ADS7142_OPALE_OPALE_OPALE_OPALE_OPALE_OPANE_MORE_MORE_MOREG/


ADS7142_MOREG





//开始手动模式操作
//开始扫描 Ch0
StartSampling();

return (0);

} 

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

    尊敬的 William:

    这与您在这里的其他线程无关吗? 我仍在等待回复... https://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/p/679781/2509894#2509894

    编辑:问题不同、先前的主题已解决、因此这是一个新主题、一旦收到 Saleae 离线捕获、就会发布有关此问题的新帖子。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请记住、我不会启用任何中断、因为我将使用轮询方法对器件的 i2c 配置进行配置。 但是、对于从 I2CMasterErr (I2C8_BASE)读回的三种可能的错误条件、我没有编写错误服务例程、即 I2C_MASTER_ERR_ADDR_ACK、I2C_MASTER_ERR_DATA_ACK 或 I2C_MASTER_ERR_ARB_LOST。

    我不知道如何在不转向中断例程的情况下制定这些例程:这很可能是下一步

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

    您好、William、

    [引用 USER="William Santos56">owever、单步执行 Code Composer Studio 中的代码表明主 MCU 由于任何原因而失去 i2c 总线仲裁。  [/报价]

    单主系统也会出现此问题、但频率要低得多。 这也可能是由于硬件问题造成的。

    总线上是否还有其他从器件? 使用的上拉电阻器的值是多少? 是否也有任何硬件更改? 您是否检查过接线仍然连接良好?

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

    我将 TM4C1294NCPDT Launchpad 与 ADS7142 BoosterPack 搭配使用、配置如产品页面所示。 我尝试将 BoosterPack 移至另一组接头引脚并重新配置该 I2C 模块的代码、但由于仲裁丢失而出现相同的错误、因此我不认为硬件是问题所在。 总线上没有其他从器件、只有 ADS7142。 上拉电阻器的值是 ADS7142 BoosterPack 上 R17/R18的值、即1.00k。

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

    好的、感谢您的详细信息。 您从一个工作示例中发送了一个 LSA 捕获、但我认为鉴于问题的性质、在发生 I2C 仲裁丢失时对 SDA 和 SCL 进行范围捕获最有帮助、现在可以尝试发现发生了什么错误。

    尽管如此、我已经稍微研究了一些问题、尽管我不太可能将其提出来。 我认为1k 上拉电阻对于这个设置来说是一个过大的微移、我宁愿看到上拉电阻器大约为1.5k-2k 的东西。

    其原因是在 TM4C 侧、I2C 引脚设置为2mA 驱动电流、且 Vcc = 3.3V 和 VOL = 0.4V、因此根据、TM4C 的最小下拉电阻大小需要为1.5kOhm。

    根据计算: www.ti.com/.../slva689.pdf

    TivaWare GPIOPinType 函数对 I2C 使用以下命令:GPIOPadConfigSet (ui32Port、ui8引脚、GPIO_Strength _2mA、GPIO_PIN_TYPE_STD);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    拉尔夫

    我发现这份文档概述了我在总线仲裁方面可能遇到的问题:

    该文件指出:

    外部从器件通过保持 SDA 为低电平挂起总线

    如果处理器/I2C 模块在主控传输的过程中被复位、就会出现问题。 在这种情况下、外部从器件可能会将 SDA 保持在低电平以发送0 (或 ACK)。 在这种情况下、直到它在 SCL 上获得另一个下降沿、它才会释放 SDA。 即使在这种情况下、直到它尝试发送"1"、它才会在看到 SCL 下降后实际释放 SDA。 最终结果是总线将挂起。 如果 I2C 尝试启动一个新的传输、它将达到一个"仲裁丢失"条件、这是因为 SDA 与它发送的地址不匹配。

    有几种方法可以从这种情况中恢复。

    对于将 SCL/SDA 引脚与 GPIO 复用的主器件、最简单的方法是为 GPIO 操作配置引脚并切换 SCL、直到从器件释放 SDA。 此时、您应该能够恢复正常操作。

    2、许多主器件不会将 SCL/SDA 与 GPIO 复用、因为 I2C I/O 单元通常是特殊的开漏单元。 据报告、即使在这些器件上、也会有权变措施。 通过将 I2C 配置为"自由数据格式"、然后读取一个字节、I2C 将立即开始发送时钟以输入数据(而不是尝试发送地址)。 这可用于释放总线。

    3.一些从器件可以在总线挂起时复位其 I2C 接口(例如、在33ms 后 LTC4151)。 如果这不是默认行为、请将其打开。

    对于实际从 I2C 引导的器件、您需要注意这种情况。 由于上述权变措施依赖于软件、因此如果器件无法启动、则无法实现! 在本例中、您需要执行不同的操作。 例如、如果您可以控制复位的时序、则可以确保仅在没有进行 I2C 事务时复位器件。 另一种方法是构建电路板、使处理器复位电源循环使用 I2C EEPROM/FLASH (或简单地将其复位、但大多数 EEPROM/FLASH 没有复位引脚)。

    我继续获取0xFF 的原因是我正在尝试错误服务例程中的解决方案#1。  但是、我不知道如何使处理器在 SDA 被从器件释放或保持 SDA 的任何东西(我认为它可能是主器件)时实现。

    此致、

    将会

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

    尊敬的 William:

    刚刚注意到、现在您也通过新的捕捉来达到400kHz (上面的代码没有反映这一点)、问题是否发生在100kHz?

    我不确定这种情况是否符合将由1解决的问题。 从您的捕获中看、它看起来不像从器件保持 SDA、而是 SCL 信号被扩展。

    对于社区成员:

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

    不是在400kHz 发生、我认为默认的 I2C 速度为100kHz、但很明显、它是400kHz。 我在没有 SCL 切换的情况下向您发送了另一个捕获。

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

    您能否获得 SDA 和 SCL 线路的示波器捕获、以便我们能够在故障情况下看到确切的信号行为?

    此外、如果您让它以100kHz 的频率工作、则正确操作的示波器捕获也很有用。

    从捕获结果来看、主器件会释放时钟、这只有在它认为它在发送的第8位上丢失仲裁时才有意义。 这可能表示存在噪声或接地基准问题。 鉴于这是 BoosterPack 和 LaunchPad、连接不应存在此类问题、这使得这成为一个有趣的案例。 我认为、范围捕获最有助于清除可能发生的情况。

    同样、就像完整性检查一样、您是否验证了 BoosterPack 从地址在软件中是否正确设置并正确输出、直到仲裁发生? 我想知道这一点、因为从地址在您的工作捕获和非工作捕获之间看起来不同?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    拉尔夫

    我刚刚尝试了一组不同的相同硬件(不同的 launchpad、BoosterPack)、并收到相同的错误。  时钟 SCL 实际上以400kHz 的频率运行。  根据完整性检查、是的、我已经多次检查它:BoosterPack 上 ADS7142的从地址为0x18。  发生的情况是、固件采用0x18、左移1位以在器件地址之后提供读/写位。 因此、器件地址实际上是7位、后跟读取/写入。  相反、salae 分析仪将0x18读取为8位地址、从而在设置为写入时显示0x30、在设置为读取时显示0x31。  因此、分析仪无法正确地将读/写位放置在7位0x18地址之后。

    我将向您发送有关错误的最新分析器屏幕截图。  谢谢

    此致、

    将会  

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

    有趣的是、如果您看看故障情况的 Saleae 捕获、尽管主器件似乎在太长的时间内保持 SDA 高电平、对吧? 我认为示波器捕获可能对查看其中发生的情况也很有用。 因为根据您的描述、SDA 应该下降5个时钟周期、但在整个过程中它仍然保持高电平... 这将表明一个问题甚至比仲裁点早。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    有趣、

    我刚刚通过电子邮件向您提出了同样的意见。

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

    拉尔夫

    另一个有趣的注意事项是、如果我从 TM4C1294 Launchpad 上取下 ADS7142 BoosterPack、代码仍将运行到仲裁错误中。  主机上的某个设备必须不正确地处理命令。 谢谢

    将会

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想知道、引脚 PQ2和 PQ3连接到 EK-TM4C1294XL Launchpad 上的 PA3和 PA2是否是问题的一部分。 我尝试从您发布的 C 文件创建 CCS 工程、但我没有文件"ADS7142registermap.h"。 您能否将项目导出到.zip 文件并将其发布或通过电子邮件发送给我和 Ralf?