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.

[参考译文] TM4C123GH6PM:TM4C123中的中断优先级

Guru**** 2524550 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/837247/tm4c123gh6pm-interrupt-priority-in-tm4c123

器件型号:TM4C123GH6PM
主题中讨论的其他器件:TM4C123

您好!

我正在尝试使 FXOS8700 accelmag 和 FXAS21002陀螺仪与 TM4C123 MCU 配合使用。 到目前为止、我编写了 i2c 驱动程序、使传感器初始化并生成中断、处理这些中断并从 i2c 读取数据。 发生的情况是、如果我将代码配置为仅与一个传感器一起工作、它就会工作、但是如果我有两个中断、一段时间(例如30-60秒)后、中断处理机制中的一个会失败。

以下是代码的相关部分:

//陀螺仪中断引脚设置
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC);
GPIOPinTypeGPIOInput (GPIO_PORTC_BASE、GPIO_PIN_4);
GPIOPadConfigSet (GPIO_PORTC_BASE、GPIO_PIN_4、GPIO_Strength _2mA、GPIO_PIN_TYPE_STD);
GPIOIntDisable (GPIO_PORTC_BASE、GPIO_PIN_4);
GPIOIntClear (GPIO_PORTC_BASE、GPIO_PIN_4);
GPIOIntRegister (GPIO_PORTC_BASE、gyro_ISR);
GPIOIntTypeSet (GPIO_PORTC_BASE、GPIO_PIN_4、GPIO_FALLING_EDGE);
GPIOIntEnable (GPIO_PORTC_BASE、GPIO_PIN_4);

// accelmag 中断引脚设置
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
GPIOPinTypeGPIOInput (GPIO_Porte _BASE、GPIO_PIN_2);
GPIOPadConfigSet (GPIO_Porte _BASE、GPIO_PIN_2、GPIO_Strength _2mA、GPIO_PIN_TYPE_STD);
GPIOIntDisable (GPIO_Porte _BASE、GPIO_PIN_2);
GPIOIntClear (GPIO_Porte _BASE、GPIO_PIN_2);
GPIOIntRegister (GPIO_Porte _BASE、accelmag_ISR);
GPIOIntTypeSet (GPIO_Porte _BASE、GPIO_PIN_2、GPIO_RISE_EDGE);
GPIOIntEnable (GPIO_Porte _BASE、GPIO_PIN_2); 

PC4配置为下降沿、PE2 配置为上升沿、连接到传感器板、陀螺仪配置为生成有源0输出(用于下降沿)、accelmag 板配置为生成有源1输出。

//陀螺仪中断服务例程
void gyro_ISR (void){
if (GPIOIntStatus (GPIO_PORTC_BASE、false)& GPIO_PIN_4){
GPIOIntClear (GPIO_PORTC_BASE、GPIO_PIN_4);
gyro_data_ready = true;
}
}

// accelmag 中断服务例程
void accelmag_isr (void){

if (GPIOIntStatus (GPIO_Porte _BASE、false)& GPIO_PIN_2){
GPIOIntClear (GPIO_Porte _BASE、GPIO_PIN_2);
accelmag_data_ready = true;
}
}

这里是中断处理程序。 它们只标记 volatile 布尔值、以便我可以从主循环读取传感器。

在主循环中、我检查这些布尔值、然后读取数据:

while (1){

//CURRENT_TIME = nh.now();

if (gyro_data_ready){
GyroGetData (FXAS21002C_address、&gyroRD);
gyro_data_ready = false;
}

if (accelmag_data_ready){
AGGetData (FXOS8700地址、&accelRD、&magRD);
accelmag_data_ready = false;
}
} 

无论我尝试了什么、我都无法消除此错误。 accelmag 的高电平有效中断卡在1、这意味着传感器未被读取(这将清除传感器上的中断)

一开始我以为这与 FXOS8700 accelmag 或 FXAS21002陀螺仪传感器有关、但此时我认为这与中断有关。 在某种程度上、传感器上升中断线路、但中断不会触发、因为会发生其他中断。 要支持此理论:

答:通过仔细检查两条中断线路、(通过录像)我可以证明、当两个中断同时触发时、会发生功能错误。

b.我将故障 accelmag 中断从 PE2替换为 PB4。 这一次 PC4上的另一个中断线路失败(来自陀螺仪)

下面是视频链接: twitter.com/altineller/status/1170381044115283973 (我必须将其放在 Twitter 上、因为 Vimeo 看起来不像示波器射门)

对有关该问题的任何想法、帮助和建议都非常赞赏。

此致、

