Desbloquear el Menú Oculto de Timings de Memoria en BIOS X99 / LGA 2011-3 Chino

Una de las quejas más comunes sobre las tarjetas madre chinas LGA2011‑3/X99 es la falta de controles manuales de timings de memoria en la BIOS. La funcionalidad casi siempre está presente dentro del firmware — simplemente está oculta e inaccesible desde los menús normales de Setup. Esta guía te explica paso a paso cómo exponerla.

Esta es la versión en texto de la guía en video de Koshak, disponible en este enlace (YouTube).

⚠️ Aviso de responsabilidad total. Como siempre, los resultados no están garantizados y tú asumes toda la responsabilidad por lo que hagas con tu propia tarjeta.

Ten en cuenta que si algo sale mal, flashear una BIOS defectuosa muy probablemente va a brickear la tarjeta; la recuperación solo será posible con un programador de hardware — no existe una solución por software una vez que se flashea una imagen defectuosa.

Herramienta esencial
CH341A
¿Trabajas con mods de BIOS? El CH341A es vital. Permite escribir en chips SPI del BIOS и recuperar dispositivos 'brickeados'.
Como afiliado de Amazon, percibo dinero con las compras elegibles.

Para quién es esta guía

Tarjetas madre que usan firmware AMI Aptio V en placas X99 (LGA2011‑3) chinas — Huananzhi, Jingsha, Kllisre, Machinist, Qiyida, JGINYUE, y las muchas versiones renombradas/clonadas que comparten las mismas bases de firmware. Muchas de estas tarjetas parten de un puñado de imágenes de BIOS base, razón por la cual los mismos QuestionIDs y patrones hexadecimales exactos de esta guía (0xC05/0xC06, 6710/9000) aparecen en tarjetas de marcas completamente distintas.

Por qué funciona esto

En el firmware AMI Aptio V, la interfaz de “Setup” de la BIOS es un conjunto de formularios descritos mediante IFR (Internal Forms Representation) dentro del módulo Setup/Platform. Cada control tiene un QuestionID, y AMITSESetupdata le indica al Text Setup Engine (TSE) qué formularios son visibles y cómo están enlazados dentro del árbol de menús. En muchas tarjetas X99 chinas, el formulario “Memory Timings & Voltage Override” existe en el firmware, pero simplemente no está enlazado a ningún menú visible (y/o su acceso está restringido), por lo que no se puede llegar a él.

  • Esta guía extrae los módulos relevantes (Platform y AMITSESetupdata), lee el IFR para encontrar los QuestionIDs correctos, y edita algunos identificadores de 16 bits para que el formulario oculto quede enlazado bajo “Memory Configuration”.
  • No estamos agregando código nuevo; estamos exponiendo un formulario existente al cambiar la forma en que el menú enlaza y muestra ese formulario. Por eso funciona en muchas bases de BIOS similares, siempre y cuando localices los IDs correctos para tu compilación.
  • Los IDs y offsets exactos varían entre revisiones de BIOS. Por eso el proceso comienza con el análisis del IFR para descubrir tus propios QuestionIDs antes de parchear patrones de bytes en AMITSESetupdata y Platform.

Antes de empezar

  1. Respalda tu imagen completa de BIOS (16 MB) usando cualquier método compatible con tu tarjeta, ya sea por software (Intel FPT, AFUWIN, AFUDOS) o con un programador SPI externo.
  2. Confirma tu método de flasheo de antemano. Asegúrate de poder tanto leer como escribir en tu chip con la herramienta que elijas antes de aplicar cualquier modificación.
  3. Descarga el software necesario.

Software necesario

Herramienta Propósito Versión usada en esta guía
AMIBCP 5 Navegar el árbol de menús de Setup, verificar el estado antes/después 5.02.0034
Editor hexadecimal Parchear los módulos extraídos HxD (cualquier editor hexadecimal confiable funciona)
UEFITool Extraer/reemplazar módulos dentro de la imagen de BIOS 0.28.0
IFRExtractor Volcar los formularios IFR a texto, encontrar los QuestionIDs 0.3.6

