Application can't read data from PCI devices when using xChannelPLCMemoryPointer functions

Symptoms

When trying to read data from the input/output areas, the content is always set to 0xFF, or at least some values are set to FF. This usually happens on newer mainboards or if a PCIE<->PCI bridge (e.g. Pericom) is used.

 

Problem

The netX100/500 silicon does not support all PCI access method. If the host issues a MEMORY_READ_LINE or a MEMORY_READ_MULTIPLE command, no data can be read from the device.

 

Solution

When using the driver function xChannelIORead/Write, the driver version 1.2.5.0 or later contains a fix, to prevent the unsupported operations on the problematic PC's ( NXDRVWIN-225 - Getting issue details... STATUS ), but when using the xChannelPLCMemoryPointer functions, the user application is responsible to prevent unsupported accesses to the dual-port memory of the PCI device.

This means the user application must only perform 8,16 or 32Bit accesses. When using memcpy it depends of the memcpy implementation if it works or not. Usually it's best to ommit the use of memcpy.