mirror of
https://github.com/skot/ESP-Miner.git
synced 2025-03-29 11:11:45 +01:00
add hex specific drivers
This commit is contained in:
parent
b1902ef266
commit
0c2745f17f
89
main/EMC2302.c
Normal file
89
main/EMC2302.c
Normal file
@ -0,0 +1,89 @@
|
||||
#include "driver/i2c.h"
|
||||
#include "esp_log.h"
|
||||
#include <stdio.h>
|
||||
|
||||
#include "EMC2302.h"
|
||||
|
||||
#define I2C_MASTER_SCL_IO 48 /*!< GPIO number used for I2C master clock */
|
||||
#define I2C_MASTER_SDA_IO 47 /*!< GPIO number used for I2C master data */
|
||||
#define I2C_MASTER_NUM \
|
||||
0 /*!< I2C master i2c port number, the number of i2c peripheral interfaces available will depend on the chip */
|
||||
#define I2C_MASTER_FREQ_HZ 400000 /*!< I2C master clock frequency */
|
||||
#define I2C_MASTER_TX_BUF_DISABLE 0 /*!< I2C master doesn't need buffer */
|
||||
#define I2C_MASTER_RX_BUF_DISABLE 0 /*!< I2C master doesn't need buffer */
|
||||
#define I2C_MASTER_TIMEOUT_MS 1000
|
||||
|
||||
static const char *TAG = "EMC2302.c";
|
||||
|
||||
/**
|
||||
* @brief Read a sequence of I2C bytes
|
||||
*/
|
||||
static esp_err_t register_read(uint8_t reg_addr, uint8_t * data, size_t len)
|
||||
{
|
||||
return i2c_master_write_read_device(I2C_MASTER_NUM, EMC2302_I2CADDR_DEFAULT, ®_addr, 1, data, len,
|
||||
I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Write a byte to a I2C register
|
||||
*/
|
||||
static esp_err_t register_write_byte(uint8_t reg_addr, uint8_t data)
|
||||
{
|
||||
int ret;
|
||||
uint8_t write_buf[2] = {reg_addr, data};
|
||||
|
||||
ret = i2c_master_write_to_device(I2C_MASTER_NUM, EMC2302_I2CADDR_DEFAULT, write_buf, sizeof(write_buf),
|
||||
I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
// run this first. sets up the PWM polarity register
|
||||
void EMC2302_init(bool invertPolarity)
|
||||
{
|
||||
|
||||
if (invertPolarity) {
|
||||
ESP_ERROR_CHECK(register_write_byte(EMC2302_PWM_POLARITY, 0b00011111));
|
||||
}
|
||||
}
|
||||
|
||||
// Sets the fan speed to a given percent
|
||||
void EMC2302_set_fan_speed(uint8_t devicenum, float percent)
|
||||
{
|
||||
uint8_t speed;
|
||||
uint8_t FAN_SETTING_REG = EMC2302_FAN1_SETTING + (devicenum * 0x10);
|
||||
|
||||
speed = (uint8_t) (63.0 * percent);
|
||||
ESP_ERROR_CHECK(register_write_byte(FAN_SETTING_REG, speed));
|
||||
}
|
||||
|
||||
// Gets the fan speed
|
||||
uint16_t EMC2302_get_fan_speed(uint8_t devicenum)
|
||||
{
|
||||
uint8_t tach_lsb, tach_msb;
|
||||
uint16_t RPM;
|
||||
uint8_t TACH_LSB_REG = EMC2302_TACH1_LSB + (devicenum * 0x10);
|
||||
uint8_t TACH_MSB_REG = EMC2302_TACH1_MSB + (devicenum * 0x10);
|
||||
|
||||
ESP_ERROR_CHECK(register_read(TACH_LSB_REG, &tach_lsb, 1));
|
||||
ESP_ERROR_CHECK(register_read(TACH_MSB_REG, &tach_msb, 1));
|
||||
|
||||
ESP_LOGI(TAG, "Raw Fan Speed[%d] = %02X %02X", devicenum, tach_msb, tach_lsb);
|
||||
RPM = (tach_msb << 5) + ((tach_lsb >> 3) & 0x1F);
|
||||
ESP_LOGI(TAG, "Fan Speed[%d] = %d RPM", devicenum, RPM);
|
||||
|
||||
return RPM;
|
||||
}
|
||||
|
||||
float EMC2302_get_external_temp(void)
|
||||
{
|
||||
// We don't have temperature on this chip, so fake it
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t EMC2302_get_internal_temp(void)
|
||||
{
|
||||
// We don't have temperature on this chip, so fake it
|
||||
return 0;
|
||||
}
|
||||
|
82
main/EMC2302.h
Normal file
82
main/EMC2302.h
Normal file
@ -0,0 +1,82 @@
|
||||
#ifndef EMC2302_H_
|
||||
#define EMC2302_H_
|
||||
|
||||
|
||||
#define EMC2302_I2CADDR_DEFAULT 0x2F ///< EMC2302 default i2c address
|
||||
#define EMC2302_WHOAMI 0xFD ///< Chip ID register
|
||||
#define EMC2302_MANUFACTURER_ID 0xFE ///< Manufacturer ID
|
||||
#define EMC2302_REVISION 0xFF ///< Chip revision
|
||||
|
||||
#define EMC2302_CONFIG 0x20 ///< configuration register
|
||||
#define EMC2302_STATUS 0x24 ///< status register
|
||||
#define EMC2302_STALL_STATUS 0x25 ///< fan stall status
|
||||
#define EMC2302_SPIN_STATUS 0x26 ///< fan spin status
|
||||
#define EMC2302_DRIVE_FAIL_STATUS 0x27 ///< drive fail status
|
||||
#define EMC2302_INT_ENABLE 0x29 ///< interrupt enable register
|
||||
#define EMC2302_PWM_POLARITY 0x2A ///< PWM polarity config
|
||||
#define EMC2302_PWM_OUTPUT 0x2B ///< PWM output config
|
||||
#define EMC2302_PWM_BASEF45 0x2C ///<
|
||||
#define EMC2302_PWM_BASEF123 ///<
|
||||
|
||||
#define EMC2302_FAN1_SETTING 0x30 ///< Fan 1 setting
|
||||
#define EMC2302_PWM1_DIVIDE 0x31 ///< PWM 1 divider
|
||||
#define EMC2302_FAN1_CONFIG1 0x32 ///< Fan 1 configuration 1 register
|
||||
#define EMC2302_FAN1_CONFIG2 0x33 ///< Fan 1 configuration 2 register
|
||||
#define EMC2302_GAIN1 0x35 ///< Gain 1 register
|
||||
#define EMC2302_FAN1_SPINUP_CONFIG 0x36 ///< Fan 1 spinup configuration register
|
||||
#define EMC2302_FAN1_MAX_STEP 0x37 ///< Fan 1 max step register
|
||||
#define EMC2302_FAN1_MIN_DRIVE 0x38 ///< Fan 1 minimum drive register
|
||||
#define EMC2302_FAN1_TACH_COUNT 0x39 ///< Fan 1 valid TACH count
|
||||
#define EMC2302_FAN1_DRV_FAIL_LOW 0x3A ///< Fan 1 drive fail band low byte
|
||||
#define EMC2302_FAN1_DRV_FAIL_HIGH 0x3B ///< Fan 1 drive fail band high byte
|
||||
#define EMC2302_TACH1_TARGET_LSB 0x3C ///< Tach 1 target low byte
|
||||
#define EMC2302_TACH1_TARGET_MSB 0x3D ///< Tach 1 target high byte
|
||||
#define EMC2302_TACH1_LSB 0x3E ///< Tach 1 reading low byte
|
||||
#define EMC2302_TACH1_MSB 0x3F ///< Tach 1 reading high byte
|
||||
|
||||
#define EMC2302_FAN2_SETTING 0x40 ///< Fan 2 setting
|
||||
#define EMC2302_PWM2_DIVIDE 0x41 ///< PWM 2 divider
|
||||
#define EMC2302_FAN2_CONFIG1 0x42 ///< Fan 2 configuration 1 register
|
||||
#define EMC2302_FAN2_CONFIG2 0x43 ///< Fan 2 configuration 2 register
|
||||
#define EMC2302_GAIN2 0x45 ///< Gain 2 register
|
||||
#define EMC2302_FAN2_SPINUP_CONFIG 0x46 ///< Fan 2 spinup configuration register
|
||||
#define EMC2302_FAN2_MAX_STEP 0x47 ///< Fan 2 max step register
|
||||
#define EMC2302_FAN2_MIN_DRIVE 0x48 ///< Fan 2 minimum drive register
|
||||
#define EMC2302_FAN2_TACH_COUNT 0x49 ///< Fan 2 valid TACH count
|
||||
#define EMC2302_FAN2_DRV_FAIL_LOW 0x4A ///< Fan 2 drive fail band low byte
|
||||
#define EMC2302_FAN2_DRV_FAIL_HIGH 0x4B ///< Fan 2 drive fail band high byte
|
||||
#define EMC2302_TACH2_TARGET_LSB 0x4C ///< Tach 2 target low byte
|
||||
#define EMC2302_TACH2_TARGET_MSB 0x4D ///< Tach 2 target high byte
|
||||
#define EMC2302_TACH2_LSB 0x4E ///< Tach 2 reading low byte
|
||||
#define EMC2302_TACH2_MSB 0x4F ///< Tach 2 reading high byte
|
||||
|
||||
#define EMC2302_FAN_RPM_NUMERATOR 5400000 ///< Conversion unit to convert LSBs to fan RPM
|
||||
#define _TEMP_LSB 0.125 ///< single bit value for internal temperature readings
|
||||
|
||||
/**
|
||||
* @brief
|
||||
*
|
||||
* Allowed values for `setDataRate`.
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
EMC2101_RATE_1_16_HZ, ///< 1_16_HZ
|
||||
EMC2101_RATE_1_8_HZ, ///< 1_8_HZ
|
||||
EMC2101_RATE_1_4_HZ, ///< 1_4_HZ
|
||||
EMC2101_RATE_1_2_HZ, ///< 1_2_HZ
|
||||
EMC2101_RATE_1_HZ, ///< 1_HZ
|
||||
EMC2101_RATE_2_HZ, ///< 2_HZ
|
||||
EMC2101_RATE_4_HZ, ///< 4_HZ
|
||||
EMC2101_RATE_8_HZ, ///< 8_HZ
|
||||
EMC2101_RATE_16_HZ, ///< 16_HZ
|
||||
EMC2101_RATE_32_HZ, ///< 32_HZ
|
||||
} emc2101_rate_t;
|
||||
|
||||
void EMC2302_init(bool);
|
||||
void EMC2302_set_fan_speed(uint8_t, float);
|
||||
uint16_t EMC2302_get_fan_speed(uint8_t);
|
||||
|
||||
float EMC2302_get_external_temp(void);
|
||||
uint8_t EMC2302_get_internal_temp(void);
|
||||
|
||||
#endif /* EMC2302_H_ */
|
62
main/TMP1075.c
Normal file
62
main/TMP1075.c
Normal file
@ -0,0 +1,62 @@
|
||||
#include <stdio.h>
|
||||
#include "esp_log.h"
|
||||
#include "driver/i2c.h"
|
||||
|
||||
#include "TMP1075.h"
|
||||
|
||||
#define I2C_MASTER_SCL_IO 48 /*!< GPIO number used for I2C master clock */
|
||||
#define I2C_MASTER_SDA_IO 47 /*!< GPIO number used for I2C master data */
|
||||
#define I2C_MASTER_NUM 0 /*!< I2C master i2c port number, the number of i2c peripheral interfaces available will depend on the chip */
|
||||
#define I2C_MASTER_FREQ_HZ 400000 /*!< I2C master clock frequency */
|
||||
#define I2C_MASTER_TX_BUF_DISABLE 0 /*!< I2C master doesn't need buffer */
|
||||
#define I2C_MASTER_RX_BUF_DISABLE 0 /*!< I2C master doesn't need buffer */
|
||||
#define I2C_MASTER_TIMEOUT_MS 1000
|
||||
|
||||
static const char *TAG = "TMP1075.c";
|
||||
|
||||
bool TMP1075_installed(int);
|
||||
uint8_t TMP1075_read_temperature(int);
|
||||
|
||||
/**
|
||||
* @brief Read a sequence of I2C bytes
|
||||
*/
|
||||
static esp_err_t register_read(uint8_t dev_addr, uint8_t reg_addr, uint8_t *data, size_t len)
|
||||
{
|
||||
return i2c_master_write_read_device(I2C_MASTER_NUM, dev_addr, ®_addr, 1, data, len, I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Write a byte to a I2C register
|
||||
*/
|
||||
static esp_err_t register_write_word(uint8_t dev_addr, uint8_t reg_addr, uint8_t *data) {
|
||||
int ret;
|
||||
uint8_t write_buf[3] = {reg_addr, data[0], data[1]};
|
||||
|
||||
ret = i2c_master_write_to_device(I2C_MASTER_NUM, dev_addr, write_buf, sizeof(write_buf), I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool TMP1075_installed(int device_index)
|
||||
{
|
||||
uint8_t data[2];
|
||||
esp_err_t result = ESP_OK;
|
||||
|
||||
// read the configuration register
|
||||
ESP_LOGI(TAG, "Reading configuration register");
|
||||
ESP_ERROR_CHECK(register_read(TMP1075_I2CADDR_DEFAULT + device_index, TMP1075_CONFIG_REG, data, 2));
|
||||
ESP_LOGI(TAG, "Configuration[%d] = %02X %02X", device_index, data[0], data[1]);
|
||||
|
||||
return (result == ESP_OK?true:false);
|
||||
}
|
||||
|
||||
uint8_t TMP1075_read_temperature(int device_index)
|
||||
{
|
||||
uint8_t data[2];
|
||||
|
||||
ESP_ERROR_CHECK(register_read(TMP1075_I2CADDR_DEFAULT + device_index, TMP1075_TEMP_REG, data, 2));
|
||||
//ESP_LOGI(TAG, "Raw Temperature = %02X %02X", data[0], data[1]);
|
||||
ESP_LOGI(TAG, "Temperature[%d] = %d", device_index, data[0]);
|
||||
return data[0];
|
||||
}
|
||||
|
14
main/TMP1075.h
Normal file
14
main/TMP1075.h
Normal file
@ -0,0 +1,14 @@
|
||||
#ifndef TMP1075_H_
|
||||
#define TMP1075_H_
|
||||
|
||||
#define TMP1075_I2CADDR_DEFAULT 0x4A ///< TMP1075 i2c address
|
||||
#define TMP1075_TEMP_REG 0x00 ///< Temperature register
|
||||
#define TMP1075_CONFIG_REG 0x01 ///< Configuration register
|
||||
#define TMP1075_LOW_LIMIT 0x02 ///< Low limit register
|
||||
#define TMP1075_HIGH_LIMIT 0x03 ///< High limit register
|
||||
#define TMP1075_DEVICE_ID 0x0F ///< Device ID register
|
||||
|
||||
bool TMP1075_installed(int);
|
||||
uint8_t TMP1075_read_temperature(int);
|
||||
|
||||
#endif /* TMP1075_H_ */
|
82
main/pmbus_commands.h
Normal file
82
main/pmbus_commands.h
Normal file
@ -0,0 +1,82 @@
|
||||
|
||||
/* Standard Core PMBus commands */
|
||||
#define PMBUS_ON_OFF_CONFIG 0x02
|
||||
#define PMBUS_CLEAR_FAULTS 0x03
|
||||
#define PMBUS_PHASE 0x04
|
||||
#define PMBUS_WRITE_PROTECT 0x10
|
||||
#define PMBUS_STORE_USER_ALL 0x15
|
||||
#define PMBUS_RESTORE_USER_ALL 0x16
|
||||
#define PMBUS_CAPABILITY 0x19
|
||||
#define PMBUS_SMBALERT_MASK 0x1B
|
||||
#define PMBUS_VOUT_MODE 0x20
|
||||
#define PMBUS_VOUT_COMMAND 0x21
|
||||
#define PMBUS_VOUT_TRIM 0x22
|
||||
#define PMBUS_VOUT_MAX 0x24
|
||||
#define PMBUS_VOUT_MARGIN_HIGH 0x25
|
||||
#define PMBUS_VOUT_MARGIN_LOW 0x26
|
||||
#define PMBUS_VOUT_TRANSITION_RATE 0x27
|
||||
#define PMBUS_VOUT_SCALE_LOOP 0x29
|
||||
#define PMBUS_VOUT_MIN 0x2B
|
||||
#define PMBUS_FREQUENCY_SWITCH 0x33
|
||||
#define PMBUS_VIN_ON 0x35
|
||||
#define PMBUS_VIN_OFF 0x36
|
||||
#define PMBUS_INTERLEAVE 0x37
|
||||
#define PMBUS_IOUT_CAL_GAIN 0x38
|
||||
#define PMBUS_IOUT_CAL_OFFSET 0x39
|
||||
#define PMBUS_VOUT_OV_FAULT_LIMIT 0x40
|
||||
#define PMBUS_VOUT_OV_FAULT_RESPONSE 0x41
|
||||
#define PMBUS_VOUT_OV_WARN_LIMIT 0x42
|
||||
#define PMBUS_VOUT_UV_WARN_LIMIT 0x43
|
||||
#define PMBUS_VOUT_UV_FAULT_LIMIT 0x44
|
||||
#define PMBUS_VOUT_UV_FAULT_RESPONSE 0x45
|
||||
#define PMBUS_IOUT_OC_FAULT_LIMIT 0x46
|
||||
#define PMBUS_IOUT_OC_FAULT_RESPONSE 0x47
|
||||
#define PMBUS_IOUT_OC_WARN_LIMIT 0x4A
|
||||
#define PMBUS_OT_FAULT_LIMIT 0x4F
|
||||
#define PMBUS_OT_FAULT_RESPONSE 0x50
|
||||
#define PMBUS_OT_WARN_LIMIT 0x51
|
||||
#define PMBUS_VIN_OV_FAULT_LIMIT 0x55
|
||||
#define PMBUS_VIN_OV_FAULT_RESPONSE 0x56
|
||||
#define PMBUS_VIN_UV_WARN_LIMIT 0x58
|
||||
#define PMBUS_TON_DELAY 0x60
|
||||
#define PMBUS_TON_RISE 0x61
|
||||
#define PMBUS_TON_MAX_FAULT_LIMIT 0x62
|
||||
#define PMBUS_TON_MAX_FAULT_RESPONSE 0x63
|
||||
#define PMBUS_TOFF_DELAY 0x64
|
||||
#define PMBUS_TOFF_FALL 0x65
|
||||
#define PMBUS_STATUS_BYTE 0x78
|
||||
#define PMBUS_STATUS_WORD 0x79
|
||||
#define PMBUS_STATUS_VOUT 0x7A
|
||||
#define PMBUS_STATUS_IOUT 0x7B
|
||||
#define PMBUS_STATUS_INPUT 0x7C
|
||||
#define PMBUS_STATUS_TEMPERATURE 0x7D
|
||||
#define PMBUS_STATUS_CML 0x7E
|
||||
#define PMBUS_STATUS_OTHER 0x7F
|
||||
#define PMBUS_STATUS_MFR_SPECIFIC 0x80
|
||||
#define PMBUS_READ_VIN 0x88
|
||||
#define PMBUS_READ_VOUT 0x8B
|
||||
#define PMBUS_READ_IOUT 0x8C
|
||||
#define PMBUS_READ_TEMPERATURE_1 0x8D
|
||||
#define PMBUS_PMBUS_REVISION 0x98
|
||||
#define PMBUS_MFR_ID 0x99
|
||||
#define PMBUS_MFR_MODEL 0x9A
|
||||
#define PMBUS_MFR_REVISION 0x9B
|
||||
#define PMBUS_MFR_SERIAL 0x9E
|
||||
#define PMBUS_IC_DEVICE_ID 0xAD
|
||||
#define PMBUS_IC_DEVICE_REV 0xAE
|
||||
#define PMBUS_USER_DATA_01 0xB1
|
||||
#define PMBUS_USER_DATA_05 0xB5
|
||||
|
||||
/* Manufacturer Specific PMBUS commands used by the TPS546D24A */
|
||||
#define PMBUS_TELEMETRY_CFG 0xD0
|
||||
#define PMBUS_READ_ALL 0xDA
|
||||
#define PMBUS_STATUS_ALL 0xDB
|
||||
#define PMBUS_SYNC_CONFIG 0xE4
|
||||
#define PMBUS_STACK_CONFIG 0xEC
|
||||
#define PMBUS_MISC_OPTIONS 0xED
|
||||
#define PMBUS_PIN_DETECT_OVERRIDE 0xEE
|
||||
#define PMBUS_SLAVE_ADDRESS 0xEF
|
||||
#define PMBUS_NVM_CHECKSUM 0xF0
|
||||
#define PMBUS_SIMULATE_FAULTS 0xF1
|
||||
#define PMBUS_FUSION_ID0 0xFC
|
||||
#define PMBUS_FUSION_ID1 0xFD
|
Loading…
x
Reference in New Issue
Block a user