Puedes encontrar todo el software necesario en este canal de Telegram.

Paso 1 — Confirma que el menú de timings de memoria existe, pero está oculto

amibcp 1

 

En AmiBCP, abre tu volcado de BIOS, expande el nodo “IntelRCSetup” y verás el patrón típico del firmware chino: el elemento “Memory Timings & Voltage Override” es visible bajo “IntelRCSetup”, pero el acceso a él está bloqueado — no se puede llegar a él desde el menú principal.

Nuestra tarea será mover “Memory Timings & Voltage Override” al menú “Memory Configuration”.

Paso 2 — Extrae los dos módulos con UEFITool

Abre tu volcado de BIOS en UEFITool. Nos interesan dos módulos: “Platform” y “AMITSESetupdata”. Ambos módulos están dentro de “Intel Image” > “Bios Region” > la penúltima rama expandible.

Algunas versiones de UEFITool/firmware de tarjeta etiquetan la rama de nivel superior como “UEFI image” en lugar de “Intel Image”. Si no ves “Intel Image”, busca “UEFI image” — es lo mismo con otra etiqueta.

Encuentra el módulo “Platform”, expándelo hasta llegar a “PE32 image”. Después haz clic derecho y elige “Extract body”. Guarda el archivo como “pl.bin”.

uefitool 4

 

Encuentra el módulo “AMITSESetupdata”, expándelo hasta llegar a “Freeform subtype GUID”. Después haz clic derecho y elige “Extract body”. Guarda el archivo como “fe.bin”.

uefitool 5

 

Es mejor no cerrar UEFITool — lo necesitaremos de nuevo en el Paso 5.

Paso 3 — Encuentra tus QuestionIDs con IFRExtractor

Abre IFRExtractor y carga el archivo “pl.bin” que guardaste en el paso anterior. Después de presionar “Extract”, la herramienta guardará un archivo de texto llamado “pl IFR.txt” en la misma carpeta.

Ábrelo y busca la cadena “memory frequency”. Puede aparecer varias veces en el archivo; nos interesa la primera aparición.

Anota el valor de QuestionID (en nuestro ejemplo, es 0xC05). También vamos a necesitar el siguiente “QuestionID”, en nuestro caso 0xC06.

notepad 1 1

Si en tu tarjeta también ves 0xC05 y 0xC06, lo más probable es que estés en una de las bases de BIOS chinas comunes (compartida por muchas tarjetas derivadas de Jingsha/Kllisre) — y el resto de esta guía debería aplicar casi byte por byte.

Cómo convertir el QuestionID al patrón hexadecimal que vas a buscar

Necesitas cada QuestionID como una cadena hexadecimal de 4 dígitos con los bytes invertidos:

  1. Rellena el QuestionID hasta 4 dígitos hexadecimales (cero a la izquierda si es necesario): 0xC05 → 0C05.
  2. Divide en pares de bytes: 0C 05.
  3. Invierte el orden de los bytes: 05 0C.
  4. Concaténalos: 050C.

Algunos ejemplos para mayor claridad: 0xC36 → 360C; 0xC78 → 780C; 0xCB3 → B30C.

Usaremos una tabla para llevar el control de estos valores — asegúrate de crear tu propia tabla y llenarla con los IDs exactos que descubras en tu BIOS, para no confundirte más adelante.

Celda Qué es Valor
V1 QuestionID #1 (0xC05, convertido) 050C
V2 QuestionID #2 (0xC06, convertido) 060C

Paso 4 — Parchea ambos módulos en un editor hexadecimal

Abre los dos módulos que guardaste antes: pl.bin y fe.bin.

4a. Primero parchea fe.bin

Busca el valor hexadecimal “81000000”.

Observa los 12 caracteres a la derecha del valor encontrado. En nuestro caso, son 6710, 9000 y 1D00 (tus valores pueden ser diferentes).

