The topics in this section provides information about USB pipes and URBs for I/O requests, and describes how a client driver can use the device driver interfaces (DDIs) to transfer data to and from a USB device.
Today I will be showing you how to install your drivers for you mother board on your new rig or even to just update a old rig! Would love to see feedback! I/O Drivers and Utilities The DAQ software helps to diagnose hardware with complete I/O drivers. It also includes DAQ SDK and DAQ utility application software to control specific hardware interface.
A transfer takes place every time data is moved between the host controller and the USB device. In general, USB transfers can be broadly categorized into control transfers and data transfers. All USB devices must support control transfers and can support endpoints for data transfers. Each type of transfer is associated with the type of USB endpoint (a buffer in the device). Control transfer is associated with the default endpoint and data transfers use unidirectional endpoints. The data transfer types use interrupt, bulk, and isochronous endpoints. The USB driver stack creates a communication channel called a pipe for each endpoint supported by the device. One end of the pipe is the device's endpoint. The other end of the pipe is always the host controller.
Before sending I/O requests to the device, the client driver must retrieve information about configurations, interfaces, endpoints, the vendor, and class-specific descriptors from a USB device. In addition, the driver must also configure the device. Device configuration involves tasks such as selecting a configuration and an alternate setting within each interface. Each alternate setting can specify one or more USB endpoints that are available for data transfers.
For information about device configuration, see How to Select a Configuration for a USB Device and How to select an alternate setting in a USB interface.
It is recommended you update your Motherboard Drivers regularly in order to avoid conflicts. You can choose to manually update your motherboard drivers or use a driver update tool for automatic drivers updates. Driver updates will resolve any driver conflict issues with all devices and improve the performance of your PC. ASUS mining motherboard features 19 PCI Express® (PCIe®) slots. With 18 PCIe x1 and one PCIe x16 slots on board, plus three zoned ATX12V power connectors, B250 Mining Expert lets you run up to 19 NVIDIA or AMD GPUs. in parallel to max out your megahash rates!
After the client driver has configured the device, the driver has access to the pipe handles created by the USB driver stack for each endpoint in the currently selected alternate setting. To transfer data to an endpoint, a client driver creates a request by formatting an URB specific to the type of request.
In this section
Topic | Description |
---|---|
This topic explains the structure of a control transfer and how a client driver should send a control request to the device. | |
This topic provides an overview of USB pipes and describes the steps required by a USB client driver to obtain pipe handles from the USB driver stack. | |
This topic describes the WDF-provided continuous reader object. The procedures in this topic provide step-by-step instructions about how to configure the object and use it to read data from a USB pipe. | |
This topic provides a brief overview about USB bulk transfers. It also provides step-by-step instructions about how a client driver can send and receive bulk data from the device. | |
This topic discusses static streams capability and explains how a USB client driver can open and close streams in a bulk endpoint of a USB 3.0 device. | |
This topic describes how a client driver can build a USB Request Block (URB) to transfer data to and from isochronous endpoints in a USB device. | |
In this topic, you will learn about the chained MDLs capability in the USB driver stack, and how a client driver can send a transfer buffer as a chain of MDL](/windows-hardware/drivers/ddi/wdm/ns-wdm-_mdl)'>MDL structure. | |
This topic provides information about steps you can try when a data transfer to a USB pipe fails. The mechanisms described in this topic cover abort, reset, and cycle port operations on bulk, interrupt, and isochronous pipes. | |
This section provides guidance concerning the careful management of USB bandwidth. |
Related topics
Recently, feeling restricted by the hardware on my laptop, I built myself a desktop computer based on a recently released Ryzen CPUs by AMD. These CPUs are built on a new architecture, plug into a new sort of socket and have a whole new ecosystem around them.
I-o Data Motherboards Drivers
Motherboard was one of the most difficult things to decide on. I wanted to go for a small system, but one, that’s large enough for future expansion into water cooling. This meant going for a smaller form factor motherboard – µATX of, even better, mITX. Alas, nobody had released any motherboards of mITX form factor by the time, so µATX was the only choice.
After some research I decided on the MSI B350M MORTAR ARCTIC motherboard, because it had a pretty nice feature set (S/PDIF, sensible number of USB ports, RGB header) and matched the colour scheme of my white build as well!
Trouble didn’t take long at all to rear its head. Turns out the motherboard uses a proprietary Super I/O chip: Nuvoton NCT6795D! This chip is known to be responsible for little, but important, details such as monitoring temperatures around the board, controlling the speed of fans and so on. This chip is apparently made exclusively for MSI and MSI refuses to provide the specsheets for the chip:
me: Additionally, please release/give me the specsheet for NCT6795D chip.
MSI: We are sorry that we cannot supply the details spec of it, Or you can contact the chipset vendor directly.Thanks!
I-o Data Motherboards Drivers
me: What about the RGB header? Nuvoton is on record saying that we should request the specsheets from you as it is a chip designed specifically for MSI. Can you please communicate with Nuvoton and make sure the sheets are released?
MSI: We are sorry that we cannot supply the details spec of it. Sorry for any inconvenience caused you.
me: pretty please?
MSI: We are sorry that the detailed datasheet is related with confidential of MSI and the Manufacturer. It cannot be made public due to confidentiality agreement. Sorry for the inconvenience caused you.
That’s a shame, but this exchange was by no means a worthless one. Even if indirectly, it points out where the RGB header is controlled. I decided to follow this lead.
Being a student, I get to claim one of those free everything Microsoft licenses free of charge. Having installed the Windows 10, MSI’s Gaming App (the program which allows control of the RGB header) and a copy of RWEverything1 I start digging around. Shortly after I’m greeted by great news: changing the colour in the Gaming App would also make the bottom two rows change significantly as well!
The next day, as I was collecting the information about what each bit in the sI/O registers does, I noticed the registers not actually changing the colour unless the Gaming App was turned on first. Worried about hitting a dead end, I started looking into disassemblers and debuggers on Windows. The obvious first option was MSVC. Disappointingly, I couldn’t make to work in the end – its debugger refused to show me the disassembly no matter what. I ended up settling on x64dbg, a very awesome visual debugger/disassembler.
Picking at the disassembly of MSI_LED.exe
eventually led me to two interesting functions: IoPortWriteByte
and DeviceIoControl
, which the former function calls. Nothing, that would look like actual writing to an I/O Port, though. I seldom do anything with Windows and this is my first time looking into Windows’ internals too. That’s the reason why it took me till Saturday to realise that the actual communication happens inside a driver of some sort, not the executable I was looking at.
Could I debug a driver in a live system? Turns out it is possible, but not without a second computer with a serial header. Not only I haven’t another computer, I do not have a cable that could do serial either. In the end, I ended up disassembling the driver itself, learning the Windows driver basics as I went. Knowing nothing about Windows drivers meant stumbling around and figuring what all the assembly did. Luckily, the driver was only 4KiB in size, so by the evening I had a nice trace of the in
and out
instructions that the Gaming App indirectly invokes:
Boot back into Linux-land, open('/dev/port', 'wb')
, repeat all the same calls… to my delight – the colour changes! Hooray!
There are some outstanding questions, such as: “Why didn’t, then, writing straight sI/O register via RWEverything work?” I don’t know. It might be the unusual sequence of 87 87 07 12
that appears before every write in the dumps2. I’m glad it all works, and am not going to risk bricking my board a second time.
All this is implemented in a utility tool called msi-rgb. In the end this utility tool ended up being much more flexible compared to the MSI’s own app. While msi-rgb does not monitor the CPU temperature or react to the music, it allows for much more customisation than the 7 static colours offered by the Windows app. I haven’t yet investigated making the utility more portable, but it shouldn’t be too hard seeing the only really unportable part in it is the use of /dev/port
device.