UART1 on Windows

New Member Posts: 2

Hello,

I am trying to enable access to UART1 (Pins 8 and 10 on the header) on Windows IOT Core 64-bit.

First, to enable usermode access to a SerCx2 UART, you must add an rhproxy node to the ACPI tables. See
https://docs.microsoft.com/en-us/windows/uwp/devices-sensors/enable-usermode-access

I have created the following rhproxy node and injected it into the system ACPI tables. This causes a device interface to be created.

    Device(RHPX)
    {
        Name(_HID, "MSFT8000")
        Name(_CID, "MSFT8000")
        Name(_UID, 1)

        Name(_CRS, ResourceTemplate() 
        {  

            // Index 0
            UARTSerialBus(             // UART0
                115200,                // InitialBaudRate: in bits ber second
                ,                      // BitsPerByte: default to 8 bits
                ,                      // StopBits: Defaults to one bit
                0xfc,                  // LinesInUse: 8 1-bit flags to declare line enabled
                ,                      // IsBigEndian: default to LittleEndian
                ,                      // Parity: Defaults to no parity
                ,                      // FlowControl: Defaults to no flow control
                32,                    // ReceiveBufferSize
                32,                    // TransmitBufferSize
                "\\_SB.PCI0.URT1",     // ResourceSource: UART bus controller name
                ,
                ,
                ,
                )                      
        })

        Name(_DSD, Package() 
        {
            ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
            Package() 
            {
                Package(2) { "bus-UART-UART1", Package() { 0 }},
            }
        })
    }

I use mincomm as usermode test program (https://github.com/ms-iot/samples/tree/develop/MinComm). I can then enumerate the port:

mincomm -list
    0 (UART1): \\?\ACPI#MSFT8000#1#{86e0d1e0-8089-11d0-9ce4-08003e301f73}\UART1

However, when I open the port and write data, I do not see any activity on the pins.

I tried forcing the driver to use the PIO path instead of DMA path by setting following reg keys:

reg add "HKEY_LOCAL_MACHINE\syste    m\controlset001\services\sercx2\Parameters" /v TxPioThreshold /t REG_DWORD /d 0xffff
reg add "HKEY_LOCAL_MACHINE\system\controlset001\services\sercx2\Parameters" /v RxPioThreshold /t REG_DWORD /d 0xffff

And I verified that the PIO path was taken, but I still don't see any activity on the pins.

I think it may be a pin muxing issue. Can you please confirm whether pins are muxed correctly to UART1?

More info:

UART1 driver instance:
ACPI\8086228A\1
    Name: Intel(R) Serial IO UART Controller
    Driver is running.

iauarte.sys
File version: 604.10146.2653.391
Product version: 604.10146.2653.65927

In BIOS, UART1 is set to "ACPI Mode"
BIOS is:
UP-CHT01 R0.S (UPC1BMOS) (6/4/2016)
Version 2.17.1249

Comments

  • New Member Posts: 2

    To replicate my results,

    Install Windows IOT Core 64-bit

    Copy ACPITABL.dat to c:\windows\system32

    Turn on testsigning and reboot:

    bcdedit /set testsigning on
    

    You should then see rhproxy running:

    devcon status msft8000
    

    And should be able to enumerate the port using mincomm.exe.

    mincomm -list
    

    Then type

    mincomm
    

    To open the port. Characters typed into the terminal will be sent over the serial port.

Welcome!

It looks like you're new here. Sign in or register to get started.
Privacy Policy