Files
OpenEPaperLink/ESP32_AP-Flasher/include/swd.h
2023-07-22 00:02:33 +02:00

83 lines
2.0 KiB
C++

#include <Arduino.h>
#include <stdint.h>
/*
Copyright (c) 2021 Aaron Christophel ATCnetz.de
SPDX-License-Identifier: GPL-3.0-or-later
*/
#pragma once
class swd {
public:
swd(uint8_t swdio, uint8_t swdclk);
uint32_t swd_Init();
bool AP_Write(unsigned addr, uint32_t data);
bool AP_Read(unsigned addr, uint32_t &data);
bool DP_Write(unsigned addr, uint32_t data);
bool DP_Read(unsigned addr, uint32_t &data);
uint32_t idCode;
protected:
void swd_Begin();
void swd_Direction(bool WorR);
bool swd_Transfer(unsigned port_address, bool APorDP, bool RorW, uint32_t &data);
bool calculate_Parity(uint32_t in_data);
void swd_Write(uint32_t in_data, uint8_t bits);
uint32_t swd_Read(uint8_t bits);
uint8_t swdio_pin;
uint8_t swdclk_pin;
bool cur_swd_direction = 0;
};
struct nrf_info_struct {
int flash_size;
uint32_t connected;
uint32_t codepage_size;
uint32_t codesize;
uint32_t config_id;
uint32_t device_id0;
uint32_t device_id1;
uint32_t info_part;
uint32_t info_variant;
uint32_t info_package;
uint16_t sd_info_area;
uint32_t ucir_lock;
};
class nrfswd : protected swd {
public:
nrfswd(uint8_t swdio, uint8_t swdclk);
bool init();
uint8_t nrf_read_bank(uint32_t address, uint32_t buffer[], int size);
uint8_t nrf_write_bank(uint32_t address, uint32_t buffer[], int size);
uint8_t erase_all_flash();
uint8_t erase_uicr();
uint8_t erase_page(uint32_t page);
void nrf_soft_reset();
bool isConnected = false;
bool isLocked = false;
bool showDebug = true;
struct nrf_info_struct nrf_info;
protected:
uint32_t nrf_read_port(bool APorDP, uint8_t address);
void nrf_write_port(bool APorDP, uint8_t address, uint32_t value);
void nrf_abort_all();
void nrf_halt();
void nrf_port_selection(bool new_port);
bool nrf_read_lock_state();
void nrf_read_ufcr();
void write_register(uint32_t address, uint32_t value);
uint32_t read_register(uint32_t address);
};