hack patinete xiaomi 4 pro 1.ra Gen en mac M2

Patinete xiaomi 4 pro

Descargo de responsabilidad:

No me hago cargo de ninguna afectación física, legal o de los componentes de software que puedan derivarse de la aplicación del contenido de este artículo. Continue bajo su propio riesgo!

Introducción:

El modelo de patinete eléctrico xiaomi 4 pro 1ra Generación incorporó nuevas prestaciones como son una mejor ergonomía, ruedas de 10″ provistas de gel autoreparable, una autonomía mejorada, etc. La controladora DRV y de la batería también han sido mejoradas sustancialmente en sus sistemas de protección, seguridad y desempeño. 

Sus espesificaciones técnicas son:

  • Marca: Xiaomi Electric Scooter
  • Modelo: 4 Pro
  • Potencia: 350W
  • Potencia nominal: 700W
  • Velocidad: 25 km/h
  • Carga máxima: 120 Kg
  • Sistema de frenos doble eABS
  • Neumáticos autosellantes sin cámara de 10″
  • Funciones:
    • Pantalla LED
    • Bluetooth v4.1
    • Compatible con Android 4.3 / iOS 9.0 o superior
    • Sube pendientes de 20º
  • Batería:
    • Capacidad: 12400 mAh/474 Wh
    • Autonomía: 55 km
  • Dimensiones: 1198 x 484 x 1240 mm
  • Peso: 16.5 Kg

En este artículo, a modo de tutorial,  voy a explicar la forma de liberar las limitaciones del software e incorpoarar mejoras en la autonomía, la potencia del motor y la duración de la batería. Debo ante todo reconocer que la idea original y el contenido están basados en el video del canal “CamiAlfa Electrónico” y es a él a quien le pertenece el crédito. La adición que hago a su excelente trabajo es llevar el procedimiento a plataformas Apple, concretamente a macOS v14+ con procesadores Apple Silicon. He realizado el proyecto en una mac Mini M2 pro con macOS Sequoia v15.1

A continuación les muestro un índice de las tareas a seguir:

Preparación del software:

  • Descarga los archivos necesarios
  • Instalación de HomeBrew
  • Instalación de Python3 con brew
  • Instalación de stLink  con brew
  • Instalación de openocd con brew
  • Ajustes en el fichero *.py de configuracion

Preparación de Hardware

Procedimiento

  • Quitar la tapa trasera del patinete
  • Retirar la placa controladora
  • Remover la silicona para descubrir los pines de programación del microcontrolador STM
  • Colocar los cables dupont en la controladora y en el módulo stlink
  • Comprobación del estado del módulo stlink
  • Conexión con openocd
  • Flasheo de la eeprom
  • Comprobación del estado de la controladora
  • Montaje en reversa de los componentes
  • Conclusiones finales

–Comencemos–

 

Instalación de HomeBrew:

 
Homebrew es un popular instalador y administrador de paquetes para macOS (y Linux). Lo utilizaremos para instalar las herramientas necesarias como openOCD y los drivers del módulo stlink v2, además de python 3. HomeBrew instala cada elemento dentro de su propio directorio y añade enlaces simbólicos para su acceso.
Para instalar Homebrew debemos abrir una ventana de terminal en macOS y ejecutar el siquiente comando:
				
					/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
				
			

Una vez instalado para comprobar su funcionamiento escriba en una ventana de terminal el comando debajo. Deberá recibir el mensaje “Your system is ready to brew”

				
					brew doctor
//Salida: Your system is ready to brew.
				
			

Instalación de Python 3

Python es un popular lenguaje de programación de propósito general que tiene la ventaja de contar con un gran número de librerias de terceros para realizar las tareas más variadas, incluyendo la conexión con openOCD y stlink v2 para la programación y depuración de microcontroladores.

Puede instalar python utilizando su instalador de serie que puede obtenerse desde su página web; o mucho más sencillo resulta instalarlo con homebrew. Para nuestro trabajo python se encarga se ejecutar el código que maneja la reprogramación del microcontrolador STM32 en la DRV del patinete eléctrico. 

Para instalar Python 3 con homebrew escriba en una ventana de la terminal en macOS:

				
					brew install python
				
			

Una  vez instalado Python para comprobar su funcionamiento primero asegúrese de que esta en la lista de elementos de homebrew como “python@3x”:

				
					brew list
