Here is code that compiles and does not segfault. http://pastebin.com/DG2SqDUW
(Credit goes to the guys who do flashrom, nothing clever here is any of my doing.) spi_init() seems to work as I would want. Then I send a 64 byte spi command... fairly certain this is working correctly. This is setting the registers for the sx1211 radio IC. Then I loop through, trying to read them back. That doesn't quite work, the first two reads give 0x00, then while trying to read the 3rd address, I get back the value of the 1st, then while trying to read the 4th I get the value for the 2nd, and so forth. The same thing happens if I try to read a single register... let's say the read-only signal strength register, address 0x14 (bit 6 should be set, according to the SX1211 docs, and the address left-shifted 1 bit, for an effective command of 0x68)... same thing happens. The first two times I read it, I'll get zero, and then I'll start seeing what look like realistic RSSI packets. I don't need to read registers though... so I could care less if I solve this. I might want to read the RSSI, but I'll just read until I see non-zero, and use that. I do however need to read from the nss_data device, a fifo. For that, I need to set ADBUS4 low, and leave ADBUS3 (the typical chip select) high. Nothing I twiddle or tweak seems to cause that. So the past couple days I've been reading datasheets and application notes for the FT2232D, trying to piece together things as best I can. I can see some of the ftdi commands that the flashrom coders use, they're in AN108. Those ones even make sense. Other things, like line 117... That seems like it's just packing a 0x00 into the buffer to send. Some of the debug messages I've stripped from this claim that that's asserting CS# (ADBUS3), but I don't see how. cs_bits is useless there, and pindir doesn't seem to be the answer either... it's value of 11, even with inverted logic, would seem to set ADBUS2 low, not 3, which is MISO. I've stripped this down, so the magic isn't in some other flashrom source file. It's not in libftdi either, which is fairly sparse source-wise itself... and when I follow the path the code takes, it seems to be doing low level grunt work, merely shipping bytes to the ftdi. I don't know how to use gdb, but it may be time to learn... but I'm not sure I'll learn much that way. I've got one of these boards soldered up with lead wires to ADBUS0-4, and I'll hook it up to the oscilloscope tomorrow morning when I'm back at work. But again... I'm not sure what that will show either, I already know that ADBUS3 is low, or I'd not get any SPI commands to work, even in the crappy way that they seem to be working. And I know with some certainty that ADBUS4 (which instead I want to go low) isn't... or I'd be able to read data out of the fifo. (Having tuned the radio to the correct config, and with other devices broadcasting, it's certain to have something in it). I'm stumped. I'm either not reading the correct documentation (or maybe there is none). Is there anyone out there that can lend a hand? And this doesn't even take into account that I also need to do bit-banging on interface B... and I can't find anything that explains how to do that. I've tried doing ftdi_set_interface() and then ftdi_set_bitmode(), but I'm not sure what's needed after that. If anyone has any insight here, it'd be greatly appreciated. Thanks, John O. -- libftdi - see http://www.intra2net.com/en/developer/libftdi for details. To unsubscribe send a mail to [email protected]
