Segun lo leido del datasheet. El protocolo para grabar no es:
Start - Control - DireccionH - DireccionL - DatoAGuardar - Stop
En tu codigo le falta el stop, supuestamente el STOP es el que hace que se grabe.
The 24LC16B acknowledges again and the master generates a Stop condition. This initiates the internal write cycle and, during this time, the 24LC16B will not generate Acknowledge signals
En tu codigo le faltaria el dato.
Luego tambien tenes que para leer de forma Random tenes que hacer:
Start - Control(W) - DireccionH - DireccionL - Start - Control(R) - AcaDatoArecibir - NAK - Stop
Esto al menos en el primer dato, luego si son secuenciales podes seguir enviando AK porque ya sabes donde esta la direccion de memoria y seguirias leyendo de forma secuencial. Ejemplo leer 2 de forma Random
Start - Control(W) - DireccionH - DireccionL - Start - Control(R) - AcaDatoArecibir1 - AK - AcaDatoArecibir2 - NAK - Stop