Haven't studied your full email, but every third sample in your for loop is uninitialized.
On Tue, Jul 20, 2021, 1:30 PM Michael Niewöhner <f...@mniewoehner.de> wrote: > Hi there! > > I'm having issues with setting the baudrate/frequency in bitbang mode. > > First a general question on `ftdi_set_baudrate`. I wonder what the reason > is > that libftdi multiplies the baudrate by 4 in bitbang mode. I couldn't find > any > reasons for that in the datasheet, but I might have just missed something. > > For my actual issue, let's have a look at some code: > > ``` > // usual ftdi open and setup > // ... > > // bitbang buffer generation > uint8_t *wave = malloc(10000); > for (int i = 0; i < 10000; i++) { > wave[i++] = 0x00; > wave[i++] = 0x01; > } > > ftdi_set_bitmode(ftdi, 0xff, BITMODE_RESET); > ftdi_set_baudrate(ftdi, 200000); > ftdi_set_bitmode(ftdi, 0x01, BITMODE_BITBANG); > ftdi_write_data(ftdi, wave, 10000); > ``` > > The resulting waveform should have a frequency of 100kHz (200000 baud / 2 > bits > per full cycle). However, my logic analyzer shows 500kHz. Setting the > baudrate > after mode setup, leads to 2 MHz - that's what I described in my initial > question (freq * 4). Still, the frequency is 5 times higher than expected. > > For comparison, I have tested this with pyftdi: > > ``` > from pyftdi.gpio import GpioAsyncController > g = GpioAsyncController() > g.configure("ftdi://ftdi:4232/2", direction=0xff) > g.ftdi.reset() > g.set_frequency(200000) > g.write(b'\x00\x01' * 5000) > ``` > > This time I measure 100kHz! > > I had a look at the different implementations for divisor calculations. One > difference is, that pyftdi makes use of the /5 divisor in -H ftdis. Also, > I get > different divisor values but I have not yet compared the calculation yet > (but I > saw that they differ): > > baudrate libftdi1 pyftdi > 1000 b= 1000, v=12000, i=514 b= 992, v=64771, i= 2 > 40000 b= 40000, v= 300, i=514 b= 40000, v= 1500, i=514 > 100000 b=100000, v= 120, i=514 b=100000, v= 600, i=514 > 200000 b=200000, v= 60, i=514 b=200000, v= 300, i=514 > 800000 b=800000, v= 15, i=514 b=800000, v= 75, i=514 > > b = resulting baudrate > v = value > i = index > > In most cases (except 1000 Hz for example, that could be optimized in > pyftdi), > the `value` is 5 times higher for pyftdi. I'm not yet sure, what that means > exactly, since I haven't fully understood the calculations, yet. > > Any ideas, what could be wrong here? > > > > Michael > > > -- > libftdi - see http://www.intra2net.com/en/developer/libftdi for details. > To unsubscribe send a mail to libftdi+unsubscr...@developer.intra2net.com > > > -- libftdi - see http://www.intra2net.com/en/developer/libftdi for details. To unsubscribe send a mail to libftdi+unsubscr...@developer.intra2net.com