I-o Data Motherboards Driver



-->

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

TopicDescription

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

Re­cently, feel­ing re­stric­ted by the hard­ware on my laptop, I built my­self a desktop com­puter based on a re­cently re­leased Ryzen CPUs by AMD. These CPUs are built on a new ar­chi­tec­ture, plug into a new sort of socket and have a whole new eco­sys­tem around them.

I-o Data Motherboards Drivers

Mother­board was one of the most dif­fi­cult things to de­cide on. I wanted to go for a small sys­tem, but one, that’s large enough for fu­ture ex­pan­sion into wa­ter cool­ing. This meant go­ing for a smal­ler form factor mother­board – µATX of, even bet­ter, mITX. Alas, nobody had re­leased any mother­boards of mITX form factor by the time, so µATX was the only choice.

After some re­search I de­cided on the MSI B350M MOR­TAR ARC­TIC mother­board, be­cause it had a pretty nice fea­ture set (S/P­DIF, sens­ible num­ber of USB ports, RGB head­er) and matched the col­our scheme of my white build as well!

Trouble did­n’t take long at all to rear its head. Turns out the mother­board uses a pro­pri­et­ary Su­per I/O chip: Nu­vo­ton NC­T6795D! This chip is known to be re­spons­ible for little, but im­port­ant, de­tails such as mon­it­or­ing tem­per­at­ures around the board, con­trolling the speed of fans and so on. This chip is ap­par­ently made ex­clus­ively for MSI and MSI re­fuses to provide the spec­sheets for the chip:

me: Ad­di­tion­ally, please re­lease/­give me the spec­sheet for NC­T6795D chip.

MSI: We are sorry that we can­not sup­ply the de­tails spec of it, Or you can con­tact the chip­set vendor dir­ectly.Thanks!

I-o Data Motherboards Drivers

me: What about the RGB head­er? Nu­vo­ton is on re­cord say­ing that we should re­quest the spec­sheets from you as it is a chip de­signed spe­cific­ally for MSI. Can you please com­mu­nic­ate with Nu­vo­ton and make sure the sheets are re­leased?

MSI: We are sorry that we can­not sup­ply the de­tails spec of it. Sorry for any in­con­veni­ence caused you.

me: pretty please?

MSI: We are sorry that the de­tailed data­sheet is re­lated with con­fid­en­tial of MSI and the Man­u­fac­turer. It can­not be made pub­lic due to con­fid­en­ti­al­ity agree­ment. Sorry for the in­con­veni­ence caused you.

That’s a shame, but this ex­change was by no means a worth­less one. Even if in­dir­ectly, it points out where the RGB header is con­trolled. I de­cided to fol­low this lead.

Be­ing a stu­dent, I get to claim one of those free everything Mi­crosoft li­censes free of charge. Hav­ing in­stalled the Win­dows 10, MSI’s Gam­ing App (the pro­gram which al­lows con­trol of the RGB head­er) and a copy of RWEverything1 I start dig­ging around. Shortly after I’m greeted by great news: chan­ging the col­our in the Gam­ing App would also make the bot­tom two rows change sig­ni­fic­antly as well!

The next day, as I was col­lect­ing the in­form­a­tion about what each bit in the sI/O re­gisters does, I no­ticed the re­gisters not ac­tu­ally chan­ging the col­our un­less the Gam­ing App was turned on first. Wor­ried about hit­ting a dead end, I star­ted look­ing into dis­as­sem­blers and de­bug­gers on Win­dows. The ob­vi­ous first op­tion was MS­VC. Dis­ap­point­ingly, I could­n’t make to work in the end – its de­bug­ger re­fused to show me the dis­as­sembly no mat­ter what. I ended up set­tling on x64dbg, a very awe­some visual de­bug­ger­/dis­as­sem­bler.

Pick­ing at the dis­as­sembly of MSI_LED.exe even­tu­ally led me to two in­ter­est­ing func­tions: IoPortWriteByte and DeviceIoControl, which the former func­tion calls. Noth­ing, that would look like ac­tual writ­ing to an I/O Port, though. I sel­dom do any­thing with Win­dows and this is my first time look­ing into Win­dows’ in­tern­als too. That’s the reason why it took me till Sat­urday to real­ise that the ac­tual com­mu­nic­a­tion hap­pens in­side a driver of some sort, not the ex­ecut­able I was look­ing at.

Could I de­bug a driver in a live sys­tem? Turns out it is pos­sible, but not without a second com­puter with a serial head­er. Not only I haven’t an­other com­puter, I do not have a cable that could do serial either. In the end, I ended up dis­as­sembling the driver it­self, learn­ing the Win­dows driver ba­sics as I went. Know­ing noth­ing about Win­dows drivers meant stum­bling around and fig­ur­ing what all the as­sembly did. Luck­ily, the driver was only 4KiB in size, so by the even­ing I had a nice trace of the in and out in­struc­tions that the Gam­ing App in­dir­ectly in­vokes:

Boot back into Linux-land, open('/dev/port', 'wb'), re­peat all the same calls… to my de­light – the col­our changes! Hoo­ray!

Motherboards

There are some out­stand­ing ques­tions, such as: “Why did­n’t, then, writ­ing straight sI/O re­gister via RWEverything work?” I don’t know. It might be the un­usual se­quence of 87 87 07 12 that ap­pears be­fore every write in the dumps2. I’m glad it all works, and am not go­ing to risk brick­ing my board a second time.

All this is im­ple­men­ted in a util­ity tool called msi-rgb. In the end this util­ity tool ended up be­ing much more flex­ible com­pared to the MSI’s own app. While msi-rgb does not mon­itor the CPU tem­per­at­ure or re­act to the mu­sic, it al­lows for much more cus­tom­isa­tion than the 7 static col­ours offered by the Win­dows app. I haven’t yet in­vest­ig­ated mak­ing the util­ity more port­able, but it should­n’t be too hard see­ing the only really un­port­able part in it is the use of /dev/port device.