//Salida:
==> Formulae
aom		fontconfig	krb5		libusb-compat	pkg-config
apr		freetds		libavif		libvmaf		python@3.13
apr-util	freetype	libdeflate	libzip		readline
argon2		gd		libftdi		little-cms2	rtmpdump
aspell		gettext		libidn2		lz4		sqlite
autoconf	giflib		libnghttp2	m4		stlink
automake	gmp		libpng		mpdecimal	tidy-html5
boost		hidapi		libpq		oniguruma	unixodbc
brotli		highway		libsodium	open-ocd	webp
ca-certificates	icu4c		libssh2		openexr		xz
capstone	icu4c@75	libtiff		openldap	zstd
cmake		imath		libtool		openssl@3
confuse		jpeg-turbo	libunistring	pcre2
curl		jpeg-xl		libusb		php

==> Casks
				
			

Luego para comprobar el funcionamiento de Python escriba en la terminal en macOS:

				
					python --version
//Salida: Python 3.xx.x

				
			

Homebrew instalará por lo regular la mayoria de las dependencias para Python pero puede comprobar si necesita alguna ejecutando el comando en la terminal:

				
					brew info python
//Salida:
....
==> Dependencies
Build: pkg-config ✔
Required: mpdecimal ✔, openssl@3 ✘, sqlite ✔, xz ✔
....
				
			

En el resultado de salida chequee el bloque de “Dependencies” y si existe alguna dependencia que no esta instalada se marcará con una cruz roja (x). En el ejemplo de arriba la dependencia openssl@3 esta marcada como ausente (la marca @3 significa la versión). Para instalar una dependencia siga el mismo procedimiento:

				
					brew install openssl
				
			

Ahora si vuelve a comprobar (brew info python) verá que todas las dependencia de Python están instaladas.

Una vez tengamos Python instalado en el sistema pasemos a instalar el resto de las heramientas.

Instalación de stlink v2 drivers

Stlink V2 es una popular herramienta para la depuración y programación de microcontroladores ARM de la serie stm8 y stm32. El módulo de programación cuenta con una interfaz de conexión de pines y USB que se conectar al computador.

Módulo stlink v2

Para nuestra trabajo, esta herramienta irá conectada, por un extremo a nuestra placa DRV del patinete y por el otro extremo al puerto USB A del computador.

Para instalar los drivers del módulo stlink v2 utilizamos el comando homebrew en la ventana de la terminal de macOS:

				
					brew install stlink
				
			

Para comprobar su correcta instalación pruebe chequear si se muestra su resumen de instalación con homebrew:

				
					brew info stlink
//Salida:
==> stlink: stable 1.8.0 (bottled), HEAD
STM32 discovery line Linux programmer
https://github.com/stlink-org/stlink
Installed
/opt/homebrew/Cellar/stlink/1.8.0 (107 files, 767KB) *
  Poured from bottle using the formulae.brew.sh API on 2024-10-23 at 16:10:39
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/s/stlink.rb
License: BSD-3-Clause
==> Dependencies
Build: cmake ✔, pkg-config ✔
Required: libusb ✔
....
				
			

Instalación de openOCD

OpenOCD (Open On-Chip Debugger) es una herramienta de software libre y de código abierto ampliamente utilizada en el mundo del desarrollo de sistemas embebidos. Su principal función es facilitar la depuración, programación y testeo de microcontroladores, especialmente aquellos basados en arquitecturas ARM.

Instalar openOCD es muy fácil con homebrew, solo ejecute el siguiente comando en una ventana de la terminal de macOS:

				
					brew install openocd
				
			

Compruebe que openocd esta correctamente instalado y todas sus dependencias:

				
					brew info openocd
//Salida:
==> open-ocd: stable 0.12.0 (bottled), HEAD
On-chip debugging, in-system programming and boundary-scan testing
https://openocd.org/
...
==> Dependencies
Build: pkg-config ✔
Required: capstone ✔, hidapi ✔, libftdi ✔, libusb ✔
...
				
			

Ajuste del fichero *.py de configuración-programación

Dentro de los archivos descargados seleccione el que lleva el nombre “flash_hack_pro4.py” y abrálo en un editor de texto. Este fichero es un programa escrito en python que se encarga de controlar el proceso de reprogramación del microcontrolador de la placa del patinete eléctrico. 

