mirror of
https://github.com/Derisis13/memdump-fw.git
synced 2025-12-07 04:02:48 +01:00
feature: implemented i2c dumping
todo: spi, d28, d32 read & write, i2c write todo: invalid state handling
This commit is contained in:
@@ -60,6 +60,16 @@ void Error_Handler(void);
|
|||||||
|
|
||||||
/* USER CODE BEGIN EFP */
|
/* USER CODE BEGIN EFP */
|
||||||
|
|
||||||
|
void i2c_dump(uint16_t dev_address, uint16_t capacity);
|
||||||
|
void spi_dump(uint16_t capacity);
|
||||||
|
void d28_dump(uint16_t capacity);
|
||||||
|
void d32_dump(uint16_t capacity);
|
||||||
|
|
||||||
|
void i2c_write(uint16_t dev_address, uint16_t capacity);
|
||||||
|
void spi_write(uint16_t capacity);
|
||||||
|
void d28_write(uint16_t capacity);
|
||||||
|
void d32_write(uint16_t capacity);
|
||||||
|
|
||||||
/* USER CODE END EFP */
|
/* USER CODE END EFP */
|
||||||
|
|
||||||
/* Private defines -----------------------------------------------------------*/
|
/* Private defines -----------------------------------------------------------*/
|
||||||
|
|||||||
@@ -65,6 +65,33 @@ extern uint8_t CDC_Transmit_FS(uint8_t *Buf, uint16_t Len);
|
|||||||
/* Private user code ---------------------------------------------------------*/
|
/* Private user code ---------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN 0 */
|
/* USER CODE BEGIN 0 */
|
||||||
|
|
||||||
|
/* -----------------------------------------------------------------------------
|
||||||
|
* convert a hex to ascii string
|
||||||
|
* input is a byte array (binary), output is a character array (str)
|
||||||
|
* len is the number of bytes to convert, str needs to be at least 2x as big
|
||||||
|
* -------------------------------------------------------------------------- */
|
||||||
|
void hex_to_ascii (const uint8_t *binary, char *str, uint16_t len) {
|
||||||
|
for (uint16_t i = 0; i < len; ++i) {
|
||||||
|
uint8_t low = binary [i] & 0x0f;
|
||||||
|
uint8_t high = binary [i] >> 4;
|
||||||
|
str [2 * i] = (low > 0x9) ? low + '0' : low - 0xA + 'A';
|
||||||
|
str [2 * i + 1] = (high > 0x9) ? high + '0' : high - 0xA + 'A';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void i2c_dump(uint16_t dev_address, uint16_t capacity) {
|
||||||
|
const uint16_t bsize = 512;
|
||||||
|
char tx_buff [bsize * 2];
|
||||||
|
uint8_t read_buff [bsize];
|
||||||
|
for (uint16_t i = 0; i < capacity; i += bsize) {
|
||||||
|
HAL_I2C_Mem_Read(&hi2c1, dev_address, i, capacity, read_buff, bsize, 1000);
|
||||||
|
hex_to_ascii(read_buff, tx_buff, bsize);
|
||||||
|
CDC_Transmit_FS((uint8_t *) tx_buff, bsize * 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// todo spi, d28, d32 read & write, i2c write
|
||||||
|
|
||||||
/* USER CODE END 0 */
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -110,6 +137,7 @@ int main(void)
|
|||||||
|
|
||||||
switch (st) {
|
switch (st) {
|
||||||
case read_i2c:
|
case read_i2c:
|
||||||
|
i2c_dump(i2c_address, limit_address);
|
||||||
st = run;
|
st = run;
|
||||||
break;
|
break;
|
||||||
case read_spi:
|
case read_spi:
|
||||||
|
|||||||
Reference in New Issue
Block a user