The entire 64byte CGRAM gets dumped at once every frame. The characters already on the display are updated immediately but it’s fast enough that it isn’t really noticeable. The update is more visible with the vertical scroll but still looks smooth. I wish there were more than 8 characters.
Everything is on the wiki now.
I usually use SPI with these so I just added it as that. The init, high level and low level sections can replaced with whatever driver method is used. Only the SetCGRAM function would need adjusted for the specific send command/data method.