Localice la línea: serial =’35802/1JA2S22DJG7338′ y cambie los cinco primeros dígitos de acuerdo a tu región:

    • 35802 is EU limited to 25Kmh
    • 35804, 35803, 38190 other regions, limited to 25Kmh
    • 35806 is German, limited to 20Kmh
    • 38191 other region limited to 20Kmh
    • 38949 is US limit 30Kmh

El resto de la numeración es el número de serie de tu patinete; puedes encontrarlo en el lateral del patinete, en la factura de su compra o en la placa controladora. Si no lo recuerdas no pasa nada. Solo debes colocar correctamente los cincos primeros dígitos. Por ejemplo, para españa seria: 35802/….

La otra variable que podemos modificar son los Km recorridos. Localize la línea: KM=1400 

Puedes  poner los Km que quieras, incluso 0.

En esta etapa del proyecto ya hemos realizados todos los preparativos a nivel de software. 

Procedimiento

Remover la tapa trasera del patinete

Para ello volcamos el patinete al revés para que la tapa inferior quede accesible. Podemos apoyarlo sobre un cojin de tela como se muestra en la figura:

Xiaomi 4 pro

A continuación retiramos todos los tornillos y removemos la tapa. Localizamos el compartimento de la placa controladora (DRV).

Ahora es importante descargar los capacitores de la placa, para ello desconecte el cable de la batería (véase la figura) e intente encender el patín tres veces como mínimo. Esto permite trabajar con seguridad. 

Retiramos con cuidado el resto de los conectores. Solo los conectores de fases de motor(véase la figura) van en una orientación definida. El resto de los conectores son únicos y no hay peligro de poder reconectarlos inadecuadamente. nota: Para remover los conectores de fases del motor hay que hacer una ligera presión lateral.

Placa DRV xiaomi 4 pro

Una vez hallamos liberado la placa debemos proceder a descubrir la zona donde se encuentran los pines de programación. Para ello debemos auxiliarnos de una herramienta de madera o plástico para evitar dañar los componentes de la placa. Yo he utilizado una orquilla de sugetar ropa(madera) pero podeis utilizar la herramienta de su elección. Si tiene dudas puedes ver el video. Deberia quedarnos algo así:

Placa xiaomi 4 pro

Preparación del modulo stlink v2

Ahora procederemos a conectar los conectores dupont a la placa y al módulo de stlink v2 respectivamente. Después de varios intentos he desarrollado un método que permite mantener los cables fijos entre la placa y el módulo stlink. Véase la figura. Note que he recomendado conectores dupont macho-hembra porque las puntas podrían caber perfectamente en los orificios de los pines de programación de la placa controladora. Para mi fue un poco tarde para esta última mejora pero me quedé con la idea para futuras operaciones de ingeniería inversa.

placa xiaomi 4 pro
placa xiaomi 4 pro
PLaca xioami 4 pro
placa xiaomi 4 pro

Con los conectores en posición y fijos intente no mover la placa durante las operaciones siguientes. A continuación, vamos a comprobar si el computador reconoce el módulo stlink v2 y la placa conectada al mismo. Para ello, conectamos el módulo stlink v2 a al computador, como se muestra en la figura de arriba. Abrimos una ventana de terminal en macOS y escribimos lo siguiente:

				
					st-info --probe
//salida:
Found 1 stlink programmers
version:V2J37S7
serial:55FF6B067188485721300767
flash:3072 (pagesize: 1024)
sram:20480
chipid:0x410
dev-type:STM32F1XX_MD
				
			

El comando st-info –probe realiza una comprobación para ver si hay conectado algún dispositivo stlink  v2 y su hardware anexo. En este caso ha detectado el dispositivo conectado a un microcontrolador de tipo: STM32F1XX_MD

Ahora, sin mover los componentes. Copiamos los archivos necesarios, que descargamos al inicio, en una nueva carpeta llamada hack en el directorio Downloads. Esto no es estricto hacerlo, pero por conveniencia lo recomiendo. Teniendo en cuenta este ajuste, abrimos una ventana de la terminal y ejecutamos esta serie de comandos.

nota: 

				
					cd Downloads && cd hack
//Dentro del directorio hack:
openocd -f interface/stlink-v2.cfg -c "transport select hla_swd" -f target/stm32f1x.cfg
				
			

La finalidad es ejecutar el servidor de openOCD para crear la interfas de programación que más tarde utilizará el script de Python para conectarse a la placa y reprogramar el microcontrolador.

