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.

[参考译文] MCF8329A:默认 MCF8329A 目标 ID 是什么&&#39?

Guru**** 2557670 points
Other Parts Discussed in Thread: MCF8329A

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

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/1567010/mcf8329a-what-s-the-default-mcf8329a-target-id

器件型号:MCF8329A


工具/软件:

您好!

我使用 MCF8329A 来驱动电机、我对“target ID“感到困惑。

从数据表中、我们可以看出目标 ID 是寄存器 A6h 中的“IIC 从器件地址“配置、默认值为 0x00。 (数据表: MCF8329A 无传感器场定向控制 (FOC) 三相 BLDC 栅极驱动器数据表。  是最新的吗?)

但是、当我尝试扫描芯片 ID 时、它返回 0x01。

我不知道发生了什么事,为什么。

我的扫描代码如下:

```c

MCF_ERR_Type_t MCF8329A_TargetID_SCAN (void)

HAL_StatusTypeDef hal_sta = HAL_OK;
uint32_t ctrlWord = 0x80 | CTRL_WORD_OP_R | CTRL_WORD_CRC_DIS | CTRL_WORD_DLEN_32b;
uint32_t regVal;
Uint8_t txBuf[3]={(ctrlWord>>16)&0xFF、(ctrlWord>>8)&0xFF、ctrlWord&0xFF};
for (uint8_t addr = 0;addr < 0x80;addr++){
HAL_sta = HAL_I2C_addr (MCF_IIC_DEV、Master_Transmit << 1、txBuf、3100);
HAL_sta |= HAL_I2C_Val (MCF_IIC_DEV、(地址<< 1)| 0x01、(uint8_t*) Master_Receive、4100);
if (hal_sta == HAL_OK){
MCF_DBG(“MCF3829A scan succ、TargetID[0x%02x]\n“、addr);  //  实际输出:MCF3829A scan succ、TargetID[0x01]
返回 MCF_OK;
}
}
MCF_ERR(“MCF3829A 扫描失败\n“);
返回 MCF_ERR_SCAN;
}

```μ s

欢迎您提供任何信息、感谢您的帮助。

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

       

    我重新检查了数据表、找到了两个涉及“IIC 从器件地址“配置的位置、它们是不同的。

    当我尝试使用下面 名为“MCF8329A_READ_REG"的“的代码读取寄存器值时、它应该读取 RAM 中的值、而不是 EEPROM 值、我好吗? 因为我的操作方式不像“将 0x40000000 写入寄存器 0x0000EA 以将 EEPROM 数据读取到影子寄存器中  (0x000080-0x0000AE)“。

    ```c

    MCF_ERR_Type_t MCF8329A_READ_reg(uint32_t reg、uint8_t *pData、uint16_t 大小)

    uint8_t txBuf[3];
    HAL_StatusTypeDef hal_sta;

    REG |= CTRL_WORD_OP_R | CTRL_WORD_CRC_DIS | CTRL_WORD_DLEN_32b;
    txBuf[0]=(reg >> 16)& 0xFF;
    txBuf[1]=(reg >> 8)& 0xFF;
    txBuf[2]= reg & 0xFF;

    HAL_sta = HAL_I2C_Buf Master_Transmit (MCF_IIC_DEV、ADDR_MCF8329A_W、txBuf、3100);
    HAL_sta |= HAL_I2C_Data Master_Receive (MCF_IIC_DEV、ADDR_MCF8329A_R、pData、大小、100);
    if(hal_sta != HAL_OK){
    MCF_ERR(“MCF3829A 读取 reg[0x%02x] val[0x%08X] err[%d]\n“、reg、*(uint32_t *) pData、hal_sta);
    返回 MCF_ERR_READ;
    }其他{
    MCF_DBG(“MCF3829A 读取 reg[0x%02x] val[0x%08X] ok\n“、reg、*(uint32_t *) pData);
    }

    返回 MCF_OK;
    }

    uint32_t regVal;
    for (uint8_t i = 0;i < 24;i++){
    extern const MCF_REG_Type_t MCF_REG_Val[];
    MCF8329A_READ_reg (MCF_REG_VAL[i]。reg、(uint8_t*)&regVal、4);
    HAL_delay (100);
    }

    ```μ s

    但是、读取结果为 EEPROM 值:

    我对读取结果感到非常困惑。 有人能向我解释一下发生了什么事吗?

    谢谢你。

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

    我猜 MCF8329A 会在每次上电复位后将 EEPROM 寄存器值读取到 RAM、是吗?

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

    尊敬的 Junde:

    是的、您是对的。 每次上电时、EEPROM 内容都将复制到影子存储器 (RAM)。  

    MCF8329A 默认目标 I2C 地址为 0x1。  有关器件默认值、请使用表 8-1。

    谢谢、

    Dhinesh