Forum Discussion
PL2303 issues (Prolific USB to Serial Drivers) Win 11
- Nov 16, 2021
I tried the older driver available here:
http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=223&pcid=126
And this seemed to work for Windows 11. Weird that an old driver works better than the latest one.I have the PL-2303 TA chipset.
There is a working driver at http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=225&pcid=41, a bit down the page listed as "DCHU (for PC Vendors)". Getting it installed is a bit tricky, it seems. What I did is this:
First install the downloaded driver by unpacking the zip file and "pnputil /add-driver *.inf /subdirs /install" (the /install is probably not necessary) from the extracted "Win11_DCHU" directory. It will add the two driver packages to the driver store and tell you what oemXY.inf files it has assigned to them.
Then "pnputil /enum-drivers", and in the output look for Prolific drivers other than the ones from the previous step. I had only one other entry, a "ser2pl.inf" version "09/16/2021 3.8.40.0".
Disconnect the device, and "pnputil /delete-driver oemXY.inf" with the INF file you located in the previous step.
Connect the device again, and it should work, at least, it does for me. The problem is probably that the non-working driver is the newest (September 2021 vs. July for the ones from the download page) and so Windows prefers it over them.
Excellent advice. I turned your instructions into a PowerShell snippet with makes this procedure pretty quick. Just set the path to the driver files.
Attached is a screenshot of my Device Manager with 2 programming cables plugged in. (1 Yaesu, 1 Baofeng).
# Set the current location to the specified directory
Set-Location 'C:\ProlificDrivers\PL2303D_DCHU_Win11_21H2_v3.9.0.2_20210728_ML_Driver'
# Create a log file with the current date in the filename
$outfile = "install_$(Get-Date -Format yyyyMMdd).log"
# Install the driver using pnputil.exe and save the output to the log file
$InstallResult = pnputil.exe /add-driver *.inf /subdirs /install
$InstallResult | Out-File $outfile -Append -Encoding utf8 -Force
# Extract the OEM name from the install result
[string]$Published = $InstallResult -match 'publish'
$OEMIndex = $Published.IndexOf('oem')
[string]$OEMName = $Published.Substring($OEMIndex, ($Published.Length - ($OEMIndex)) )
# Get a list of other installed drivers
$otherDrivers = pnputil.exe /enum-drivers
# Create an array to store the names of drivers that need to be deleted
[System.Collections.ArrayList]$badDrivers = @()
# Iterate through each line of the otherDrivers output
ForEach ($Line in $otherDrivers) {
if ($Line -match "Published Name") {
$PublishedName = @($Line -split 'Published Name: ')[1]
}
# Check if the line contains "prolific" and the PublishedName is not the same as the OEMName
if ($Line -match "prolific" -AND ($PublishedName -ne $OEMName)) {
$badDrivers.Add($PublishedName)
}
}
# Create a message with the names of the drivers to be deleted
$Msg = @"
Driver to delete:
$($badDrivers | Out-String )
"@
# Append the message to the log file and display it in the console with green color
$Msg | Out-File $outfile -Append -Encoding utf8 -Force
Write-Host $Msg -ForegroundColor Green
# Attempt to delete the bad drivers
try {
ForEach ($Name in $badDrivers) {
$attempt = pnputil /delete-driver $Name
# If the deletion attempt fails, throw an exception
If ($attempt -match 'failed') {
throw $attempt
}
# If the deletion is successful, update the message and append it to the log file
$Msg = "Driver deleted successfully."
$Msg | Out-File $outfile -Append -Encoding utf8 -Force
Write-Host $Msg -ForegroundColor Green
}
}
catch {
# If an exception is caught, update the message with the error and append it to the log file
$Msg = "Failed to delete driver. Please delete manually.`nError: $_"
$Msg | Out-File $outfile -Append -Encoding utf8 -Force
Write-Host $Msg -ForegroundColor Yellow
}