Aqui openOCD puede darnos una advertencia diciendo que la interface/stlink-v2 está obsoleta,que la reemplacemos por interface/stlink.cfg. En este caso modifique la interface para que solo sea: stlink.cfg. A mi me ha funcionado a pesar de esta advertencia.

 

openOCD1

Deberíamos ver una respuesta como la que se muestra arriba. Note que ahora el servidor de openODC esta escuchando por los puertos 6666 para conecciones tcl y 4444 para telnet. Precisamente el módulo stlink v2 se conecta al puerto 6666 para sus operaciones.

En este punto el LED del módulo stlink v2 debería estar parpadeando en colores. Ahora es el momento de ejecutar el script de Python que llevará a cabo el resto de las operaciones. Asi que abrimos una nueva ventana de terminal (dejamos la terminal del servidor openODC abierta tal cual) y escribimos lo siguiente:

				
					python flash_hack_pro4.py
				
			

Al ejecutar este comando, puede que aparezca el error  siguiente:

UUID = oocd.read_memory(0x1FFFF7E8,3)

  File “/Users/Yorjandis/Downloads/hack/openocd.py“, line 121, in read_memory

    values = [int(raw[2 * i + 1]) for i in range(len(raw) // 2)]

              ~~~^^^^^^^^^^^^^^^^

A partir de aquí el script se detiene y no permite seguir. Si le ha sucedido esto, tengo la solución, pero primero entendamos porque se produce este error. Aquí python está intentando convertir un string a un número entero de base 10, pero la cadena contiene caracteres hexadecimales (base 16) y por tanto no es válido una conversión directa a base 10. Para solucionar este error debemos especificarle a la función Int() que la cadena que intenta convertir está en base 16.Entonces, vaya a la carpeta hack donde están todos los archivos descargados y localize el fichero openocd.py, según el mensaje de error la línea que hay que buscar es la 121, asi que vaya a la línea 121 y realice el siguiente cambio:

Anterior:

values = [int(raw[2 * i + 1]) for i in range(len(raw) // 2)]

Nuevo:

values = [int(raw[2 * i + 1], 16) for i in range(len(raw) // 2)]

Con este pequeño cambio, el script funciona y termina todas las operaciones. Verá una pantalla como la siguiente:

python script OKOK

Si ha llegado a esta etapa !felicidades! ha realizado la reprogramación de la placa controladora y la ha dotado de mejoras en la velocidad y gestión de la batería, entre otras.

Ahora toca retirar los conectores dupont de la placa controladora de patinete eléctrico y volver a colocarla en su sitio. Asegúrese de que la superficie inferior de la placa controladora tenga una fina capa de pasta térmica porque ello ayuda a la disipación del calor. Vuelva a conectar todos los conectores, prestando especial atención a los conectores de fases del motor. Mire la imagen para que tenga una guía. El resto de los conectores tienen su propio enganche. Por último, conecte el cable de la bateria y sin cerrar la tapa verifique que todo este conectado y haga una prueba encendiendo el patinete eléctrico. Compruebe que se muetra los valores en la pantalla del patinete. Compruebe las nuevas velocidades que deben ser aproximadamente  15, 25, 32 para los modos ECO, DRIVE y SPORT respectivamente. Coloque la tapa en su sitio y atornille correctamente, pero no con mucha fuerza, para evitar romper el plástico. 

Conclusiones finales

En esta guía hemos realizado el procedimiento de reprogramación de una placa controladora para el modelo patinete eléctrico Xiaomi mi365 4 pro 1ra generación. Hemos utilizado herramientas como openOCD y stlink v2 en entorno Apple, en macOS. 

Este procedimiento solo es válido para este modelo de patinete. De ningún modo intente realizarlo sobre otros modelos porque podría inutilizar la placa controladora.

Si por algún motivo necesita volver a la configuración de fábrica solo tiene que seguir el mismo procedimiento descrito utilizando el script “flash_pro4_1gen.py” en lugar de “flash_hack_pro4.py”.

Espero que les haya gustado el contenido y disfruten de las nuevas prestaciones que tandrá su patinete xiaomi 4 pro. Una vez más gracias a sr. Camilo del canal CamiAlfa por ser el creador original de este procedimiento. 

Si este contenido le ha parecido útil o quiere saber algo relacionado puede dejarme algún comentario. Que tenga un feliz día!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio