viernes, 25 de noviembre de 2016

Como cambiar el CID en una Samsung Evo+

 1.1 Hardware y software:

  • Portátil con lector de tarjeta SD interno conectado a un bus IDE o PCI. NO sirven lectores USB internos o externos. También se puede usar un telefono o tablet android con lector de SD y con acceso ROOT.
  • Tarjeta Samsung Evo+ con CID cambiable.
  • Programa evoplus_cid que se descarga de: https://github.com/raburton/evoplus_cid
  • Si se usa un portátil necesitamos tener instalada una distribución linux de 64bits, aunque también sirve perfectamente un live disc, o un usb (www.slax.org).


Nota 1: No todas las Samsung Evo+ sirven, en 32GB estos son los modelos que funcionan:
MB-SC32D/EU
MB-MC32DA/EU
y en 64GB aparentemente son todos los modelos.

Nota 2: Según parece todas las tarjetas que se venden como Samsung y que no permiten el cambio, o son modelos importadas de otros mercados, o son directamente copias falsas. Las auténticas que se venden en el mercado europeo deberían soportar todas el cambio de CID.

1.2 Que es el CID.

El CID es el Card Identification Register, un registro interno de las SD que incorpora información sobre la tarjeta como el fabricante, nº de serie, fecha defabricación, etc. Es un registro de 16 bytes de longitud, en el que 15 bytes son datos y el último byte se usa como suma de control de los anteriores.
El CID se supone que se estampa en el proceso de fabricación, y es de solo lectura, pero recientemente se han descubierto una serie de comandos internos que permiten modificarlo a nuestro antojo.


2.1 Lectura del CID

Para la obtención del CID se busca en linux el fichero en la siguiente ruta:

/sys/class/mmc_host/mmc1/mmc1:0001/cid

se copia el contenido en un fichero txt "originalCID.txt" y se guarda en el disco duro.

Es posible, dependiendo del sistema, que parte de la ruta sea distinta, en vez de "mmc1" sea "mmc0", para averiguarlo, se entra dentro de la ruta /sys/class/mmc_host/  y en ese momento se mete y se saca en el lector la sd card y actualizando con F5 vemos aparecer/desaparecer el directorio "mmcX".

El CID tiene un tamaño de 15+1 bytes (32 caracteres), siendo el último una suma de control. Es habitual que en el último byte aparezca como 00, esto es un error en la mayoria de los firmwares de los lectores de tarjetas, y que no son capaces de mostrar el último byte y por defecto muestra 00. Esto no es muy importante ya que el programa evoplus_cid admite la escritura de los 15 primeros bytes, calculando y escribiendo por nosotros el último byte.


2.2 Compilación en Ubuntu 16.04 LTS 64b

Una vez descomprimido el fichero que hemos descargado de github, debemos abrir un terminal dentro de la carpeta jni y compilar con el siguiente comando:

"gcc -o evoplus_cid evoplus_cid.c"


2.3 Cambio del CID

En el mismo terminal ejecutamos el nuevo comando compilado, que tiene la siguiente sintaxis:

./evoplus_cid <device> <new cid>

Un ejemplo sería:

"./evoplus_cid /dev/block/mmcblk1 744a454e2f412020106c6d77470104c3"

Hecho esto ya deberíamos tener el nuevo CID cambiado. Si el último byte del CID es 00 (por probable error de lectura) podremos omitirlo, y con eso el programa calculará el último byte y lo escribirá por nosotros. El comando anterior en ese caso quedaría asi:

"./evoplus_cid /dev/block/mmcblk1 744a454e2f412020106c6d77470104"

La ruta del dispositivo puede no ser "mmcblk1", pudiendo ser "mmcblk0" u otra, dependiendo del hardware y de la distribución linux empleada, asi que antes de ejecutar el comando se debería ver en el explorador de archivos si la ruta es correcta, usando la misma tecnica que en el apartado 2.1 (meter y sacar la tarjeta y ver lo que aparece en "/dev/block/")

Bye.


Fuentes:
http://richard.burtons.org/2016/07/01/changing-the-cid-on-an-sd-card/
http://richard.burtons.org/2016/07/31/cid-change-on-sd-card-update-evoplus_cid/
http://www.cameramemoryspeed.com/sd-memory-card-faq/reading-sd-card-cid-serial-psn-internal-numbers/




7 comentarios:

  1. Es la segunda vez que intento poner un comentario... a ver si esta vez se cuelga adecuadamente.

    Te quería agradecer mucho el esfuerzo de divulgación que haces con este blog.

    De momento ya he recibido la tarjeta SD Samsung plus de 64Gb y ahora mismo se esta creando un PenDrive de arranque con el SO Ubuntu 16.04, para poder utilizar el portatil de mi hijo que tiene un lictor interno. Espero que no este conectado a algun puerto USB.
    Esta noche espero poder intentar leer el CID de la tarjeta original, guardarlo y sustituir con este el de la SD Samsung.
    Por cierto.
    Mi Mac mini, tambien tiene lector de tarjetas, y me lee perfectamente todos los datos de la tarjeta. Id del fabricante, numero de serie, etc, pero lo hace en formato decimal.
    No existe alguna aplicación o comando de Unis para hacer lo mismo que en linux pero desde el Mac?

    ResponderEliminar
    Respuestas
    1. Gracias.
      Recuerda que el Ubuntu 16.04 LTS debe ser el de 64bit, si no te dara varios errores al compilar.
      La verdad que no conzco el entorno Mac, y no te puedo ayudar mucho. Aunque realmente no se necesita copiar todo el CID, solo el nº de serie, para que funcione en un Audio 20. Te dejo un link que descompone toda la información del CID, simplemente como curiosidad:

      http://goughlui.com/2014/01/02/project-read-collect-decode-sd-card-cid-register-data/

      Eliminar
  2. Tengo una sd de 32 gb made in korea pero no es evo,tambien funcionaria?

    ResponderEliminar
  3. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  4. Creo que si que funciona, pero es tan fácil como probarlo.

    Salu2!

    ResponderEliminar
  5. Como seria el procedimiento con un mobil o tablet android con root?

    ResponderEliminar