CAN

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

    您好!

     我看到您使用了它  GPIOIntStatus(GPIO_PORTC_BASE, false) as well as in the other interrupt where you try to get the raw interrupt status. Why don't you use GPIOIntStatus(GPIO_PORTC_BASE, true) instead? With that said, I don't think it is the cause of your problem.

     我建议您尝试如下所示的操作。 对另一个 ISR 也执行此操作。 这样做的目的是确保在退出 ISR 之前清除标志完全完成。 可能存在竞争条件、因此您退出 ISR、但标志尚未清除。 发生这种情况时、会立即无限地再次进入 ISR。 如果此更改不起作用、我们需要调查其他可能的原因。  

    voidgyro_isr(void) {
        if(GPIOIntStatus(GPIO_PORTC_BASE, false) & GPIO_PIN_4) {
            GPIOIntClear(GPIO_PORTC_BASE, GPIO_PIN_4);
            gyro_data_ready = true;
        }
        GPIOIntStatus(GPIO_PORTC_BASE, false); // make sure this is not optimized out
    }
    // accelmag interrupt service routine
    voidaccelmag_isr(void) {
        if(GPIOIntStatus(GPIO_PORTE_BASE, false) & GPIO_PIN_2) {
            GPIOIntClear(GPIO_PORTE_BASE, GPIO_PIN_2);
            accelmag_data_ready = true;
        }
    GPIOIntStatus(GPIO_PORTE_BASE, false); // make sure this is not optimized out, check the disassembly code
    }
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我的小组"喜欢"供应商的 Charles 分析。    (但不知为何-无法"找到"*类似*按钮-这些 MCU 名称的"领先"。)    

    我们的这一理论源自:"个人偏好"和"痛苦经历"。

    我们尽可能避免使用"逻辑高电平"作为"有源信号电平"。   这是因为可能存在"过高阻抗"以及信号"不确定性"和/或"干扰"的可能性更高。   实际上、大多数外部源的功能和效率更高、可提供"逻辑低电平"作为"有源信号电平"。

    现在记下您的问题(第一个描述):  (直接从海报上引用)

    • accelmag 板被配置为生成有源1输出。
    • accelmag 的高电平有效中断卡在1  

    请注意、对于"interrupt for accelmag - Stuck at 1"的含义、"不清楚"。   这是否意味着信号电平持续以逻辑高电平锁存?   也许我们错过了这个机会、但没有任何解释、只是我们如何关闭/禁用"有源传感器中断信号"。   这很重要-不是吗?

    观看一个(未知)视频是"不允许的"-系列示波器电容器(正确且令人信服)不能显示"两个传感器信号线的活动状态?"   (必须考虑帮助者...)

    [引用 user="can altineller"]我将故障 accelmag 中断从 PE2替换为 PB4。 这一次 PC4上的另一个中断线路失败(来自陀螺仪)[/quot]

    我们喜欢这个想法-对于"Accelmag"现在的执行方式是"完全"的-并且 PC4失败了!   我们确实需要查看您的确切代码-发布该更改-这会产生如此意外的结果。   (我们有一个"模糊"的想法、即在经过足够的"时间"后、您的中断服务的"排序"可能会证明是因果关系(只有第一个是 MCU 的"感觉/感觉")。

    始终令人担忧-与中断引脚不需要(无法识别)的竞争连接(过去的"悬架打开")-功率不足-怀疑与远程传感器板的连接(尤其是接地-始终接地)。   电线/电缆长度过长也会损坏-未提供此类建议...

    最后注释-我们最喜欢的是"将中断矢量添加到中断表-驻留在"启动"文件中。   远程时、您对这些中断的"恢复"会产生"堆栈溢出"的可能性、同时在该过程中获得您的(很少)(即没有什么、真的)...

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

    您好 CB1_MOBILE、

    'accelmag 的高电平有效中断卡在1 '意味着我已将 accelmag 传感器配置为生成高电平有效中断、它变为高电平、但 MCU 不读取传感器、因此它保持高电平。

    我真的很喜欢听到你的"个人喜好"和"痛苦的经历"。 谢谢你。

    添加:

    IntPrioritySet (INT_GPIOC、0x00);
    IntPrioritySet (INT_GPIOE、0x01); 

    已解决问题。 但我看到我的设计在您的帖子中有许多缺陷。 我有几个问题:

    a:我不应注册中断向量,而应将它们放在 STARTUUP_CCS 中?

    B.对于其中一个传感器、我使用下降沿和另一个上升沿。 我应该让它们都处于下降沿? (低电平有效)

    c.如果我有两个高优先级中断、我应该将它们放置在不同的端口上(如 PB、PC)、或者我应该使用同一端口的2个引脚

    此外、该代码的目的是使开源 IMU 传感器与 ROS 配合使用。 在 GitHub 运行顺利后、我将把它放在它上、但我现在刚刚上传了它、以便您可以查看: github.com/fximu/FXIMU

    它基本上是一个连接到 ROS 的400Hz IMU 传感器、可以使用.yAML 文件配置参数、以及一个 python 脚本、在更正软铁和硬铁错误以及陀螺偏移后将数据重新发布到/imu/data 主题。 它只是为了使您能够启动 ROS imutools 软件包以使用 Madgwick 或互补滤波器(github.com/ccny-ros-pkg/imu_tools)

    此致、谢谢。

    CAN

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

    谢谢您-您的跟进工作很好、很详细。   (当海报"花一周时间"回应时、这里的年轻员工总是会进行整理-声称"忙碌"。)   

    谁不忙-而是那些(真正)"忙碌"的人(  即通过纪律/欲望) 总是回应!"

    现在、我们对您的写操作"处理一些问题"、"卡在1 "表示我已将 accelmag 传感器配置为生成高电平有效中断、它变为高电平、但 MCU 不读取传感器、因此它保持高电平。"    原谅-但是、 "accelmag 传感器(或任何传感器-对于这种情况)如何知道它是"重新读取"的?"    (您建议-将"解开它!")    相反、我们期望需要一个单独的"机制"(不仅仅是简单的"状态")。   (即切换的信号线等)    您是否可以进一步澄清?

    我 不同意 添加 "IntPrioritySet() "-本身 -导致您 的计划成功。    (这是因为代码运行:

    • 在仅部署单个传感器时正常工作
    • 也运行正常(第一分钟左右)

    在(两种)情况下- "IntPrioritySet()(IntPrioritySet())"(当时)不存在!    (至少-未包含和/或暗示-不包含在您的帖子中!)

    现在、请回答 您的具体问题:

    a)我的公司使用 IAR -建议您在  IDE 的启动文件中"名称和位置"每个中断矢量的名称(正确) -然后在  通用代码中创建(使用该名称)中断服务例程(ISR)、将其放置在合适的位置(在 main 之外)。   当然、您可以找到详细介绍此过程的"代码示例"。   (很难-直到您看到它正确完成-只需一次!)

    b)确实- 下降沿-有源传感器输出低 电平-证明是最佳/最安全的(之前的后置对齐此类选择)

    c)'kiss'指示您 鼓励简单 性-因此至少  在最初时从'separate port'中选择每个中断引脚。   一旦(真正)工作-您可以"试验"将它们放置在同一端口上-然后"评估"该(相同端口)中断-以确定(真实)源。   但是、在您确认真正成功之后、请稍后再做。    

    原谅-但我们再次对您的“修复”有“疑问”,只需添加一个“IntPrioritySet()”即可。

    员工对这些传感器的"选择方式"很好奇。   有高传感器活动-尤其是"巨人"-并且性能水平在不断提高。   A、"通用(接近通用)传感器住宿"似乎是"非常适合市场和理想!"   比较传感器的能力:"A"与"B"与"C"与最少的"麻烦/麻烦"-将证明是一条卓越的路径...  (与不太可能证明的"单源传感器"相比、"顶级犬!")

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

    您好!

    似乎我跳得太早了。 IntPriorySet()没有解决问题。 它将在几分钟内出现故障、现在需要更长的时间才能发生故障。

    以下是传感器清除中断的说明:一旦传感器配置为通过向其相关控制寄存器发送值来生成数据就绪中断、传感器上的 int 引脚将变为高电平(用于高电平有效配置) 并保持高电平直到从传感器 tru i2c 请求数据、一旦读取完成、传感器将使 int 引脚变为低电平。 基本上、读取传感器 tru i2c 将使传感器侧的 int 引脚变为无效状态。 语句 GyroGetData、AGGetData 会清除 int 引脚。 如果未执行数据读取、则 int 输出引脚的状态不会改变。

    if (gyro_data_ready){
    GyroGetData (FXAS21002C_address、&gyroRD);
    gyro_data_ready = false;
    }
    
    if (accelmag_data_ready){
    AGGetData (FXOS8700地址、&accelRD、&magRD);
    accelmag_data_ready = false;
    } 

     我不知道在传感器芯片上进行任何特殊机制或寄存器写入来清除中断、但我应该从数据表中再次检查这一点。

    我如何选择这些传感器:蛮力。 我已经很长时间地测试了这些传感器、adxlxxx、mpu60、915、925、9255、bno055。 最后一个是 bno055、它应该具有板载 DMP (数字运动处理器、用于板载滤波的花式词)-但遗憾的是、由于 i2c 时钟拉伸问题、它无法与 tm4c123配合使用。 然后、我使用 Arduino 评估了传感器、并注意到它非常嘈杂、而且非常大。 此时、我决定使用非 DMP 传感器并自行进行滤波。  

    据说、该陀螺仪传感器的零速漂移非常小、这对于进行方向计算非常重要。 传感器供应商声称其噪声降低了10-20倍。 因此、我购买了传感器并对其进行了测试(使用 ROS 提供的互补滤波)、其性能实际上比我测试过的以前的传感器要好得多。 (当我说测试时、我的意思是将其插入可视化系统并查看漂移、可重复性等内容、我没有进行/驱动它或任何类似的实际测试。)

    github.com/fximu/FXIMU/tree/master/launch/compare.launch 文件启动两个不同的 ROS 滤波器、互补和 Madgwick (从同一个传感器获取数据并发布结果)、 github.com/fximu/FXIMU/blob/master/launch/rviz/imu_complementary.rviz 文件是一个 rviz 配置文件、将启动 rviz 并通过2个小向右箭头显示这两个结果的输出、 因此、我们可以研究滤波器、传感器等之间的差异

    此时问题仍然存在。 我将尝试将两个传感器放在不同的 i2c 总线上、看看它是否起作用、并查看是否需要执行任何其他步骤来清除数据表中传感器侧的中断。

    此致。

    CAN

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

    您好!

    您是否建议将其作为GPIOIntStatus(GPIO_PORTE_BASE, false);  ISR 中的最后一条语句添加? 还是将 清除标志的 GPIOIntClear (GPIO_Porte _BASE、GPIO_PIN_2)?

    因为:

    void accelmag_isr (void){
    if (GPIOIntStatus (GPIO_Porte _BASE、false)& GPIO_PIN_2){
    GPIOIntClear (GPIO_Porte _BASE、GPIO_PIN_2);
    accelmag_data_ready = true;
    }
    GPIOIntStatus (GPIO_Porte _BASE、false);//确保未优化、请检查反汇编代码
    } 

    GPIOIntStatus()已在 if 语句内调用。 因此它将第二次执行。

    我还使用 GPIOIntStatus(GPIO_PORTC_BASE, false了它来提供原始中断状态、因为它就像在中断示例中那样。 我查看了 gpiointstatus 的文档、但我没有清楚地了解什么是原始状态与掩码状态。

    另外、我如何确保第二条语句不会得到优化?

    此致、

    C.

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

    [引用 user="CB1_MOBILE"]我 不同意 添加 "IntPrioritySet() "-本身 -导致您 的程序成功。  [/报价]

    让记录显示"破解人员"得到(至少一个)正确的诊断!    唉,明天是学校日,因此(适当的)庆祝活动必须"暂停"。

    您最初的帖子指出、当仅使用单个传感器时、"一切都很好"。    但是-这是否也可以证明"不是案例"-因为故障仅仅需要更长时间才能揭示?    很难想象添加第二个器件本身会如何导致故障。   (除非当然没有足够的功率或连接格林。)

    您之前注意到-有时-两个传感器中断同时发生。   在这种情况下、'Accelmag 的中断输出信号变为'LATCHED HIGH'。   对我来说-这特别指向一些代码缺陷-当您与该传感器进行"交易"时-在接收到中断信号时发生。   要完全清楚-每个传感器是否提供"中断输出信号"以及串行通信通道?   

    如果这个问题是我的-我将按如下方式继续:'

    • 切换和/或配置 accelmag 传感器以生成"低电平有效"中断输出信号  
    • 单独使用该传感器、并开发一个重复与该传感器"传输"的程序。   这将产生大量成功的传感器事务。   捕获一个完整的事务-确保"捕获"传感器的整个信号输出和 MCU 的"回讲"。   理想情况下、这是使用示波器电容器完成的-可以在此处显示。
    • 实现该目标后、添加第二个传感器、并尽最大努力在故障期间捕获 accelmag 和 MCU 的信号事务。   
    • 交易的比较-  
      • 工作附件传感器(即由自己操作)
      • 与 Accelmag 传感器出现故障(可能是由于添加了第二个传感器)

    应提供所需的洞察信息、了解"什么、哪里和如何"故障的引入。   您必须确保满足所有传感器规格、尤其是涉及信号时序和持续时间的规格。   

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

    您好、

      GPIOIntClear 是为了清除该标志。 当它被调用时、它将 一个'1'写入标志(在触发器中执行)。  GPIOIntStatus()是读取标志。 在写入完成之前、不能进行读取。 这意味 着 GPIOIntStatus()将确认标志是否已成功写入。  您可以将 GPIOIntStatus 的返回值分配给一个变量、并在退出 ISR 之前将其与预期值进行比较。 正如我说过的、我不知道这是否是问题的根本原因。 如果不起作用、则需要调查另一个问题。

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

    您好、Charles、

    我尝试了:

    //陀螺仪中断服务例程
    void gyro_ISR (void){
    if (GPIOIntStatus (GPIO_PORTD_BASE、TRUE)& GPIO_PIN_3){
    GPIOIntClear (GPIO_PORTD_BASE、GPIO_PIN_3);
    gyro_data_ready = true;
    }
    GPIOIntStatus (GPIO_PORTD_base、false);
    }
    
    // accelmag 中断服务例程
    void accelmag_ISR (void){
    if (GPIOIntStatus (GPIO_PORTB_BASE、TRUE)& GPIO_PIN_5){
    GPIOIntClear (GPIO_PORTB_BASE、GPIO_PIN_5);
    accelmag_data_ready = true;
    }
    GPIOIntStatus (GPIO_PORTB_BASE、false);
    } 

    遗憾的是、它没有解决问题。 我使用的是 gcc、我不知道如何确保每个 ISR 的最后一行不会得到优化、但我猜、由于第一个 GPIOIntStatus 具有不同的参数、 因此它不会得到优化。

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

    您好、

     当它的中断引脚被置为有效时、您能显示一个 Acc 的示波器电容器、当 MCU 应该执行读取时、您能显示 I2C 总线吗? 您如何知道 MCU 从不读取数据? 示波器电容器将有助于验证? 我还建议您在 Acc ISR 内设置另一个 GPIO 引脚。 您可以在退出 ISR 后清除该引脚。 如果进入了 ISR、这将在最后一次成功确认 Acc 中断时通知我们。 基本上、在示波器电容器中、您应该显示在中断引脚的每个上升沿、GPIO 引脚上还有另一个上升沿、具有一些周期的延迟。 如果中断引脚上有上升沿并且中断引脚一直保持高电平、但您也会看到 GPIO 引脚边沿、则这将证明进入了 ISR。 调查结果应该会导致 I2C 总线。 如果在中断引脚变为平坦线后从未看到 GPIO 引脚边沿、则从未进入 ISR。  

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

    您好、Charles、

    我已将 intterrupt 处理程序更改为:

    //陀螺仪中断服务例程
    void gyro_ISR (void){
    MAP_GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_2、GPIO_PIN_2);
    if (GPIOIntStatus (GPIO_PORTD_BASE、TRUE)& GPIO_PIN_3){
    GPIOIntClear (GPIO_PORTD_BASE、GPIO_PIN_3);
    gyro_data_ready = true;
    }
    GPIOIntStatus (GPIO_PORTD_BASE、false);
    MAP_GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_2、0x00);
    }
    
    // accelmag 中断服务例程
    void accelmag_ISR (void){
    MAP_GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_3、GPIO_PIN_3);
    if (GPIOIntStatus (GPIO_PORTB_BASE、TRUE)& GPIO_PIN_5){
    GPIOIntClear (GPIO_PORTB_BASE、GPIO_PIN_5);
    accelmag_data_ready = true;
    }
    GPIOIntStatus (GPIO_PORTB_BASE、false);
    MAP_GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_3、0x00);
    } 

    因此、每次进入 ISR 时、示波器中都会出现一个小的尖峰。

    我还连接了一个逻辑分析仪并捕获了两条中断线路、分别是 PA2、PA3用于查看尖峰、以及 I2C0[SCL、SDA]和 I2C3[SCL、SDA]

    (我将 i2c0用于一个传感器、将 i2c3用于另一个传感器)

    顶部4个(D0至 D3)是陀螺仪传感器、D0:中断 D1:PA2、D2:SCL3、D3:SDA2

    底部4个(D4至 D7)是 accelmag 传感器、D4:中断、D5:PA3、D6:SCL3、D7:SDA1

    这正是 accelmag 传感器停止响应的地方、在接近结束时、中断线落在 D4处、您在 D5处看到尖峰、并且发生 I2C 数据传输、但中断线永远不会再次失效。

    我正在使用两个单独的板[adafruit.com/product/3463]、其中一个仅使用陀螺仪、另一个仅使用 accelmag。 [我这样做是为了将它们连接到不同的 i2c 总线]-但它们也具有不同的电压稳压器、这两个稳压器都是通过 tm4c123 Launchpad 上的5V 电压供电的。

    还有一个子问题:对2个不同的传感器使用2条 i2c 总线是否是个好主意? 我以为是这样,但从范围上看,它们永远不能同时打开。

    此致、

    CAN

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

    您好!

    您的努力经过深思熟虑、细节恰当且令人印象深刻。   做得好!    正如这里经常说的那样(由供应商和"其他")、使用一个能够"查看和捕捉"串行总线活动的仪器-证明(几乎)是强制性的。   并且始终很有帮助。

    我相信您已经很好地遵循了供应商的 Charles 指南-屏幕保护盖非常有用。   也就是说、会出现一个问题、即"为什么  会有一个(视在)延迟-施加到陀螺仪传感器 的'CL & SDA'信号输出(顶部走线)(布置其中断切换('H'->'L'))上?   请注意、"无此类延迟"(或小得多的延迟)到达 accel 传感器!

    施加在陀螺仪传感器的 I2C 事务上的(视在)延迟可能是由从一个 I2C 通道到另一个 I2C 通道的"切换"导致的?   据信、此类分析需要实际代码。   (并进一步思考(大声说出)-可能存在"不存在此类切换"-每个"独特"的 I2C 事务都将在其(自己的) I2C 总线上发生-该总线已经(已经)设置和配置。)

    进一步思考-"器件多路信号分离器"- accel 传感器是否可能需要"扩展"(即"多字节")、这将解释其延长的持续时间?   (与"公文包"陀螺仪传感器相比。)

    以下几点观察/评论-供您考虑:

    • 这可能是由于(假定)逻辑分析仪的"Trigger"(如果有)-被"锁定到 D4"(accel 传感器)中断线路导致的?
    • Accel 传感器的 I2C 事务似乎比陀螺仪传感器的事务"持续时间更长"。   这是预期吗?
    • 加速传感器中断信号的"宽度"(激活时)看起来小于陀螺仪传感器的中断信号的"宽度"
    •  信号中没有/零的"监听"明显导致-或在-致命/最终的加速传感器传输期间。   (其中"挂起")

    这是一个视觉(超级强加在您的原始信号上)-突出显示了陀螺仪传感器的 I2C 信号的(视在)"抑制"。   这种"保持"要么是"不存在"、要么是太小、无法注意-在传感器上!  (再说一次-这可能是一个"触发"问题... 然而,这种“值得注意!”)

    [引用 user="can altineller"]是否对2个不同的传感器使用2条 i2c 总线是个好主意?

    我会投票、"是"-因为这符合(总是有帮助的)"亲吻"。  (简化、紧密聚焦-使"最基本"的实施工作-仅(然后)和系统地-添加改进...)

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

    您好 CB1、

     谢谢! 你也问了我想问的所有好问题。  

    您好、

     从我可以看到的结果来看、MCU 的运行方式似乎符合预期。 这是您需要调查的最后一个 I2C 事务。 向 Acc 传感器发送了什么命令? 它是有效/正确的命令吗?

     在前面的各种帖子中、您说 Acc 在上升沿生成中断。 为什么 Gyro 和 Acc 在出现在 LA 捕捉上的下降边沿上生成中断。  

     您的两个传感器消耗了多少电流? 您可能需要监控 Acc 传感器的电源。

      

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

    [引用用户="Charles Tsaa"]

    您好 CB1、

     谢谢! 你也问了我想问的所有好问题。  

    [/报价]

    可怕的失眠比昨天晚了两个小时到达!   感谢您的客气话。   请注意-我指示海报更改为"低电平有效"中断 (即他之前的 accel IRQ)-因为它们(通常)更强(低 Z)、而这更重要的是"正常/习惯"。  

    现在、关于"好问题" - 也许我会同意-但有一个"最佳问题"-这显然是"你的问题"!   (员工建议 CB1回到以前的职业生涯中、作为"航行教练"-因为我们拥有船、(任何人)可以"飞帆3次"-并被海岸警卫队"从海上"击退!)   [洛杉矶海岸警卫队和我(现任)的假释官都不像我一样。]

    [报价用户="Charles Tsaaa"> Acc 传感器发送了什么命令? 它是有效/正确的命令吗?

    海报的捕捉显示了双重"信号流"-但未显示(可能)必要的信号详细信息。   正如您所注意到的-一个"非法"命令(非常类似于"将自己的帆船"运入地面)-几乎肯定会产生"负面影响!"   (该死的寻人“推卸责任”)

    学习"在顺序(即次数)中、传感器事务发生在何处-是否发生故障也可能会引起(也许)兴趣?   如果这证明(近乎)一致-(可能)是另一个线索-并且我们需要尽可能多的...   (在你的“大大脑”和我的(裂缝的工作人员描述为“完全正常”)我们应该有,“让这个家伙“空中”——很多帖子之前……  'WGN'是 CB1公司客户)

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

    您好 Can. 您可能希望仔细阅读 NXP FXAS21002C 修订版2.1、5/2015的数据表的6.16段、第47页、并在阅读前后考虑/播放 FIFO 的状态寄存器。 尝试使读取在 ISR 内部工作、并避免使用全局变量。 在使用两个中断的情况下测试该值。  我希望这会有所帮助。 祝你好运。 [您是否在 INT 引脚上使用上拉电阻器?]

    John

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

    您好、John、

    一段时间过去了-希望你们/你们都能"一切顺利"。

    现在海报的问题是他的'ACCEL Sensor'-不是陀螺仪传感器!   (相信您关注的是陀螺仪传感器!)

    [引用 user="can altineller"]我正在尝试获取'FXOS8700 ' accelmag 和 FXAS21002陀螺仪以与 TM4C123 MCU 配合使用。

    这两个器件都提供 I2C 和一个单独的"中断输出"信号、因此"从正常/习惯中"删除"。   海报已将中断信号描述为"活动"-这(通常)表明它(可能)无需上拉增强。   他的屏幕电容器通过"边缘"揭示-我相信、这些中断信号很有可能是"推挽"信号、 从而完全满足上拉要求。

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

    您好 CB1。 希望和祝愿一切都对你们所有人都很好。 有时情况可能是一个器件的行为在某种程度上干扰了另一个器件的运行。 此外、除非存在 MicroOS、否则我通常不相信 ints/ISR 内部全局变量的使用。 我过去因为这种情况而感到了一些痛苦。 我 μC 了上拉电阻器、因为传感器和 Δ I 位于不同的电路板上、但您可能正是这样说的。 祝你一切顺利。  

    John   

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

    您好!

    又有人企图"进一步鞭子"这匹死马/死马。   请注意、我公司的员工和我都没有使用(或知道)海报的外部设备。

    现在、我的设计专家希腊朋友(John P.)认为有问题的"accel sensor"中断可能需要"上拉"。   然而、 虽然这是可能的、但捕获 的图像工作人员(如下所示) 注意到、"推挽"是默认输出配置。   (无需上拉!)

    我不知道这里的"其他"响应者认为什么-但我的感觉是来自传感器的"中断信号"比"握手""更"。   这证明了一种相当大的错误信念。   该传感器拥有116页的数据手册、超过20页的数据手册包含"中断"参考。   另请注意-此传感器采用两个中断输出-进一步使"登录"变得复杂。   因此、(现在)中断及其设计、处理和定序是一个(非常)重大的问题。   (之前未注意到这一点...)   并且(不太可能)在海报上"过度依赖"(另一家公司)代码开发时被透露-比"理解"更多"复制"。

    现在可以说——房间里有一只大象!   供应商的 MCU (几乎肯定是-是-打赌场)"是"。   所有证据都指向"传感器问题和/或理解!"   我将最后尝试"进一步引导此海报"-但很明显-传感器公司应该正确接合-以及(有点)"工作负载!"   (接管-真的。)

    话虽如此-接下来的(可能)会变成一种解决方案。  (有一个希望)

    • 中断与独特的传感器寄存器、 功能和行为"关联"。
    • 要清除中断(可能)、需要应答"MCU Read" (MCU 读)- 非常正确地清除一个或多个(关键)传感器寄存器位-这些位随功能的不同而变化。
    • 因此、"故障传感器中断"(即中断棒)(可能)可能是由于"传感器读取不正确和/或不完整!"
    • 到目前为止、伴随"故障传感器读取"(导致中断"勾号")的数据(任何/全部)尚未显示。
    • 个(非常)简单的测试(CB1的首选测试)会看到我们的海报、"仅重复过去有效的那些传感器交易!"   (即不更改任何内容!)   如果这个 I2C 事务(重复)成功地防止了"粘性中断" 、 那么可能是因为"传感器读取错误/失败"。   ("备用"中断)
    •  我们仍然希望"海报的观点"能够了解" Accel/Gyro 传感器之间的 I2C 事务之间出现延迟变化的可能原因-中断之后。    ACCEL (接近零)-陀螺(大)!  为什么?

    如果这种系统方法“失败”——也许洛杉矶(确实)需要“另一个”帆船教练……  (一个配有"传感器!"  (笑声) 也许)

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

    您好、John、

    我已经尝试过上拉电阻器、但它没有改变任何东西。

    关于 Arduino 的 Adafruit 代码中的"读取前后播放 FIFO 状态寄存器"、对于该传感器(在 accelmag 和陀螺仪传感器中)、代码中有一个部分:

    [ github.com/adafruit/Adafruit_FXOS8700/blob/master/Adafruit_FXOS8700.cpp]第235行:

    //从传感器读取13个字节*/
    Wire.beginTransmission((byte)FXOS8700_ADDRESS);
    #if Arduino >=100
    Wire.write (FXOS8700寄存器状态| 0x80);
    #else
    Wire.send(FXOS8700_REGISTER_STATUS | 0x80);
    #endif
    Wire.endTransmission ();
    Wire.requestFrom ((字节) FXOS8700地址、(字节) 13);
    
    //待办事项:首先检查状态! */
    #if Arduino >= 100
    uint8_t status = Wire.read();
    uint8_t axhi = Wire.read();
    uint8_t axlo = Wire.read();
    uint8_t ayhi = Wire.read();
    uint8_t aylo = Wire.read();
    uint8_t azhi = Wire.read();
    uint8_t azlo = Wire.read();
    uint8_t mxhi = Wire.read();
    uint8_t mxlo = Wire.read(); 

    在阅读之前、它确实发送了一些内容、但我并不完全理解。 Wire.write (..正在发送 REGISTER_STATUS 值0x80。 ?

    它存在于陀螺仪和 accelmag 传感器中。 (发送 REGISTER_STATUS | 0x80)  

    我尝试通过发送 AG_REGISTER_STATUS 0x80在代码中复制它-但它也没有改变任何东西。

    此致。

    CAN

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

    您是否可以"查看"发布消息~在您之前30分钟。   其中有许多事实/发现...

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

    您好、Charles、

    -我已更改 ACC 以生成下降沿中断、因此范围图将陀螺仪和加速仪描述为下降沿。

    -传感器消耗的电流范围为数百微安,具体取决于频率。

    下面是我使用的传感器板的原理图:

    如图所示、它具有双向电平转换器。 我怀疑这些可能是问题的原因。 (这样做是为了使具有5V GPIO 的人员可以使用该板)

    我尝试使用3V3从稳压器的输出馈入分线板、因此不使用稳压器。 它没有改变结果。

    下面是我正在使用的设置图片:

    它位于试验电路板上、然后我决定使用跳线进行 Hookit Up、如图所示、因此我想它比试验电路板噪声更好。

    我已经为鹰上的所有这一切制作了一个 PCB 板、等待被送到 PCB 生产工厂、但我需要在发送之前解决这个问题。 但现在我怀疑这可能是接线、或者 i2c 线未直接连接到传感器。

    此致、

    CAN

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

    您好 CB1;

    下面是我认为在范围内发生的情况:

    1、无论哪个中断首先出现、都会触发 I2C 读取。 在 D4首次变为低电平的情况下、它会触发 i2c 读取。 请注意、由于这是 accelmag 传感器、它有13个字节的读取时间比中断清除时间长。 根据数据表读数、MAG 寄存器会导致中断失效、因此在 i2c 传输继续时失效。

    发生这种情况时、陀螺仪中断进入 D0。 但是、由于主循环尚未完成对 accelmag 的读取、i2c 事务必须等待。

    只有在第一个 i2c 读取完成后、陀螺仪读取才会开始。 如 D2和 D3上所示。 一旦读取完成、陀螺仪 int 就会失效。

    4."Accel 传感器的 I2C 事务似乎比陀螺仪传感器的事务"持续时间更长"。   这是预期的吗?" 是的、因为它是13字节。

    自昨天以来、我仅使用一个 i2c 通道。 问题仍然存在。

    如果单独操作、则陀螺仪具有402.322hz 输出。 (如果指定为400) accelmag 具有398.812hz 的输出数据速率。 (如果指定为400)

    由于陀螺仪的输出为402、而 accelmag 的输出为398、因此一个信号将扫描另一个信号、并将以交替方式导致"抑制"。 它要么是使 i2c 处于繁忙状态的陀螺仪、而 accelmag 必须保持关闭、要么是另一种方式(accelmag 使 i2c 处于繁忙状态、而 Gyro 读取必须保持关闭状态。

    这种读数不规则可能是导致崩溃的原因。

    我正在使用名为 pulseview 的软件进行日志记录、它可以保存为.SR 文件。 我可以将其添加为附件-或者如果有其他方法可以共享较长的非 png 范围、我可以这样做。

    此致、

    CAN

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

    您好、

      [引用 user="can altineller"]

    发生这种情况时、陀螺仪中断进入 D0。 但是、由于主循环尚未完成对 accelmag 的读取、i2c 事务必须等待。

    只有在第一个 i2c 读取完成后、陀螺仪读取才会开始。 如 D2和 D3上所示。 一旦读取完成、陀螺仪 int 就会失效。

    [/报价]

     您的分析不正确。 您正在主循环中进行 Accel I2C 读取、对吧? 当来自陀螺仪的中断进入时、它将立即中断 Accel 读取。 CPU 不会等待 Accel 中的13个字节完成、然后跳转到陀螺仪 ISR。 您可能同时具有两个标志:gyro_data_ready 和 accelmag_data_read true。 CPU 从陀螺仪中断中退出后、它取决于您如何编写主循环以继续读取 Accelmag 或陀螺仪的剩余数据。 很可能您的 Accelmag 读取在中间被中断。 例如、在您被陀螺仪中断之前、Accelmag 读取在第7次读取的中间被中断。 在第7个字节上读取的 Accelmag 可能会被损坏。 您是否按照我的建议检查了 I2C 事务。 传感器是否甚至破解了 I2C 事务?

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

    有一种变通办法我可以想到、值得您尝试。 也就是说、在开始从传感器读取数据之前、您会全局禁用处理器中断。 您只能在完成读取后启用中断。 例如、在读取13字节 accel 传感器数据之前、您将首先禁用 accelmag ISR 中的中断、并且仅在完全读取13字节后启用处理器中断。 对陀螺仪也执行相同的操作。  

    我认为你的问题是一个经典的比赛情况。 您可能需要将数据速率从400Hz 降低到一些较慢的速度。 如果在您的传感器中可对其进行编程、请尝试使用200Hz 数据速率、我认为这将有助于解决您的问题。  

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

    您好 CB1和 CAN.  

    我能完全同意 CB1的分析[他和他的公司在这些问题上经验丰富]。 值得尝试详细研究传感器手册。 由于它在我的第一篇帖子中清晰显示、我询问了有关上拉的信息、但仅在我的帖子末尾和内部[..] 因为我已经看到 CB1用红色巧妙地强调了什么(传感器图中有关 INTS 的评论)。 有时、某些示例的默认初始化源(如您使用的源代码)可能会将 寄存器配置为默认值以外的其他值。 但是、由于您已经使用了上拉电阻器、因此问题的解决方案可能与源代码处理 INT 和 FIFO 寄存器的方式有关、正如我主要怀疑的那样。 我的箱中没有您正在使用的任何传感器、因此我现在不能再为您提供更多帮助了。 我还确信供应商/海报的 MCU 与特定的技术问题完全无关。 我的最后一个但与 kiss 相关的建议是暂时忘记中断并仅从 MAIN_LOOP ()"轮询"明智地进行读取。 如果工作正常、则传感器的 INT 寄存器处理需要与您的部件进行更密切的研究。 我怀疑“邪恶”是隐藏在那里的:)祝你好运。 John

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

    你好、Charles 和朋友/组队 John、     (John -谢谢您的好话语... 员工保证-您的"支票"是"邮寄")

    查尔斯-你显然已经走了很远、"超越和超越"-在这里、你都非常感谢你投入的时间/精力。   然而、"尚未证明该供应商的 MCU 以任何方式或方法对此类"传感器中断挂起"负责。   此外、当"传感器读取"(正确)[并且可能及时]时、它是启动中断的"传感器单独"、并对其"重新进入空闲状态"承担全部责任。   海报"CAN"提供了一个富有洞察力的"胸罩"-但在" MCU 发送的实际数据中包含了"不洞察"(我认为这是"必要的")、以实现"正确/及时的传感器读取!"   这里的员工注意到几个传感器数据表提到了"正确读取传感器"的重要性。   (即"清除"中断)  这种情况值得进一步探讨-并且远远超出了本论坛(MCU 有人认为)的范围...   

    最新诊断-海报添加了以下内容: (发布日期:9月11日18:01... 这是6:01p -对于那些海岸边的人)

    [引用 user="can altineller"]自昨天以来、我仅使用一个 i2c 通道问题仍然存在

    原谅-但是、"选择单个传感器"可能会使问题"无效"、"比赛条件"-也许您会注意到并同意。

    越来越多-虽然海报"祝您一切顺利"-@ Adafruit 和 NXP 应该投入(部分)时间和精力-以及我们的"过度工作"诊断 crüe 为了享受夏季的死亡日子而释放-并"从海报的高度特定的'传感器战争!"租赁

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

    您好 Charles。 你最可能是对的、可能会受到 INT 比赛条件的折磨。 查看我的档案、我发现了"ARM 社区"关于特定问题的链接。 如何处理 Cortex-MX INT、如果在 CAN 的情况下、问题是由不规范的 INT 处理编码引起的。 在这一职位上,有许多巧妙的技巧被揭露,约瑟夫·耀也就这个问题提出了一些富有成果的建议:  

    https://community.arm.com/developer/ip-products/processors/f/cortex-a-forum/4089/cortex-m4-interrupts-behavior-when-same-interrupt-vector-has-multiple-interrupts

    希望这也能对 CAN 和其他人有所帮助。

    祝你一切顺利、

    John

    P.S. 尚未阅读、即使使用了一个 I2C 通道、问题仍然存在。 因此、问题最终表现似乎可能是由于传感器寄存器处理效率低下。 因此它必须是可解决的。

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

    您好、John、

    时间安排(如往常一样)"就是一切。"   您刚才写道:

    John Piliouni 说:
    CAN 被 INT 竞争状态折磨。

    然而,正如一所特定(专业)学校所教授的那样,人们必须"充分、适当、甚至彻底地"审查所有证据!   (甚至是最晚的破证据!)

    您是否应该查看我的帖子-发布时使用的确切时间戳作为您自己的帖子-您会注意到 CAN 已切换到单个传感器-因此"比赛状况"(赦免)已"走下坡路、造成因果关系"-是否没有?   聪明/有天赋/总是有动力的员工的存在"加强"所有证据的检测、尤其是"晚期突破"和"高价值!"

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

    您好 CB1、

    -我已经阅读过 fxos8700cq 的数据表。 有两个中断引脚和许多 int 源。 您可以选择一个 int 源(如 DATA_READY)作为 INT1引脚、所有其他 int 源为 OR'red 以转到另一个引脚。 您还可以查询传感器、以询问收到中断后该中断的源是什么。

    我想知道、如果从传感器读取数据会使中断无效、它还会影响传感器的时序。 传感器在读取完成后开始测量下一个周期、还是在 DATA_READY 后将中断置为有效、然后继续测量下一个周期。 请注意、在第一种情况下、我们可以使用它来使传感器与其他传感器同步、而在第二种情况下、我们无法同步。

    -我配置了一个设置为400Hz 的计时器中断,并使 i2c 从计时器中断读取。 它没有问题、您还可以观察到中断的时序、这些时序可以指示数据何时就绪。 这可以是另一种方法:基本上定期轮询传感器、注意中断准备就绪的时间为 ns、然后使用该数据计算 dt。 我还研究了 ROS 的互补滤波器代码、以查看它实际上计算 dt 并将其考虑到每次更新。

    -我正在制作 CCS 版本的软件,但没有 ROS 库,因此我可以利用调试器。 目前、它使用 gcc-arm 进行编译、并使用 catkin_make ROS 工具进行编译。 我将尝试一下 Charles 的建议。 (禁用中断)

    -我在传感器供应商社区页面上发帖。[ community.nxp.com/thread/512669]但是、此时我可能应该更新问题、以包含此帖子的贡献者提出的问题。


    此致、

    CAN

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

    是 CB。 我有一段时间未打开回复页面、并且未注意到问题。 我 在我的帖子中添加了一个 P.S.(...)。 很清楚,但我认为这种联系是非常有启发性的。 大家好、John

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

    您好!

    当我说仅使用 i2c 通道时、我意味着"我对两个传感器使用相同的 i2c 总线"

    我无法解码 i2c 读取和写入-我只有 pulseview 和 sigrok 以及一个 usbee。 死亡前的最后一个数据包与其他数据包略有不同。 我应该找到一种解码方法。 您是否知道可以执行 i2c 解码的任何软件/探头封装? 或者、我们是否必须手动执行该操作?

    其他人发布的此传感器的所有驱动程序代码不包括中断配置、而是自由运行的传感器。 我将继续深入探讨 NXP。

    ~最佳

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

    您好、CAN、

    谢谢您-事实上您在这里的努力"显著提升"(也许是查尔斯、约翰、可能是另一位)、而在这里的所有努力"祝您一切顺利"。

    然而-您的问题假定-越来越多-“传感器战争”-而不是“CU 不足”-相信。

    现在我提出了一个建议——有天赋的员工相信“第一座小屋”——到目前为止——“被绕过/忽略”。   

    "仅发送之前"有效"的"读取应答数据"-以较慢的速率发送-并重复发送(暂停适当)-以及"仅发送该数据"-其他内容。"

    相信存在(合理)"读应答错误或遗漏"的可能性-这会导致"传感器挂起!"   仅向 传感器发送"已知良好的数据"(很可能)可消除此类"错误/遗漏"-除非"变速器润滑脂"位于其"无太大吸引力"的头部后方。

    还有一个硬件问题-虽然您预先制作的"EZ 有线连接很有吸引力"-但它们对于员工/我的口味来说"太长"了。  (越短、越直接越好)  至少-将 SCL 信号线布线为"尽可能远离 SDA 和 INT 线路"(以减少不必要的信号耦合)-由"长、相邻、并联"电线/电缆运行引起/留下深刻印象...

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

    AI Yi Yi。   (更强的语言(被检查/抑制!)   

    [引用 user="can altineller"]当我说只使用一  个 I2C 通道时,我的意思是"我对两个传感器使用相同的 i2c 总线"

    这是对员工和我的心的一个"讨价还价"-语言很重要-你的"参与"证明  完全是意料之外的!

    您之前写道:

    CAN Altineller: "从昨天起、我 只使用一 个 I2C 通道。   问题仍然存在。"

    但是-您的"输入"(可能)已"过载"-您注意到、"只有一 个 I2C 通道"-整个员工和我-(太快)认为、"只有一个传感器!"   (公平对待员工/我自己-此主题一直高度关注"两个"传感器、而不是  I2C  通道!)   
    因此,“比赛条件生活”——我又要(另一条)墙,“大爆炸”。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    抱歉、我无法更准确地表达。 我一直在努力解决这一问题、并且我的语言技能已经下降。

    我现在在 CCS 上运行了代码、删除了所有 ROS 代码、并且我将在 i2c 处于活动状态时尝试禁用中断。

    就这样讲坛软件做得不好、有时我点击"回复"、它不会发布等

    最棒的

    CAN

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

    您能问:“……还是我们必须手动完成?…” 可能的答案是:位拆裂

    尝试在一个传感器上单独从主循环内部进行连续轮询读取和写入、如果一切正常、 则仅在另一个传感器上进行、如果一切正常、则在两个传感器上进行。 如果一切都按预期工作、则尝试逐个使用中断机制、然后同时在两个传感器上使用中断机制。

     对于轮询 R/W 测试、我建议首先检查 是否应注意防止传感器的中断机制妨碍您的工作、以便您只需处理 I2C 传感器的数据。 这是我目前所能达到的最大值。 祝你好运。

    John

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

    您好、再说一次、  

    您“如何启动”-证明响应迅速(但针对我的“键”(仅发送“已知良好”传感器数据)建议)并取得了进展-即使传感器战争问题变得很严重。

    “吻”虽然(永远不会/永远)“允许在这里”-是您的朋友-您的意图(现在)是“消除所有多余的”-完全符合“吻”计划。

    Fire/I 注意到相同的"论坛软件问题"-因此我们始终"在外部编写-始终保存-然后在此处"复制/粘贴"...   (如果您与 John 不"太远"-他的射频实验可能会证明您的问题(某些)的原因。)    (我们有'tin-hat'正在销售@折扣...)

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

    您好、再说一次、

    void AGGetData (uint32_t ui32WorkerAddress、tRawData * accelRD、tRawData * magRD){


       uint8_t ui8Data[13];
       I2CAG 接收器(ui32WorkerAddress、AG_STATUS、ui8Data、sizeof (ui8Data));

       //将14位加速计字节数据复制到16位字中
       //请注意 accel 数据是14位且左对齐的,因此我们将两位右移
       accelRD->x =(int16_t)((ui8Data[1]<< 8)| ui8Data[2])>> 2;
       accelRD->y =(int16_t)((ui8Data[3]<<8)| ui8Data[4])>> 2;
       accelRD->z =(int16_t)((ui8Data[5]<< 8)| ui8Data[6])>> 2;

       //将磁力计字节数据复制到16位字中
       magRD->x =(int16_t)((ui8Data[7] << 8)| ui8Data[8]);
       magRD->y =(int16_t)((ui8Data[9] << 8)| ui8Data[10]);
       magRD->z =(int16_t)((ui8Data[11]<< 8)| ui8Data[12]);



    这是每次读取的代码。 它称为 I2CAGReceive、即:

    void I2CAGReceive (uint32_t ui32WorkerAddress、uint8_t ui32WorkerRegister、uint8_t * pReceiveData、uint8_t ui8NumBytes){

       //指定我们正在向工作设备写入(寄存器地址)
       I2CMasterSlaveAddrSet (I2C2_base、ui32WorkerAddress、false);

       //指定要读取的寄存器
       I2CMasterDataPut (I2C2_base、ui32WorkerRegister);

       //向工作设备发送控制字节和寄存器地址字节
       I2CMasterControl (I2C2_base、I2C_MASTER_CMD_BURST_SEND_START);

       //等待 MCU 完成事务
       while (I2CMasterBusy (I2C2_base));

       //指定我们将从工作设备读取
       I2CMasterSlaveAddrSet (I2C2_base、ui32WorkerAddress、true);

       //如果只有一个参数,我们只需要使用单个发送 I2C 函数
       if (1 = ui8NumBytes){

           //发送控制字节并从我们指定的寄存器中读取
           I2CMasterControl (I2C2_base、I2C_MASTER_CMD_SINGLE_Receive);

           //等待 MCU 完成事务
           while (I2CMasterBusy (I2C2_base));

           //返回从指定寄存器提取的数据
           pReceiveData[0]= I2CMasterDataGet (I2C2_base);
       }否则 {

           //开始从 MCU 发送数据
           I2CMasterControl (I2C2_base、I2C_MASTER_CMD_BURST_Receive_start);

           //等待 MCU 完成传输
           while (I2CMasterBusy (I2C2_base));

           //返回从指定寄存器提取的数据
           pReceiveData[0]= I2CMasterDataGet (I2C2_base);

           uint8_t ui8计数器;
           for (ui8Counter = 1;ui8Counter <(ui8NumBytes - 1);ui8Counter++){

               //开始从 MCU 发送数据
               I2CMasterControl (I2C2_base、I2C_MASTER_CMD_BURST_Receive_contt);

               //等待 MCU 完成传输。
               while (I2CMasterBusy (I2C2_base));

               //返回从指定寄存器提取的数据
               pReceiveData[ui8Counter]= I2CMasterDataGet (I2C2_base);

           }

           //开始从 MCU 发送数据
           I2CMasterControl (I2C2_base、I2C_MASTER_CMD_BURST_Receive_finish);

           //等待 MCU 完成传输。
           while (I2CMasterBusy (I2C2_base));

           //返回从指定寄存器提取的数据
           pReceiveData[ui8Counter]= I2CMasterDataGet (I2C2_base);
       }


    "Read answeing data"是 i2c 发送的启动读取的数据序列? 但我不确定如何发送它。

    此致、
    CAN

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

    您好!

    抵达这里(论坛)@ 06:00 -现在接近09:00 -我们的投资者"期望/需求"(部分)"追求利润"企业。   (超出我的"工作释放"时间/精力-在此投资)

    同样、对于 我的团队而言、"MCU 到传感器"的"敏感性""""数据读/回"值得(您)进一步探究。   "失败的数据读/回应答"是否无法"锁存传感器的中断?   KISS 认为"潜在问题"的"模块消除"(即限制您的"战场"的大小/范围)-强烈使用"测试/验证"-一次一项-(缓慢、谨慎、逻辑) 构建到"最终和完整解决方案"。

    您所呈现的代码序列可能会从您的"逐行 """深入研究:检查"中受益-因为您尝试"逐出" 真正的含义!   确实、正如前面所说的那样、这种"预编写代码"(有时)证明了"努力-精简和快速"、但(极大)会降低用户的理解力!   您承诺(现在)真正分析此类代码-将为您服务、"长远到未来"-甚至超越"传感器战争"-这对您/他人极为有益-难道不是吗?

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

    您好、

      Accel 数据表显示 INTx 是各种中断源的或门。 请参见下面的。  

    从您的捕获中还可以明显看出、中断未被清除、因为1)并非"所有"数据(13个字节)都被读取、或者2)数据未成功读取。 您必须至少有一个寄存器或数据未成功读取、才能使中断 INTx 保持活动状态。

    如果您没有能够解码 I2C 总线事务的逻辑分析仪、则需要使用逻辑分析仪或示波器手动解码 I2C 总线事务。  

      

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

    问候 Charles (   可能还有其他人... '悬架打开'-谁可能会患'耻辱的疾病'-就像那些(无几个)在这里...)

    当"跑/死"马似乎"被批准"进一步殴打"时、让这种虐待行为继续下去...   (我确实尝试为供应商提供"退出策略"。)

    现在、我和我的公司有一个"优势"(数字-今天我们有6强)、"天赋/激励/专注的年轻头脑"是永无止境的能力!

    上面的帖子-供应商的 Charles 提供了"中断控制器"方框图-这(有点帮助)。   Charles 补充说:"intx 是各种中断源的或门。"   然而,它仍然(痛苦地)"没有得到答复--甚至没有得到探讨"( 直至目前为止)。 必须检查各种中断源中的哪些?   (因为(未识别)源-"一致"或单独-生成中断!)

    现在、我们的团队发现(并相信) NXP 传感器数据表在传感器中断的全面正确披露和描述中"严重失败"。    然而、我们以6个重点为中心-我们相信、我们是最先发现以下问题的人:

    14.1.12  CTL_Reg 5.

    如图11所示,所有路由到 INT1或 INT2的中断信号都是逻辑或组合在一起的,因此一 个或多个功能块可以同时将中断引脚置为有效;因此,响应中断的主机应用程序应读取 INT_SOURCE 寄存器以确定中断源。   

    既是强大又是新的信息-是不是吗?   海报的软件是否知道这一点-并正确执行了" 相应源寄存器的"说明?"   

    深入挖掘...  (即“详细介绍”... 从116页中删除)

    14.1.6 INT_SOURCE 寄存器(地址0x0C)

    中断源寄存器。   置位的位(逻辑‘1’)指示哪个函数 已发出中断,而清零的位(逻辑‘0’)则指示哪个函 数未发出中断。 磁性中断事件的其他中断标志 位于 M_INT_SRC 寄存器(0x5E)中。

    读取 INT_SOURCE 寄存   器不会清除任何中断状态位(src_a_vecm 除外、请参阅表29);通过读取生成中断的函数的相应源寄存器可复位相应的中断标志位。   到目前为止、这一"关键发现"出现在哪里?

    员工和我仍然认为、此处主要的"缠绕"不是供应商的 MCU、而是指(NXP 和"后继"Accel 板生产商均提供) Accel 传感器的"注意/处理/和整体管理"(赦免)"神秘中断"的"过于简短和模糊"描述"!

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

    很棒的分析 CB1团队。 低至该器件内部的基本功能和 INT 处理模式。 我希望 NXP 已经发布了所有这些内部关系的详细流程图图、以及一个裸 C 源代码 和一些示例、其中的所有功能都将清晰暴露在外。 但绝不会太晚。 John。

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

    感谢 John、他说"太晚了"-员工注意到、"检查#2 "将于下个月早些时候派送。

    我们可能会得出结论、早期(可能是第一个"读取")应该是传感器的"源寄存器"-从该源寄存器收集-可能 需要(甚至)读取多个"其他传感器寄存器"!   

    据信、"单个中断源"(可能)可以通过"正确、正在生成中断的寄存器"的(赦免)"偶然读取"来正确清除。     然而、当更复杂(多源)中断到达时-(简单)"中断清除消失-并被 一个、"多寄存器地址和清除的级联"所取代。

    同样、这证明了" MCU 的正常责任范围之外"、而传感器制造商和电路板制造商则承担了大部分"失败披露"...

    "kiss"规定、"只有在传感器被"透彻理解和掌握"之后、MCU 及其编程才会成为焦点。   这里没有-但对于原始海报-应该必须"深入探讨" Accel 传感器-(原谅)现在、一个论坛"弱点"已经明显暴露出来。    员工和我的想法-这是一个以 MCU 为中心的论坛-海报必须完全了解和掌握外部器件(在这里介绍之前)-以确保所有问题都以 MCU 及其编程为中心。

    错误的"确定问题(实际)原因的目标"-负责" 花费时间、成本和精力"-应避免...

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

    您好 CB1;

    在表30的底部、它显示了

    "src_ddy 中断标志通过在仅加速计模式下读取加速度数据以及在仅磁力计或混合模式下读取磁性数据来清除。 在混合模式下且当 M_CTRL_REG2[hyb_autoinc_mode]= 1时、可以从寄存器0x01 (OUT_X_MSB)开始的12字节突发读取中读取所有传感器数据"

    //数据就绪中断被路由到引脚2
    ui8Register[0]= 0x00;
    I2CAGSend (ui32WorkerAddress、AG_CTRL_REG5、ui8Register、sizeof (ui8Register));


    这是我的代码中的位置、我将 DATA_READY 中断路由到中断引脚2。 所有其他中断都是红色的、然后发送到引脚1。

    目前、我仅使用 accelmag 中断、然后读取 accelmag 和陀螺仪数据。 我制作了一个包含传感器和 MCU 的小型 PCB、
    然后将其发送到董事会、直到它返回到邮件中、我将休息一下。 (我在 PCB 中包含了几个测试点)

    尽管我无法使其完全同步、但该传感器板使常规 ROS 用户的使用寿命变得非常轻松。

    我已经在 github.com/altineller/fximu 上上传了源代码和一些有关使用它的文档、并包含了用于桥接数据的 python 脚本、
    参数传递、校准等

    这里还有来自 Rviz 屏幕的视频: vimeo.com/359663238 (请在720p 观看:)

    此致、感谢大家的见解。

    CAN


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

    大家好、CAN、

    can altineller 说:
    "在仅加速计模式下读取加速度数据并在仅磁力计或混合模式下读取磁性数据、即可清除 src_ddrdy 中断标志。 在混合模式下且当 M_CTRL_REG2[hyb_autoinc_mode]= 1时、可以从寄存器0x01 (OUT_X_MSB)开始的12字节突发读取中读取所有传感器数据"[/quot]

    您是否提供了此信息?但出于什么目的?   您的屏幕保护盖从未显示(甚至是远程)任何此类"12字节突发读取!"

    [引用 user="can altineller"]I 将 DATA_READY 中断路由到中断引脚2。 所有其他中断都是红色的、然后发送到引脚1。[/quot]

    又是什么目的?   'interrupt pin 1 does not connect to your MCU'- thus you 将对任何/所有此类中断视而不见!   我完全失去了!

    [引用 user="can altineller"]现在,我只使用 accelmag 中断

    可能会被问及"您(积极)如何知道这一点?"   即使"不符合您的意图"-可能会生成其他中断(即诊断)-并且通过您的"清晰阅读""中断源寄存器-您不会被告知或建议-以及(甚至)意外-尤其是意外- 中断将挂起...

    [引用 user="can altineller"]此传感器板可让常规 ROS 用户的使用寿命变得非常轻松。 [/报价]

    希望大家不要这样做——“帮手”的情况并非如此——在这里“被人逐出”了很久!  (同时提供(几乎完全是)传感器指导!)

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

    您好!

    在故障期间、我捕获并解码了 i2c 总线。 我花了一段时间才能在 Ubuntu 上使用所有解码功能进行脉冲视图。

    下面是成功交易的缩放:

    1F 是 accelmag 传感器的地址。 在成功的传输过程中、地址写入后紧跟数据写入(0x00为状态)寄存器、地址读取后紧跟13次数据读取。

    下面是失败事务的缩放

    地址写入1f、然后数据写入、就像成功的事务一样、但之后它继续写入数据、而不是读取数据。

    此外、成功事务中的第一个数据写入之后是一个 ACK 并开始重复、但在失败事务中、之后是一个 NACK。

    我还捕获了几次失败、并观察到:它并不总是跟随数据写入、它可能会像成功的事务一样失败、除非读取的数据始终为 FF。 以下是其中的一个示例:

    不同故障之间的常见模式是 PE2变为低电平(accelmag 中断)时、i2c 时钟会产生尖峰。 (我将一个黑点放在它所在的位置)

    现在我怀疑:

    答:这是接线

    B.我在 PE4和 PE5上使用 i2c2。 中断引脚也是 PE2。 可能会混淆 i2c2、因为此 ISR 会触发?

    C.传感器可能会导致此尖峰并损坏结构。

    编辑:我更改了 PA7的 PE2、使用 PA7实现 accelmag 中断。 它仍然具有相同的外转、当 A7下降时、i2c 时钟尖峰可见。

    我认为这个项目已经完成、但我不能阻止自己调查问题。

    最好。

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

    员工(尤其是)和我、"大声称赞"这一极好的"传感器"分析。   员工正在搜索'Pulseview'-在 WIN7和/或 Win10下操作。

    您可能会注意到、我们(之前)注意到您的"预成形"导线连接器的"整洁度"、但认为它们"太长"、从而邀请潜在的非法信号引入

    当前的"挡风幕盖"证明"出色"-我们"希望"此类职位可以更快到达(20-30)。    (您可以考虑这样的"意愿"-为"未来问题"收集事实"。)

    [引用 user="can altineller"]下面将失败的事务地址写入缩放到1f,然后是数据写入,就像成功的事务一样,但之后它继续进行数据写入,而不是数据读取。

    我们非常喜欢您的描述细节(如上所述)、但如果它没有提到"已发生"的 ACK -在(第一个)发生故障字节 I2C 事务期间、"在第一次数据写入(0x00)之后立即发生"。   请注意、供应商的 Charles "敦促"您"搜索"此类"失败的 ACK "。    问题-至少在这种特定情况下-似乎是您的'SCL'脉冲序列中留下的'毛刺脉冲'-在第一个'Data Write'期间-这几乎肯定会导致(至少是造成的)错过的 ACK!

    我之前建议您-除了"加强您的线互连"之外、还"尽可能地将 SCL 线从线束中"移走"!"    使用"有线缆"来降低(不需要的)信号耦合的可能性甚至是值得的。   (仅将屏蔽电缆的一侧接地)

    现在、您观察到 "c。传感器可能会导致此尖峰并破坏结构。"    

    此类干扰/尖峰存在(可预测)原因-以下几个原因:

    • (MCU 或传感器板)上的电压或电流不足。   (在运行(程序运行)期间、此类操作必须"测量"、而不是"空闲"。)
    • "公共接地"连接不足:电源、MCU 板、传感器板
    • MCU 和传感器板之间的电压电平不匹配。   (我们记得您在传感器板上提到的"电压转换器"-这 需要进行"精心检查"。)    
    • I2C 模块的"Set-up/Config"在某种程度上证明低于最佳值、这是"在领域中"。   (即、它(通常)起作用-但可能"易受"双稳态!"影响)

    现在该怎么办?

    • "SCL"上的干扰可能源自"MCU 或传感器"
    • "传感器中断和 MCU 的 SCL 引脚"之间插入电阻器(例如2k2或以此类推)将(可能)实现(哪个)端检测-导致尖峰。   ("最早和最大"尖峰遵守-表示"最可能"-违规来源。
    • 我们被"打扰"、因为"如何以及为什么-即使是"-这是第一个(非法)"数据写入(0x1F)-本应是"地址读取")导致了"主器件或传感器"!

    我们有"目标/想法"-但最后留下分析(最后会先损坏"目标地址读取")。    (我们被告知/建议 "您"不能阻止自己"。)    请注意 、提供了一个"合理提示"、用于识别"腐败来源"。 (将地址读为"强制"改为"数据写入")  

    您 可能会称赞我们的"刚到"(大学生)-如果您确定这一分析(主要是他们的分析) 经过深思熟虑、展示和价值...   (只需单击**类似**按钮...)

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

    您好 CB1和 CAN.

    您是否可以使用 USBee AX 标准版、Plus 版或 Pro 版? 您使用的是哪种 USBee 硬件?

    我的最终建议是使用电池为电路板供电并再次检查。 使用

    USB 连接仅用于调试/与 PC 通信。 相应地设置电路板上的跳线。

    CB1、PulseView 需要在使用之前安装 skorg 库、我想知道您使用的是 OSC、Signal 或 MixedSig 器件。  

    John

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

    您好、John、

    谢谢您-总是很高兴"在这里"-尽管"员工/我"更喜欢我们的(其他)沟通渠道。   (您也是如此-正如员工回忆的那样)

    现在、我们没有"熟悉"/skorg libs"-担心"学习曲线"可能很高-我们可能会寻找(其他-更快/更容易)的替代方案。   (除非您能说服我们-否则-我们(始终)倾听/考虑-在"总结"之前。)

    返回海报的故障传感器-  

    • 我们想要海报来享受"胜利的刺激"-他(赦免)的回应太慢-我们安排了两个客户销售电话-今天-"星期六"   (尤其是星期六-这就是我们"打败"竞争对手的方式-通常是10倍-甚至是我们的100倍-但"注意力不足且动力不足!")
    • 我们与您的指导有所不同(略有不同)-我们更喜欢海报"通过"独立但足够的电源"为两块板供电-这可能是也可能不是"电池"。    如果他依靠评估板为传感器板供电-这是"高度可疑的"。   特别是(如和如)评估板是 PC - USB 供电!    正如您所知、John -在这种干扰情况下- Power 始终是"最重要的人物"之一。
    • 我之前注意到、中断引脚默认为"推挽"、员工进行了几次简短的实验(超出激励范围)、并将"电压转换器"的"传感器板提供商"确定为"干扰"的(强)候选选项 -当此类"推挽"信号切换时!   而(那)正是当-"毛刺脉冲出现在海报上(否则)原始 SCL 信号线上的时间。    (中断  

    普尔斯待机

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

    不知怎么说-我们不能再编辑/写入上述帖子。

    我们的调查表明、这是"传感器战争"问题的"修复"(最佳且唯一):  (请按此顺序尝试)

    • 传感器中断和 MCU 输入之间添加串联 R (例如2k2 - 4K7)。   (即 MCU 的 GPIO 输入)
    • 将有问题的"中断信号从"推挽"(同样、它是默认值)更改为"开漏"、并采用上拉 R 作为手动状态
    • 传感器的 SCL 输入的传感器侧添加一个100K R (或更高)下拉 R -。

    经(并在此处几乎得到确认)、"电压转换器的拼版"(在 SCL 线路上)使传感器的"CL 输入"无法 受益于(未阻断/未转换) MCU 的 SCL 输出(通常)良好提供的"低阻抗"。    在这种情况下-传感器的输入"容易受到此类干扰的影响"。    (员工已通过精心设计(高度重叠)的实验确认了这种情况-无法访问海报的传感器-此处...)

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

    您好!

    我正在使用 USBee AX PRO。 它很可能是克隆。

    我确实从 USB 移动电源为评估板供电、并确保笔记本电脑从主电源插拔。

    我这次还将 usbee 设置为24MHz、并捕获了相同的结果。

    现在捕获为24MHz 时、一些故障不具有 NACK 功能、但始终存在该时钟尖峰、因为其中一个中断正在下降。

    我还应该尝试使用普通旧电池为评估板供电、还是 USB 移动电源足够安静? 我还使用模拟示波器检查了信号线路、没有接地配置错误的迹象。

    此致、

    C.