I know it's possible (in theory) to reprogram the VID PID details back into a chip. It is however way beyond me.
Recently I learned that Microsoft distributed a piece of malicious software as part of their Windows update service. This virus was written by the FTDI chip makers to brick any chips such as the CH341's found in many cheaper Arduinos et al.
The virus attacked my CH341A serial to USB chip by writing 0's to the VID PIC and probably other locations. This makes the hardware 'Unknown' and even if you have the correct driver software, the device is never associated with it.
Before proceeding to power on the Machine or install the drivers make sure to. If you have an FTDI adaptor, please follow the FTDI driver installation Guide to.
Does anyone know a solution to get the zeroed information back into the CH341A?
JamesJames
2 Answers
Here's the guide I used to correct the problem :-
HOW TO FIX THE USB-FTDI PROBLEM
(on arduino nano, usb ttl, ft232, ...)
There must have been a production of faulty ftdi drivers (version 2.12.0.0 or later) on august 2014 that makes some arduino boards and other usb devices not readable from the computer. The problem is random, meaning that it is possible to program the arduino a couple of times and then it comes out the ftdi problem, at that point the board isn't accessible anymore.
Once you come up with this problem, upgrading/downgrading the drivers, the IDE or the bootloader is just a waste of time, as the ftdi driver installed leaves some wrong data. This guide followed step by step will completely fix the driver problem thus making your board working again.
Step 1: check if you have a faulty ftdi chip driver
Not every ftdi chip has faulty drivers, so the first step is to check the chip's driver version. In order to check the version you need a software like usbview or usbdeview (both freeware and don't need any installation). Run the software and look for the 'USB serial converter' device which is the one related to the ftdi driver, then read the vendor-id and the Product-id whose values should be 0x0403 for the vendor and 0x6001 for the product. The goal is to modify that 0x6001 value with 0x0000, and to do that we need some other software.
Step 2: modify values
Unplug your arduino nano or usb device. In order to modify the driver values you need CDMUninstaller (no installation needed). Fill the vendor and product fields with the values found with usbview (0403 and 6001) and click 'add', finally click 'remove devices'.
Step 3: download the 2.10.0.0 ftdi driver
Go to the ftdi website and download the 2.10.0.0 virtual driver choosing between 32 or 64 bit version, voiding the 'setup executable' file: just download the folder. After downloading the folder, we have to overwrite some files inside of it. Click FTDI.rar to download the files already modified, and place them inside the 2.10.0.0 folder overwriting the old ones.
Step 4: connect your arduino board
connect your arduino board, and stop windows from looking for new drivers. Go to device manager and look for FT232 USB device, then right click on it, select Properties and click on update drivers. Manually select the place in which scan for the new drivers and choose the 2.10.0.0 driver folder with the modified files. Now windows will prompt you saying that it can't certificate the new drivers. Ignore the alert and proceed with the installation. Once installation has finished, windows should recognize the connected board as 'USB recuperacion'.
Close the window and go to device manager, and look for the COM ports device. The connected device is now showing up like USB recuperation by ElectroHobby.es
Step 5: modify the chip eeprom
This is the last step and you need to restore the initial vendor and product values inside the ftdi chip eeprom. In order to do that you need to download and install Ftprog, click on the magnifing glass icon, select 'USB device descriptor' and again select 'custom pid'. Finally click on 'ftdi default'.
A new window shows up and you just need to check flag the device list and then click on 'program'.
Bra1nBra1n
What you call a “virus” is, more properly, malware. FTDI's driver that bricked fake FT232R chips was withdrawn from Windows Update in October of 2014. (See, for example, discussion at epanorama.net, sparkfun, and hackaday. The hackaday article, “Unbricking a counterfeit FTDI chip”, has links to an article about unbricking counterfeits.)
The CH341A is not a fake FT232; it is a cheaper alternative that requires a different driver. The driver is not automatically installed by Windows. Several web pages I've seen about it suggest downloading from Chinese-language web pages, which is a gamble if you don't understand what the page says. [However, English-language driverscape.com seems to have a CH341A driver at the moment. I don't know if it works or whether it is free, and anyway have no Windows machine to test it on.]
James Waldby - jwpat7James Waldby - jwpat7
Not the answer you're looking for? Browse other questions tagged serialftdi or ask your own question.
The following code works for me correctly in Windows, but Linux does not work. I am using the same PC, both operating systems are installed native. I do not use virtual machine. I need to work on Linux. I have tried in different linux distributions and does not work anywhere.
If sending 1 byte the device responds and sends the data correctly.
Example:
If sent a more than 1 byte device does not respond the request in linux.
Example:
This event is triggered only in windows. In linux it never works, not received or arrives in bad format and never recognized the remote device.
My log in Windows:
(I replace the actual response of the device by the 'X' characters)
My log in Linux:
USB Serial Adapter: CH340
PD: Sorry for my English, try to do my best with Google Translator :(...
More information 1:
I rebuild ch341.c and add:
delta=0x01 in the log is flag:
More information 2:
In the thread of write / read I hope for wakeAll, running on onReadyRead. If you pass a second make a readAll before checking if the buffer is empty. example:
More information 3:
My Kernel is 3.12.6, but i updated from GitHub this file an rebuild this drivers:
https://github.com/torvalds/linux/blob/master/drivers/usb/serial/ch341.chttps://github.com/torvalds/linux/blob/master/drivers/usb/serial/usb-serial.c (commit d9a38a8741fdffabc32e6d0943b1cdcf22712bec)
Kijam
KijamKijam
1 Answer
Thanks to the developers of Linux, solved my problem, the CH34x driver not implemented parity in the maillist is the link PATCH for those who have this problem in the future, not whether they apply to the official kernel, for now only way is rebuild the driver.
KijamKijam