increase baud to 3.1Mbps

This commit is contained in:
Ben 2023-06-03 22:42:28 -04:00 committed by johnny9
parent 2a830b28c6
commit aa9e278f18
5 changed files with 20 additions and 47 deletions

View File

@ -139,15 +139,22 @@ void send_init(void) {
unsigned char init6[9] = {0x00, 0x28, 0x06, 0x00, 0x00, 0x0F}; //init6 - fast_uart_configuration
send_BM1397((TYPE_CMD | GROUP_ALL | CMD_WRITE), init6, 6, false);
unsigned char baudrate[9] = {0x00, 0x18, 0x00, 0x00, 0x7A, 0x31}; //baudrate - misc_control
//unsigned char baudrate[9] = {0x00, 0x18, 0x00, 0x00, 0x70, 0x30}; //baudrate - misc_control
send_BM1397((TYPE_CMD | GROUP_ALL | CMD_WRITE), baudrate, 6, false);
set_default_baud();
send_hash_frequency(BM1397_FREQUENCY);
}
// Baud formula = 25M/((denominator+1)*8)
// The denominator is 5 bits found in the misc_control (bits 9-13)
void set_default_baud(void){
//default divider of 26 (11010) for 115,749
unsigned char baudrate[9] = {0x00, 0x18, 0x00, 0x00, 0b01111010, 0b00110001}; //baudrate - misc_control
send_BM1397((TYPE_CMD | GROUP_ALL | CMD_WRITE), baudrate, 6, false);
}
void set_bm1397_max_baud(void){
unsigned char baudrate[9] = {0x00, 0x18, 0x00, 0x00, 0x70, 0x30}; //baudrate - misc_control
// divider of 0 for 3,125,000
unsigned char baudrate[9] = { 0x00, 0x18, 0x00, 0x00, 0b01100000, 0b00110001 };; //baudrate - misc_control
send_BM1397((TYPE_CMD | GROUP_ALL | CMD_WRITE), baudrate, 6, false);
}

View File

@ -70,5 +70,6 @@ void set_job_difficulty_mask(int);
unsigned char reverseBits(unsigned char num);
int largestPowerOfTwo(int num);
void set_bm1397_max_baud(void);
void set_default_baud(void);
#endif /* BM1397_H_ */

View File

@ -3,7 +3,6 @@
#define CHUNK_SIZE 1024
void SerialTask(void *arg);
int send_serial(uint8_t *, int, bool);
void init_serial(void);
void debug_serial_rx(void);

View File

@ -36,8 +36,8 @@ void init_serial(void) {
uart_set_pin(UART_NUM_1, ECHO_TEST_TXD, ECHO_TEST_RXD, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
//Install UART driver (we don't need an event queue here)
//In this example we don't even use a buffer for sending data.
uart_driver_install(UART_NUM_1, BUF_SIZE * 2, 0, 0, NULL, 0);
// Added buffers so uart_write_bytes returns immediately
uart_driver_install(UART_NUM_1, BUF_SIZE * 2, BUF_SIZE * 2, 0, NULL, 0);
}
void set_max_baud(void){
@ -88,34 +88,3 @@ void debug_serial_rx(void) {
void clear_serial_buffer(void) {
uart_flush(UART_NUM_1);
}
void SerialTask(void *arg) {
init_serial();
init_BM1397();
//reset the bm1397
reset_BM1397();
//send the init command
send_read_address();
//read back response
debug_serial_rx();
//send the init commands
send_init();
//setup a nice test job
//this should find nonce 258a8b34 @ 50
// uint8_t work1[146] = {0x50, 0x04, 0x00, 0x00, 0x00, 0x00, 0xB2, 0xE0, 0x05, 0x17, 0x24, 0x27, 0x36, 0x64, 0xF5, 0x63, 0x54, 0xDA, 0x33, 0xE2, 0xDE, 0x8F, 0xFC, 0xDD, 0x48, 0x96, 0xE1, 0x36, 0xD7, 0x03, 0x5C, 0xBB, 0x5F, 0xA3, 0xFD, 0x5F, 0x68, 0x39, 0xAA, 0xA4, 0xBE, 0x10, 0x9C, 0x7E, 0x00, 0x78, 0x4E, 0x69, 0x34, 0xAC, 0x84, 0x05, 0x65, 0xAE, 0x32, 0x58, 0x09, 0xBB, 0xEA, 0x44, 0x6D, 0x61, 0x57, 0xF2, 0x61, 0xBE, 0x58, 0x33, 0xFA, 0xA8, 0x1D, 0x9A, 0x16, 0xBF, 0xE0, 0x82, 0x64, 0x37, 0x91, 0x15, 0xB6, 0x32, 0x93, 0xC4, 0x83, 0x42, 0xB2, 0xE6, 0x63, 0x96, 0xE0, 0x25, 0x02, 0x9E, 0x01, 0x76, 0xD9, 0x24, 0x0F, 0xD3, 0x57, 0x27, 0x38, 0xE2, 0x65, 0xDD, 0xCD, 0xBD, 0x01, 0xE0, 0x61, 0xFB, 0x57, 0x5D, 0xD6, 0xAB, 0xAE, 0xFD, 0x6B, 0x5F, 0x77, 0x74, 0x5C, 0x64, 0x2C, 0xF3, 0x34, 0x2F, 0x82, 0xB3, 0xCC, 0xC1, 0x2D, 0x84, 0xDD, 0xCB, 0x10, 0xDE, 0x5E, 0xE0, 0xCD, 0x9C, 0x5B, 0x65, 0x92, 0xBB};
// struct job_packet test_job;
// memcpy((uint8_t *)&test_job, work1, 146);
// send_work(&test_job);
while (1) {
debug_serial_rx();
}
}

View File

@ -89,10 +89,8 @@ static void ASIC_task(void * pvParameters)
uint32_t prev_nonce = 0;
// TODO
// set_max_baud();
set_max_baud();
ESP_LOGI(TAG, "Mining!");
while (1) {
bm_job * next_bm_job = (bm_job *) queue_dequeue(&ASIC_jobs_queue);
struct job_packet job;
@ -176,6 +174,7 @@ static void ASIC_task(void * pvParameters)
}
}
static void create_jobs_task(void * pvParameters)
{
while (1) {
@ -200,12 +199,8 @@ static void create_jobs_task(void * pvParameters)
bm_job next_job = construct_bm_job(&params, merkle_root);
next_job.pool_diff = stratum_difficulty; //each job is tied to the _current_ difficulty
//ESP_LOGI(TAG, "bm_job: ");
// print_hex((uint8_t *) &next_job.target, 4, 4, "nbits: ");
// print_hex((uint8_t *) &next_job.ntime, 4, 4, "ntime: ");
// print_hex((uint8_t *) &next_job.merkle_root_end, 4, 4, "merkle root end: ");
//print_hex(next_job.midstate, 32, 32, "midstate: ");
// Check if diff is a power of 2, we can skip stuff later if it is.
next_job.pool_diff_pow2 = (stratum_difficulty != 0 && (stratum_difficulty & (stratum_difficulty - 1)) == 0);
bm_job * queued_next_job = malloc(sizeof(bm_job));
memcpy(queued_next_job, &next_job, sizeof(bm_job));
@ -327,6 +322,8 @@ static void stratum_task(void * pvParameters)
} else if (method == MINING_SET_VERSION_MASK) {
version_mask = parse_mining_set_version_mask_message(line);
//1fffe000
ESP_LOGI(TAG, "Set version mask: %08x", version_mask);
} else {
free(line);