nr1224:
I've been doing some speed testing, and it appears that my code does in fact take too long to write to the SD card, explaining the missing packets.
Right, and I think you'll find that you can't really get around that because of the nature of the SD card interface. A while ago, someone asking a question here, was told that the interface chip for the SD card is buffered, and that some number of bytes are stored before writing, and that this does not always take the same amount of time, due to varying lengths of data.
I want to attempt to load the data into a buffer, and somehow multitask so that the Arduino can still collect data as it writes to the card...interrupts perhaps?
What is the basic overview of allocating a buffer in RAM and doing two tasks at once?
You still need time to perform all tasks, and if the SD write takes up a lot of time, there will be a problem regardless of whether or not you interleave the tasks.
Someone mentioned FRAM, and that's a pretty good way to do it, I think, but as pointed out, it's a tad pricey. The only real reason to use FRAM is for its non-volatility. If you want to log to RAM, why not consider a static RAM. Yes, it's volatile, but unless you plan on gathering the messages, powering off, then powering on and offloading the data, it isn't really a problem.
I'd probably look at static RAM, byte-wide, for gathering the messages, an SD card for offloading after the test run, and if you still find it a bit slow, you could go for an Arduino Due. With its 96K bytes of RAM, you might not even need an external SRAM. Further, the SD card can be in a USB adapter, to attach to the OTG-capable USB port for offloading, and of course, it runs at 84 MHz, and is Arduino compatible at the C++ level.
The ones from China on Ebay tend to be less than 3 times the price of an Uno. Should be a similar ratio for the US ones.