MCP453X/455X/463X/465X
6.2.4 ADDRESSING
The address byte is the first byte received following the START condition from the master device. The address contains four (or more) fixed bits and (up to) three user defined hardware address bits (pins A2, A1, and A0). These 7-bits address the desired I2C device. The A7:A4 address bits are fixed to “0101” and the device appends the value of following three address pins (A2, A1, A0). Address pins that are not present on the device are pulled up (a bit value of ‘1’). Since there are up to three address bits controlled by hardware pins, there may be up to eight MCP4XXX devices on the same I2C bus. Figure 6-9 shows the slave address byte format, which contains the seven address bits. There is also a read/ write bit. Table 6-2 shows the fixed address for each device.
Байт адреса - первый байт посылаемый мастером после старта . Адрес содержит 4 (или больше) фиксированных бита и до 3-х битов, задаваемых пользователем с помощью соответствующих установок входов A2, A1, A0 в зависимости от типа устройства. Если адресные пины в устройстве отсутствуют, то их значение принимаются равным "1". Три адресных разряда позволяют увеличить количество учтройств, одновременно подключенных к шине. Рис 6-9 показыват назначение 7 бит адресного байта для вадомого (slave) устройства. После адресных битов идет бит чтения/записи (read/write). В Табл. 6-2 приведены адреса для каждого типа устройств.
Пример передачи команды от master к slave для MCP4551 form Arduino for I2C Digital Potentiometer
Wire.beginTransmission(0x2F); // transmit to device address 0x2F is specified in datasheet
Wire.write(0x00); // sends instruction byte - Write data
Wire.write(0x55); // sends potentiometer value byte
Wire.endTransmission(); // stop transmitting
Transmitt with Arduino board (byte 0x00, 0x55)
CubeMX setup for STM32F4 Discovery
CubeMX setup for STM32F
CubeMX setup for STM32F4 Discovery
CubeMX setup for STM32F042
CubeMX setup for STM32F4 Discovery
CubeMX setup for STM32F042
I2C code example for STM32F4 Discovery
/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx_hal.h"
/* USER CODE BEGIN Includes */
/* USER CODE END Includes */
/* Private variables ---------------------------------------------------------*/
I2C_HandleTypeDef hi2c1;
/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
uint8_t xBuffer[3],rrr,www;
uint8_t DEVADDR;
uint8_t MEMADDR;
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_I2C1_Init(void);
/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*/
/* USER CODE END PFP */
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration----------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_I2C1_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
xBuffer[0] = 0;
xBuffer[1] = 0;
DEVADDR=0x5e;
MEMADDR=0;
/**
* @brief Transmits in master mode an amount of data in blocking mode.
* @param hi2c Pointer to a I2C_HandleTypeDef structure that contains
* the configuration information for I2C module
* @param DevAddress Target device address
* @param pData Pointer to data buffer
* @param Size Amount of data to be sent
* @param Timeout Timeout duration
* @retval HAL status
*/
//HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
www=HAL_I2C_Master_Transmit(&hi2c1, (uint16_t) DEVADDR, xBuffer, 2, 10); //write to memory address 0
HAL_Delay(1); //memory write delay
xBuffer[0] = 0x00; //clear buffer
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_SET); //BLUE LED ON
HAL_Delay(1); //system wait
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_RESET); //BLUE LED ON
}
/* USER CODE END 3 */
}
6.2.4 ADDRESSING
The address byte is the first byte received following the START condition from the master device. The address contains four (or more) fixed bits and (up to) three user defined hardware address bits (pins A2, A1, and A0). These 7-bits address the desired I2C device. The A7:A4 address bits are fixed to “0101” and the device appends the value of following three address pins (A2, A1, A0). Address pins that are not present on the device are pulled up (a bit value of ‘1’). Since there are up to three address bits controlled by hardware pins, there may be up to eight MCP4XXX devices on the same I2C bus. Figure 6-9 shows the slave address byte format, which contains the seven address bits. There is also a read/ write bit. Table 6-2 shows the fixed address for each device.
Байт адреса - первый байт посылаемый мастером после старта . Адрес содержит 4 (или больше) фиксированных бита и до 3-х битов, задаваемых пользователем с помощью соответствующих установок входов A2, A1, A0 в зависимости от типа устройства. Если адресные пины в устройстве отсутствуют, то их значение принимаются равным "1". Три адресных разряда позволяют увеличить количество учтройств, одновременно подключенных к шине. Рис 6-9 показыват назначение 7 бит адресного байта для вадомого (slave) устройства. После адресных битов идет бит чтения/записи (read/write). В Табл. 6-2 приведены адреса для каждого типа устройств.
There are up to three hardware pins used to specify the device address. The number of address pins is determined by the part number. Address 0 is multiplexed with the High Voltage Command (HVC) function. So the state of A0 is latched on the MCP4XXX’s POR/BOR event.The HVC pin has an internal resistor connection to the MCP45XX/46XXs internal VDD signal. The state of the A2 and A1 pins should be static, that is they should be tied high or tied low.
Вывод А0 используется для High-Voltge комманд. Для MCP45XX/46XXs устройств он подтянут к "1".
При обращении к ведомому устройству типа MCP45X1 его адрес 0x2F или 0x2E.
Пример передачи команды от master к slave для MCP4551 form Arduino for I2C Digital Potentiometer
Wire.beginTransmission(0x2F); // transmit to device address 0x2F is specified in datasheet
Wire.write(0x00); // sends instruction byte - Write data
Wire.write(0x55); // sends potentiometer value byte
Wire.endTransmission(); // stop transmitting
Transmitt with Arduino board (byte 0x00, 0x55)
I2C signal from STM32F042 with Saleae Logic (transmitted byte - 0x16, 0x00). Address byte 0x5E.
CubeMX setup for STM32F4 Discovery
CubeMX setup for STM32F
CubeMX setup for STM32F4 Discovery
CubeMX setup for STM32F042
CubeMX setup for STM32F4 Discovery
CubeMX setup for STM32F042
I2C code example for STM32F4 Discovery
/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx_hal.h"
/* USER CODE BEGIN Includes */
/* USER CODE END Includes */
/* Private variables ---------------------------------------------------------*/
I2C_HandleTypeDef hi2c1;
/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
uint8_t xBuffer[3],rrr,www;
uint8_t DEVADDR;
uint8_t MEMADDR;
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_I2C1_Init(void);
/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*/
/* USER CODE END PFP */
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration----------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_I2C1_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
xBuffer[0] = 0;
xBuffer[1] = 0;
DEVADDR=0x5e;
MEMADDR=0;
/**
* @brief Transmits in master mode an amount of data in blocking mode.
* @param hi2c Pointer to a I2C_HandleTypeDef structure that contains
* the configuration information for I2C module
* @param DevAddress Target device address
* @param pData Pointer to data buffer
* @param Size Amount of data to be sent
* @param Timeout Timeout duration
* @retval HAL status
*/
//HAL_StatusTypeDef HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
www=HAL_I2C_Master_Transmit(&hi2c1, (uint16_t) DEVADDR, xBuffer, 2, 10); //write to memory address 0
HAL_Delay(1); //memory write delay
xBuffer[0] = 0x00; //clear buffer
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_SET); //BLUE LED ON
HAL_Delay(1); //system wait
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_13, GPIO_PIN_RESET); //BLUE LED ON
}
/* USER CODE END 3 */
}
Комментариев нет:
Отправить комментарий