Confirmed it's incorrect, forgot to set back to DDRAM after write.
Same code as an example but converted for nrf52.
uint8_t *c = &characters[0];
uint8_t x = 0;
while (c < (&characters[0] + sizeof(characters))) {
i = 0;
dmaBuffer.transfer[i++] = INSTRUCTION_COMMAND;
dmaBuffer.transfer[i++] = COMMAND_ADDRESS_CGRAM | x << 3;
txWait(i);
for(uint8_t j = 0; j < 8; j++) {
i = 0;
dmaBuffer.transfer[i++] = INSTRUCTION_DATA;
dmaBuffer.transfer[i++] = *c;
c++;
txWait(i);
}
i = 0;
dmaBuffer.transfer[i++] = INSTRUCTION_COMMAND;
dmaBuffer.transfer[i++] = COMMAND_ADDRESS_DDRAM;
txWait(i);
x++;
}