diff --git a/components/bm1397/bm1397.c b/components/bm1397/bm1397.c index 312ce39e..7aa30e22 100644 --- a/components/bm1397/bm1397.c +++ b/components/bm1397/bm1397.c @@ -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); } diff --git a/components/bm1397/include/bm1397.h b/components/bm1397/include/bm1397.h index bb61933b..31454fbd 100644 --- a/components/bm1397/include/bm1397.h +++ b/components/bm1397/include/bm1397.h @@ -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_ */ \ No newline at end of file diff --git a/components/bm1397/include/serial.h b/components/bm1397/include/serial.h index 0a04c5a0..8f5a90c4 100644 --- a/components/bm1397/include/serial.h +++ b/components/bm1397/include/serial.h @@ -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); diff --git a/components/bm1397/serial.c b/components/bm1397/serial.c index 21752a2c..2e25876d 100644 --- a/components/bm1397/serial.c +++ b/components/bm1397/serial.c @@ -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(); - } -} \ No newline at end of file diff --git a/main/miner.c b/main/miner.c index bb553a5e..93ce5911 100755 --- a/main/miner.c +++ b/main/miner.c @@ -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(¶ms, 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);