[STM32]I2C에러 HAL_I2C_ERROR_AF(0x04), HAL_BUSY(0x02)

2021년 11월 19일 by 진아사랑해

    [STM32]I2C에러 HAL_I2C_ERROR_AF(0x04), HAL_BUSY(0x02) 목차
반응형

stm32에서 i2c통신을 사용하면서 제목과 같은 에러가 나왔다

 

HAL_StatusTypeDef aaa_read (uint8_t *data, uint16_t data_len)
{
    HAL_StatusTypeDef status = HAL_OK;

    status = HAL_I2C_Mem_Read(&hi2c2, 0x21, 1, I2C_MEMADD_SIZE_8BIT, data, data_len, 1000);
    if (status != HAL_OK)
    {
        /* Reading process Error */
        printf(" %ld : Fail !!!\n",hi2c2.ErrorCode );  <- ErrorCode에 0x04가 출력된다
    }

    /* Wait for the end of the transfer */
    while (HAL_I2C_GetState(&hi2c2) != HAL_I2C_STATE_READY)
    {
    }
    return status;
}

 

마스터에서 데이터 송신을 하면 슬레이브에서 ACK bit를 주어야 한다

이 에러는 버스상에 주소를 인식하는 장비가 없다는 뜻이다

 

이 경우에는 전원이 정상인지

1) 배선에서 문제는 없는지

2) Slave의 Power는 충분한지

3) 주소는 맞는지

하는 부분을 확인하여야 한다

참고) GPIO PIN을 사용하는 경우에는 Open Drain(OD)를 사용하여야 한다

나같은 경우는 하드웨어 패턴에 문제가 있었다

 

두번째로 HAL_BUSY 인 경우

1) 프로그램에서 다른 부분이 사용하여 해당 디바이스가 준비되ㅣ 않은 경우

2) SCL Line이 Holding down 즉, Low로 계속 잡혀있는 경우이다

이 두가지 부분을 첨사해 보아야 한다

 

반응형