Registra 6710 en tu tabla de seguimiento. Junto a él, agrega 6910—calculado sumando 0x200 a 6710. También necesitarás registrar 9000 (sin necesidad de ningún cálculo aquí) y 1D00 para los siguientes pasos.

💡 Cómo funciona la suma hexadecimal (+0x200)

El sistema hexadecimal (base 16) usa los números 0–9 y las letras A–F. Sumar 0x200 simplemente incrementa en 2 el segundo dígito contando desde la izquierda:

  • 6710 + 200 = 6910 (7 + 2 = 9)
  • 6D10 + 200 = 6F10 (D + 2 = F, donde D=13 y F=15)

📌 Consejo: Si tienes dudas, abre la Calculadora de Windows, cámbiala al modo Programador, selecciona HEX, y haz la suma ahí.

Los mismos datos en forma de tabla (valores V1–V2 provenientes del Paso 3, más los nuevos de este paso):

Celda Qué es Valor
V1 QuestionID #1 (0xC05, convertido) 050C
V2 QuestionID #2 (0xC06, convertido) 060C
V3 Valor encontrado en fe.bin (a la derecha de 81000000) 6710
V4 V3 + 0x200 6910
V5 Segundo valor encontrado en fe.bin (a la derecha de 81000000) 9000
V6 Tercer valor encontrado en fe.bin (a la derecha de 81000000) 1D00

Regresa al editor hexadecimal. Ahora busca el valor guardado previamente 050C (Celda V1), pero primero conviértelo a 0000050C0000 agregando cuatro ceros al inicio y cuatro ceros al final.

 

Ahora observa con cuidado la imagen de abajo y haz que las áreas junto al valor hexadecimal encontrado coincidan exactamente con ella. Ten en cuenta que los valores resaltados en rojo están tomados de tu tabla, mientras que los valores resaltados en azul deben configurarse exactamente como en la captura, sin importar tu tarjeta.

 

Ahora haz la misma operación para el valor 060C (Celda V2), que también convertimos a 0000060C0000.

 

 

Después vuelve a buscar 0000050C0000 (Celda V1 con cuatro ceros antes y cuatro ceros después) de nuevo. Esta vez, presta atención a los cuatro caracteres resaltados con un recuadro verde: 8A00. Agrégalos a la tabla.

 

Celda Qué es Valor
V1 QuestionID #1 (0xC05, convertido) 050C
V2 QuestionID #2 (0xC06, convertido) 060C
V3 Valor encontrado en fe.bin (a la derecha de 81000000) 6710
V4 V3 + 0x200 6910
V5 Segundo valor encontrado en fe.bin (a la derecha de 81000000) 9000
V6 Tercer valor encontrado en fe.bin (a la derecha de 81000000) 1D00
V7 Valor del recuadro verde (encontrado buscando la Celda V1 con cuatro ceros antes y cuatro ceros después) 8A00

 

¿Recuerdas que buscamos el valor hexadecimal “81000000”? Hazlo de nuevo.

A la derecha del valor encontrado, seguimos teniendo 6710 (Celda V3), 9000 (Celda V5) y 1D00 (Celda V6). Reemplaza 1D00 (Celda V6) con 8A00 (Celda V7).

Con esto concluyen las modificaciones de “fe.bin”. Guarda tus cambios y continúa con “pl.bin”.

4b. Parchea pl.bin

Busca el valor hexadecimal “050C” (Celda V1). Aparecerá muchas veces en el archivo; necesitamos la instancia que esté precedida por caracteres similares a nuestro “67106910” (Celda V3 y V4).

hex 9 1

Ten en cuenta que es poco probable que veas estos valores exactos. Debes seleccionar la entrada que más se parezca a tus propios valores extraídos de tu tabla.

Después de buscar un poco, encontramos la sección correcta:

Reemplaza los caracteres con “67106910” (Celda V3 y V4):

Ahora repite todo el procedimiento de búsqueda y reemplazo, pero para el valor hexadecimal “060C” (Celda V2):

Esto es todo para el archivo “pl.bin”. Guarda tus cambios.

Paso 5 — Reinserta los módulos parcheados con UEFITool

