mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-10-31 21:14:37 +00:00 
			
		
		
		
	fix(lp_i2c): Fixed a bug where the LP_I2C did not send NACK for 16-byte reads
This commit updates the LP_I2C driver used by the LP CPU wherein the driver did not send out a NACK when we do a read of multiple of the FIFO depth bytes. This was because the LP I2C controller was configured to send an ACK when the Rx FIFO reaches the threshold instead of a NACK. This commit updates the behavior.
This commit is contained in:
		| @@ -656,6 +656,20 @@ static inline void i2c_ll_master_clr_bus(i2c_dev_t *hw) | |||||||
|     hw->ctr.conf_upgate = 1; |     hw->ctr.conf_upgate = 1; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * @brief Set the ACK level that the I2C master must send when the Rx FIFO count has reached the threshold value. | ||||||
|  |  *        ack_level: 1 (NACK) | ||||||
|  |  *        ack_level: 0 (ACK) | ||||||
|  |  * | ||||||
|  |  * @param  hw Beginning address of the peripheral registers | ||||||
|  |  * | ||||||
|  |  * @return None | ||||||
|  |  */ | ||||||
|  | static inline void i2c_ll_master_rx_full_ack_level(i2c_dev_t *hw, int ack_level) | ||||||
|  | { | ||||||
|  |     hw->ctr.rx_full_ack_level = ack_level; | ||||||
|  | } | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * @brief Set I2C source clock |  * @brief Set I2C source clock | ||||||
|  * |  * | ||||||
|   | |||||||
| @@ -143,6 +143,9 @@ esp_err_t lp_core_i2c_master_init(i2c_port_t lp_i2c_num, const lp_core_i2c_cfg_t | |||||||
|     /* Enable SDA and SCL filtering. This configuration matches the HP I2C filter config */ |     /* Enable SDA and SCL filtering. This configuration matches the HP I2C filter config */ | ||||||
|     i2c_ll_set_filter(i2c_hal.dev, LP_I2C_FILTER_CYC_NUM_DEF); |     i2c_ll_set_filter(i2c_hal.dev, LP_I2C_FILTER_CYC_NUM_DEF); | ||||||
|  |  | ||||||
|  |     /* Configure the I2C master to send a NACK when the Rx FIFO count is full */ | ||||||
|  |     i2c_ll_master_rx_full_ack_level(i2c_hal.dev, 1); | ||||||
|  |  | ||||||
|     /* Synchronize the config register values to the LP I2C peripheral clock */ |     /* Synchronize the config register values to the LP I2C peripheral clock */ | ||||||
|     i2c_ll_update(i2c_hal.dev); |     i2c_ll_update(i2c_hal.dev); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Sudeep Mohanty
					Sudeep Mohanty