Does viMove* pay attention to *_ACCESS_PRIV? No, those attributes are not defined for PXI/PCI. Do those operations pay attention to *_INCREMENT? Yes, you can choose FIFO or incrementing. (I know that's not the specific question you asked, but it helps for the analogy.)
If the *_INCREMENT is set to 1, VISA will perform the sequential accesses as fast as it can. We have no control over how many PCI frames that happens in. That's at least 2 levels beneath us, even if we wrote this in assembly. The PCI bus manager (eg, somewhere between the CPU, MMU, and BIOS) handles things like bursting and retries.
If the *_INCREMENT is set to 0, VISA will do the specified number of cycles at the same address. This is inherently somewhat slower than incrementin
g addresses, especially when the MMU realizes it can't cache the previous value it read from that address. So this by nature is slower and I can't imagine viMove* in FIFO mode on PXI/PCI ever having multiple accesses in the same PCI frame.
The results of viMoveIn* and multiple calls to viIn* should not vary, assuming the data being read is not volatile. If they do, there's a problem somewhere. I agree with your guess that it's the device. Do you have a PCI bus analyzer to see what's going on?
Dan Mondrik
National Instruments