Encuentra de nuevo los dos módulos: “Platform” y “AMITSESetupdata”.
Para el módulo “Platform”, expándelo hasta “PE32 image”. Después haz clic derecho y elige “Replace body”. Selecciona el archivo “pl.bin” recién modificado.

uefitool 6

Para el módulo “AMITSESetupdata”, expándelo hasta “Freeform subtype GUID”. Después haz clic derecho y elige “Replace body”. Selecciona el archivo “fe.bin” recién modificado.

uefitool 7

Ahora guarda tu BIOS modificada con un nombre nuevo (File > Save image file) — no sobrescribas tu volcado original.

Paso 6 — Verifica en AMIBCP antes de flashear

Abre la BIOS que acabas de guardar y asegúrate de que el menú de control de timings de memoria haya aparecido y sea accesible desde el elemento “Memory Configuration”.
amibcp 2

Eso es todo. Lo único que queda es flashear tu BIOS modificada usando cualquier método adecuado para tu tarjeta.

Verificaciones posteriores al flasheo

  1. Apaga por completo el equipo, limpia el CMOS (jumper o batería), luego enciéndelo y entra a la BIOS.
  2. Carga los valores óptimos por defecto (Optimized Defaults), guarda y sal (Save & Exit), después vuelve a entrar a la BIOS.
  3. Navega a Advanced → Memory Configuration y verifica que “Memory Timings & Voltage Override” ahora sea visible y seleccionable.
  4. Ábrelo y confirma que los campos de timings (por ejemplo, tCL, tRCD, tRP, tRAS, Command Rate) estén presentes y sean editables, no solo un menú desplegable de frecuencia.
  5. Si el menú no aparece o entra a una página en blanco, regresa a tu BIOS de respaldo y vuelve a revisar los IDs/offsets que editaste (consulta la sección de Solución de problemas más abajo).
  6. Después de aplicar cualquier timing personalizado y guardar los cambios en la BIOS, arranca el sistema operativo y verifica si tus nuevos valores realmente se aplicaron usando herramientas como CPU-Z (pestaña Memory) o AIDA64. Una vez verificado, corre una prueba de estabilidad para asegurarte de que tu sistema esté completamente estable.

Solución de problemas

No encuentro un módulo “Platform” en UEFITool.
Revisa bajo una rama llamada “UEFI image” en lugar de “Intel Image” — algunas combinaciones de firmware/UEFITool usan esa etiqueta en su lugar. Si ninguna existe, es posible que tu tarjeta use una base de firmware diferente a la que esta guía tiene como objetivo.

El menú aparece después de flashear, pero solo muestra un menú desplegable de frecuencia, sin timings reales.
Probablemente enlazaste el formulario equivocado. Regresa al Paso 3 y confirma que usaste la primera coincidencia de “memory frequency” en el volcado del IFR.

AMIBCP muestra la pestaña de Setup Configuration como faltante/corrupta después de parchear.
Esto indica una edición hexadecimal desalineada — casi siempre un conteo incorrecto de bytes al rellenar/reemplazar uno de los patrones de búsqueda. Vuelve a hacer el Paso 4 partiendo de una copia nueva de los módulos extraídos, en lugar de intentar parchear sobre un archivo parcialmente editado.

Los valores encontrados en mi tarjeta no coinciden con los de las capturas de pantalla (por ejemplo, 6D10 en lugar de 6710).
Es normal — estos valores son específicos de tu compilación de BIOS. Usa lo que tu editor hexadecimal realmente encuentre, aplica la regla de +0x200 para obtener el segundo valor, y usa tus propios valores durante el resto de la guía en lugar de los del ejemplo.

El sistema no completa el POST después de flashear.
Limpia el CMOS de nuevo (jumper o retirando la batería, desconexión total de energía por un minuto). Si sigue sin arrancar, restaura tu respaldo con un programador de hardware (por ejemplo, CH341A) — esta es la única vía de recuperación una vez que la tarjeta está bloqueada (brickeada).

Créditos y lecturas adicionales