Pour envoyer des motifs à une machine à tricoter Brother Electroknit KH940, on utilise une communication série sur USB, afin de simuler un lecteur de disquette.
Ce câble doit respecter un certain protocole de communication série. Pour le fabriquer on part d'un câble USB série FTDI. Ce type de câble intégre un circuit intégré programmable dans le connecteur USB, il sera nécessaire de modifier la configuration de ce circuit en le reprogrammant avec le logiciel adapté.
Pour fabriquer ce câble, nous nous sommes largement basés sur le tutoriel de Daviworks (lien ci-dessous).
Composants
Outils
Il faut défaire le connecteur existant, sans endommager le sertissage des fils, et les réinsérer dans le connecteur C-GRID adapté à la prise de la machine.
En s'aidant des brucelles, soulever chaque picot de plastique pour libérer l'extrémité sertie du câble.
On insère 4 fils aux bonnes positions : jaune, orange, vert, noir. Les fils rouge et marron sont repliés le long du câble et scotchés sans se toucher! (Attention il faut absolument que ces deux fils soient isolés l'un de l'autre.)
C'est assez délicat, il faut que les fils soient enfoncés à la bonne profondeur pour rester bloqué.
ATTENTION LA PROGRAMMATION DU CABLE FTDI AVEC LINUX NE FONCTIONNE PAS ! Pour l'instant nous n'avons pas encore réussi à programmer le cable FTDI sur linux. Par contre, la procédure avec FT_PROG sur windows fonctionne très bien…
Pour utiliser le cable, il est nécessaire de l'adapter au protocole de communication de la machine à tricoter. Pour cela, il faut inverser les niveaux logiques sur les broches RXD, TXD et RTS. Pour le programmer, on peut utiliser un logiciel fourni par FTDI, fabricant du câble, malheureusement il ne fonctionne que sur windows.
Nous avons cherché des moyens de le faire sur Linux, c'est complexe mais possible! D'abord, nous avons testé ftx-prog de Richard Meadows et FT232R de Mark Lord, sans succès.
Finalement, la solution consiste à utiliser la libFTDI
# Debian Stretch 9.5 64bits @ Kirin / 20200317 # télécharger depuis le site # décompresser dans un répertoire cd /home/emoc/libftdi1-1.4 sudo apt-get install build-essential gcc make libftdi-dev libusb-dev libconfuse-dev sudo apt-get install git-core cmake doxygen swig python-dev libboost-all-dev libusb-1.0-0-dev cd libftdi mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX="/usr" ../ make sudo make install
cd /home/emoc/libftdi1-1.4/examples # pour tester la lecture ./eeprom
Je teste avec deux câbles différents (et la commande ./eeprom
), le premier a déjà été programmé (sur windows), les informations renvoyées sont correctes (= les bits TXD, RXD et RTS sont bien inversés) :
Chip type 3 ftdi_eeprom_size: 128 0x000: 00 40 03 04 01 60 00 06 a0 2d 08 07 00 00 98 0a .@...`.. .-...... 0x010: a2 02 a2 12 23 10 05 00 0a 03 46 00 54 00 44 00 ....#... ..F.T.D. 0x020: 49 00 12 03 46 00 54 00 32 00 4a 00 53 00 57 00 I...F.T. 2.J.S.W. 0x030: 59 00 4b 00 00 00 00 00 00 00 00 00 00 00 00 00 Y.K..... ........ 0x040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........ 0x050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........ 0x060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........ 0x070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 f0 32 ........ .......2 0x080: 17 04 e8 fb 00 00 cf f8 9c 58 42 00 00 00 00 00 ........ .XB..... 0x090: 00 00 00 00 00 00 00 00 4c 41 35 59 42 4b 5a 42 ........ LA5YBKZB VID: 0x0403 PID: 0x6001 Release: 0x0600 Bus Powered: 90 mA USB Remote Wake Up Manufacturer: FTDI Product: Serial: FT2JSWYK Checksum : 32f0 Internal EEPROM Oscillator: Internal Enable Remote Wake Up PNP: 1 Channel A has Mode UART VCP Inverted bits: TXD RXD RTS C0 Function: TXLED C1 Function: RXLED C2 Function: TXDEN C3 Function: PWREN C4 Function: SLEEP
Pour le second, dans son état tout frais du fournisseur, les bits TXD, RXD, RTS ne sont pas inversés! C'est la modification à effectuer pour que le câble soit utilisable avec la machine à tricoter.
Chip type 3 ftdi_eeprom_size: 128 0x000: 00 40 03 04 01 60 00 06 a0 2d 08 00 00 00 98 0a .@...`.. .-...... 0x010: a2 12 b4 12 23 10 05 00 0a 03 46 00 54 00 44 00 ....#... ..F.T.D. 0x020: 49 00 12 03 46 00 54 00 34 00 5a 00 33 00 4f 00 I...F.T. 4.Z.3.O. 0x030: 43 00 4e 00 12 03 46 00 54 00 35 00 46 00 54 00 C.N...F. T.5.F.T. 0x040: 56 00 33 00 4a 00 00 00 00 00 00 00 00 00 00 00 V.3.J... ........ 0x050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........ 0x060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ........ ........ 0x070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 86 77 ........ .......w 0x080: 21 04 de fb 00 00 8d fa c4 38 42 00 00 00 00 00 !....... .8B..... 0x090: 00 00 00 00 00 00 00 00 4a 41 49 59 42 33 4e 30 ........ JAIYB3N0 VID: 0x0403 PID: 0x6001 Release: 0x0600 Bus Powered: 90 mA USB Remote Wake Up Manufacturer: FTDI Product: FT4Z3OCN Serial: FT5FTV3J Checksum : 7786 Internal EEPROM Oscillator: Internal Enable Remote Wake Up PNP: 1 Channel A has Mode UART VCP C0 Function: TXLED C1 Function: RXLED C2 Function: TXDEN C3 Function: PWREN C4 Function: SLEEP
En deux temps : d'abord, il faut créer le fichier de configuration :
# Version modifiée de https://waterpigs.co.uk/articles/ftdi-configure-mac-linux/ # Vendor ID et Product ID permettent d'identifier le chipset # sur linux on peut les trouver avec lsusb # ex: Bus 001 Device 010: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC # on peut trouver toutes les options de configuration dans le fichier libftdi1-1.4/ftdi_eeprom/main.c à partir de la ligne 430 vendor_id=0x403 product_id=0x6001 # The rest of the fields are settings which can be written to the # FT2xx with the --flash-eeprom option. # Max. power consumption: value * 2 mA. Use 0 if self_powered = true. max_power=500 ########### # Strings # ########### manufacturer="FTDI" product="FT2JSWYK" serial="" ########### # Options # ########### self_powered=false # Turn this off for bus powered remote_wakeup=false # Turn this on for remote wakeup feature use_serial=true # Use the serial number string # Normally out don't have to change one of these flags in_is_isochronous=false # In Endpoint is Isochronous out_is_isochronous=false # Out Endpoint is Isochronous suspend_pull_downs=false # Enable suspend pull downs for lower power change_usb_version=false # Change USB Version usb_version=0x0200 # Only used when change_usb_version is enabled invert_rxd=true invert_txd=true invert_rts=true cha_vcp=false cha_type=FIFO chb_type=UART eeprom_type=0x46 ######## # Misc # ######## # This is the relative filename that EEPROM contents will either be # read from or written to, depending on whether ftdi_eeprom is run # with the --read-eeprom or --flash-eeprom option. filename="eeprom.bin"
Puis le flasher avec ftdi_eeprom
ftdi_eeprom --flash-eeprom ./ftdi.conf
Cela crée aussi un fichier binaire du contenu de l'EEPROM, qu'on peut afficher avec
hd eeprom.bin
On peut vérifier que cela a bien fonctionné avec
./eeprom # (eeprom est une application du dossier libftdi1-1.4/examples )
Testé sur Windows 8.
Télécharger et installer l'application depuis de site de FTDI : https://www.ftdichip.com/Support/Utilities.htm#FT_PROG
Puis, brancher le câble et