You may find a clue in this video. It appears at 6:57, I am showing a HEX file. This is what I was loading in.
Thanks! I'll check this out.
I do have a copy of the document that describes the programming protocol, it's just a question of what data I need to send at it, but this is clearer now...
I have been doing some more digging and reading in the meantime and I think Ive come up with the following conclusions so far:
* I didnt see it earlier, but the 40000 bits is an approximate, so being a little over seems like it should be ok
* I found an option to produce a .rbf from the .sof, and it came out at 5120 bytes
* The .hex file also seems to contain the same contents as the .rbf, and there is also a .ttf with contents that could be #included into a C or assembly source file for example. With those 3 having the same contents, and AN33 mentioning that the .rbf and .ttf can be loaded directly in to the FPGA, I think that is exactly what I need.
The "bitstream packet" in the .pof is 12 bytes bigger than the .rbf etc files, but it looks like after the first 12 bytes the contents are the same as .rbf etc, so perhaps I just need to ignore those first 12 bytes, whatever they are for... Or just use the .hex which is produced by default.