Очевидно, вам нужно знать последовательный протокол, используемый для связи. Просто отправьте известную команду каждому порту и проверьте ожидаемый ответ. Порты, на которых нет устройств, прекратят / сбросят IOException.
Или, если вы не хотите делать это с помощью кода, вы можете попробовать то же самое с помощью HyperTerminal или другой программы с последовательным терминалом.
Попробуйте что-то вроде следующего:
(Обратите внимание, что я пишу это из памяти и не гарантирую, что это скомпилируется / что у меня правильные имена методов на 100%, но это дает общее представление).
foreach(string portname in SerialPort.GetPortNames())
{
// Use your connection settings - own baud rate etc
SerialPort sp = new SerialPort(portname,4800, Parity.Odd, 8, StopBits.One);
try
{
sp.Open();
sp.Write("Your known command to phone");
Thread.Sleep(500);
string received = sp.ReadLine();
if(received == "expected response")
{
Console.WriteLine("Phone connected to: " + portname);
break;
}
}
catch(Exception)
{
Console.WriteLine("Phone NOT connected to: " + portname);
}
finally
{
sp.Close();
}
}