I am trying to find a solution to create a 4MBit NVRAM module (FRAM or SRAM, doesn't matter) with a standard PC with Windows.

I want to store up to 1MB of data in less than 1 second with 50-100 write commands.

Unfortunately, the USB has a high latency and so I need up to 3-4ms for each write access.

So my question is: is there a faster way to send the data to a NVRAM module than USB? I was thinking with a PCIe interface, but probably I need some signed drivers to do it over PCIe. I can't find any modules with NVRAM on the web.

  • 2
    \$\begingroup\$ You must be doing something wrong, I can write way more than 1MB/s via USB to anything... \$\endgroup\$ – PlasmaHH Feb 3 '16 at 13:27
  • 1
    \$\begingroup\$ What's the "packaging" of the device? Is it just a bare IC in a socket? You might be best off making it into a SATA device. Possibly by turning it into a CompactFlash device and then attaching it to a readymade SATA-CF bridge. \$\endgroup\$ – pjc50 Feb 3 '16 at 13:31
  • \$\begingroup\$ What does MB mean? Normally I would read it as 8*10^6 bits, but you mention that your module is 4 MBit, so which is it? \$\endgroup\$ – pipe Feb 3 '16 at 13:37
  • \$\begingroup\$ perhaps you need something like this: pmcs.com/products/storage/flashtec_nvram_drives/nv1604 or this: dfi.com.tw/products/product.html?productId=1262 \$\endgroup\$ – Marko Buršič Feb 3 '16 at 13:58
  • \$\begingroup\$ What's wrong with an SSD? Or, if you're still bottle necked, a PCIe flash disk? Those go screaming fast \$\endgroup\$ – uint128_t Feb 3 '16 at 15:50

Depending on the USB chipset that you are using, there are a couple of considerations...

  1. From an OS userland point of view, Windows/Linux/OSX will impose a form of ... latency with respect unique commands. Depending on the loading of the OS this could be between 5-10ms if direct driver access is used & upto 20ms if a virtualComms is used.

  2. Latency timers. USB expects certain sized payloads & if this is not reached there is usually a "latency timer" that permits a timeout to force flushing the RX buffer. This is beneficial if short data packets are being sent.

So... depending on how you are sending the data via USB be it bulk read/write or individual read/write & the size of the payload, you may be running foul of one of these limitations.

| improve this answer | |
  • \$\begingroup\$ Thank you Jon. This is exactly my problem. I tried to write 10 times 4kb and read them back over USB but I need more than 100ms... This is really too much. pipe wrote me a comment with the DFI product (is over PCIe), maybe this is the only way to avoid the latency. \$\endgroup\$ – Adriano Feb 3 '16 at 21:13

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.