No me parece un .hex comun, ya que el .hex tiene un formato:
https://en.wikipedia.org/wiki/Intel_HEXY si lo abris ves algo asi:
:10010000214601360121470136007EFE09D2190140
:100110002146017E17C20001FF5F16002148011928
:10012000194E79234623965778239EDA3F01B2CAA7
:100130003F0156702B5E712B722B732146013421C7
:00000001FF
EL direccionamiento de las memorias EEPROM por ejemplo del 24LC64 es de 0x0000 a 0x1FFFF , en el cual tu codigo de lectura de EEPROM tendra que enviar el valor correspondiente de direccion (13 bits de direccion) + 8 bits de comando mas, aca esta explicado al menos como acceder a esa memoria, obviamente todo va a depender de la memoria que uses.
http://ww1.microchip.com/downloads/en/DeviceDoc/21189f.pdfFinalmente lo que creo que queres crear vos es un archivo binario, el cual imagino que deberia tomartelo el soft del pickit3.
Si tenes los valores en hexadecimal podrias crear nuevamente un simple programita en python que tome de a pares de letras de un archivo y escriba el binario correspondiente en el otro archivo ( bin ). Y nuevmaente si necesitas si o si pasarlo a .hex, usas el Bin2Hex que posee MCHP con el MPLAB y le asignas las posiciones de memoria que quieras.
Suponiendo que es una imagen o audio.... debe ser algo muy tedioso... pero eso no es lo que busco.. aunque seria genial saber como se compilan esos archivos en la memoria.
Ese tema ya es muy disitnto, cada imagen y audio poseen una cabecera, y algunos incluso estan comprimidos. Sino es pasarlo previamente a hexadecimal y cargarlo a la memoria directamente. Asi ahorrarse el tiempo de computo.