Descripción del registro PCF8574

0

Tengo un problema con el componente PCF8754. El PCF8754 está conectado a la MCU stm32 y los PINS A2, A1, A0 están conectados a GND. Significa que esa dirección de 7 bits es 0x20. Quiero leer el estado del pin (P0 a P7) y el estado de escritura (P0, a P7). Yo uso la biblioteca HAL. Función para escribir:

HAL_I2C_Mem_Write(&hi2c1, 0x20, MemAddress, 1, &val, 1, 1);

Función para leer:

HAL_I2C_Mem_Read(&hi2c1, 0x20, MemAddress, 1, &data, 6, 100);

No sé MemAddress(register) para leer y escribir datos desde / a pcf8574. ¿Dónde encontrarlo?

    
pregunta user3483899

2 respuestas

2

Para encontrar información sobre registros (direcciones, contenidos), lea la hoja de datos. Esto se aplica a todos los circuitos integrados.

PCF8754 tiene solo un registro (consulte la p. 7), que no es un típico arquitectura para un I 2 CI / O expansor 1 . Los detalles sobre cómo leer y escribir en él se encuentran en las secciones 8.2 y 8.3 en la hoja de datos.

1 Para una disposición de registro más típica, consulte PCA9555 . El PCF8754 es una parte más antigua. El PCA9555 es una parte más nueva.

Dado que solo hay un registro, el primer byte que el maestro de bus envía a través de I 2 C es data: el contenido del registro. La dirección de registro no se envía. Su función de biblioteca de software, sin embargo, separa semánticamente el byte de la dirección de registro de los bytes de datos.

  1. Busque otra función de biblioteca que no tenga un parámetro para la dirección de registro.
  2. O, escribe tu propia función.
  3. O, use la dirección de bytes para enviar datos. (Sin embargo, eso sería un truco. Es posible que alguien que lea su código más tarde no lo aprecie).
respondido por el Nick Alexeev
0

He encontrado las siguientes funciones:

HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);

HAL_StatusTypeDef HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);

HAL_StatusTypeDef HAL_I2C_Slave_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);

HAL_StatusTypeDef HAL_I2C_Slave_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout);

Parece que debería usar la primera y la segunda función para la comunicación entre stm32 y pcf8754. Gracias.

    
respondido por el user3483899

Lea otras preguntas en las etiquetas