Repository navigation
BM1370 measurements: sub-core versions under narrow masks, MIDSTATE_CONFIG fix/gen bits, CORE_MAILBOX reads #131
Replies: 2 comments
|
Thanks, @The1Anubis. I'll add these to the BM13xx reference. We talked about them on the 20261026 dev call. |
|
Thanks for picking this up on the dev call. For context on where it came from: I wanted to mine Litecoin Cash and MazaCoin on BM1370 boards (a NerdQAxe++ and an 8-chip NerdOCTAXE-Gamma). Those coins use version bits 16–23 for the PoW algorithm id, so they need a narrow I'm happy to run follow-up measurements on this hardware if anything would help the reference doc. The tooling can already log raw nonce responses, read every top-level register, and write One question from the dumps, after hearing the BM1370 has four internal cores/voltage sections: Could these be per-quarter counters for those four sections? If there's a test that would confirm it, such as reading them before and after a known change, I can run it. Thank you, |
Uh oh!
There was an error while loading. Please reload this page.
Measured data that may be useful for
bm13xx/REFERENCE.md. Hardware: NerdOCTAXE-Gamma, 8× BM1370 on one chain, ESP-Miner (NerdQAxePlus fork) with debug tooling that logs every raw 11-byte nonce response before any filtering and reads/writes registers at runtime. Pair statistics are counted on-device per (chip, job, rolled version, nonce). Ticket difficulty lowered to 512 for sampling; all pool shares were accepted throughout.1. Sub-core version assignment under a narrow version mask
subcore_id= low nibble of the response's job-ID byte. Rolled version = response version field << 13.0x0007(0xA4 low 16)0xFFFFExample pair, identical except the sub-core nibble and CRC:
So the version counter wraps within the mask, and with fewer than 4 rollable bits the 16 sub-cores repeat each other's work (16 / 2^bits duplication). Measured unique-work rate with 3 bits: ~46% of nominal once job supply isn't limiting.
Relevance to "Version" partitioning across chains: narrowing a BM1370 chain's mask below 4 bits wastes sub-cores this way. Partitioning would need to keep ≥4 rollable bits per chain (or fix bits outside 13–16).
2. MIDSTATE_CONFIG (0xA4) upper bits
Baseline write
0x90000007, reads back0x80000007. Each value held ~90 s, judged by sub-core pairing and slot→version mapping:0x800000070x8…,0x9…,0xA…,0xB…)0x800000070xC/D/E/F…)0xC00000070x10000007)0x00000007, chips 1–7 no reply0x900000073. CORE_MAILBOX (0x3C) reads
Posting a per-core read request (all=0, wr=0) broadcast to all chips, then reading 0x3C:
0x00000D00(core 0, reg 0x0D)0x00004D000x00000000(core 0, reg 0x00)0x000040000x00000200(core 0, reg 0x02)0x00004200Bit 14 sets (first poll, <65 ms) and core/reg are echoed, but the value byte is always 0. A full dump of every top-level address right after a read shows no other register picking up the value.
4. Other register observations
0x0007vs0xFFFF: only 0xA4 and 0x10 differ (the latter written by firmware).0x000701F0, reads0x00070000while hashing (bits 8–4 read clear).0x27 = 0x00060000,0xD1 = 0x0000FFFF,0xD2 = 0xFFFFFFFF,0xD5 = 0x00000040,0xD9 = 0x33333333;0x88–0x8Bare four counters of similar magnitude that increase with hashing (alongside 0x8C and 0x90);0x40holds per-chip bit patterns that change between reads (status-like).All reactions