Werner, *You do amazing work. Full stop.*
Does spi-jz470-gpio only require the UBB board to interface to the outside world using spi? Does your code implement SPI host capability, or SPI slave, or both? SPI could be a reasonable way to use Ben Nanonote in conjunction with one of the Raspberry Pi boards. The RasPi Model B would give easy access to Ethernet and USB Host, as well as mass storage independent of Ben NN microSD [8:10 smile] card. It also has 1 GB of RAM, and both HDMI and composite video interfaces. And runs a flavor of Debian as well as several other distros should one so desire. It has a fairly decent number of GPIOs available, as well as a few I2C and SPI. Bottom line, for $25 (Model A no Ethernet and 1xUSB) or $35 (Model B with Ethernet and 2xUSB) it's a low cost way to provide internet connectivity to a Ben NN when at a fixed location. Just my lunatic ravings, nothing to see here, please move along people. LOL Ron K Jeffries p.s. Counting down time until someone tells me to shut up and buy a Ben (Wolfgang maybe, except I am not sure he still sells Ben NN) or one of the qi-hardware hardcore hackers tells me to write my own operating system or some other equally out of scope for my MODEST skill set. all said in good spirits. --- Ron K. Jeffries 805-567-4670 On Wed, Apr 10, 2013 at 7:43 AM, Werner Almesberger <wer...@almesberger.net>wrote: > [ Also posted on the linux-zigbee hardware list. No cross-post, since > few people will be on both lists. ] > > What this is all about > ---------------------- > > The ATBEN board on the Ben NanoNote needs a bit-banging SPI driver. > There are several ways to implement this, ranging from reuse of the > generic spi-gpio driver to an optimized driver that's specific for > this platform. > > I implemented several such approaches and measured their performance > in the Ben NanoNote. Below are my findings. > > Comments welcome. > > > Cast and characters > ------------------- > > spi_atben_gpio: NanoNote-specific framework for setting up the > AT86RF230/1 with SPI-GPIO or one of the optimized drivers (below). > The name derives from spi_atben (see below) and should be changed > (maybe to atben_spi or atben_spi_gpio ?) since it is not an SPI > driver but merely a framework that provides configuration data and > performs miscellaneous platform setup. > > https://github.com/wpwrak/ben-wpan-linux/blob/master/drivers/net/ieee802154/spi_atben_gpio.c > > spi_atben: like spi_atben_gpio, but contains a highly optimized > SPI driver for the ATBEN configuration in the Ben NanoNote. > > https://github.com/wpwrak/ben-wpan-linux/blob/master/drivers/net/ieee802154/spi_atben.c > > spi-jz4740-gpio: SPI-GPIO driver optimized for the Jz4740. Uses the > optimized register accesses from spi_atben but pin assignment is not > restricted to ATBEN. The only limitation is that MOSI, MISO, and > SCLK must be on the same port. > > https://github.com/wpwrak/ben-wpan-linux/blob/master/drivers/spi/spi-jz4740-gpio.c > > spi-gpio-atben: task-specific SPI-GPIO driver using the #include > "spi-gpio.c" method. Replaces gpiolib functions with register > accesses specific to the ATBEN configuration in the Ben NanoNote. > Note that some of the code could be moved into Jz4740 > architecture-specific GPIO support. > > https://github.com/wpwrak/ben-wpan-linux/blob/master/drivers/spi/spi-gpio-atben.c > > In the following sections, we abbreviate the stack configurations > as follows: > > Abbreviation Framework Transport Chip driver > --------------- --------------- --------------- ----------- > spi-gpio spi_atben_gpio spi-gpio at86rf230 > spi-gpio-atben spi_atben_gpio spi-gpio-atben at86rf230 > spi-jz4740-gpio spi_atben_gpio spi-jz4740-gpio at86rf230 > spi_atben spi_atben at86rf230 > > > Measurements > ------------ > > Access time to AT86RF231 registers and buffer, in microseconds, on > an otherwise idle Ben NanoNote: > > Driver read from 0x51 read 120 bytes from buffer > | | write 0x0a to 0x15 write 1 byte to buffer > (0x33) > | | | read 1 byte from buffer write 120 bytes > | | | | | | | > spi-gpio 81 85 186 1696 97 1596 > spi-gpio-atben 63 59 123 498 65 437 > spi-jz4740-gpio 10 8 21 280 10 231 > spi_atben 10 7 21 280 10 230 > > Data rate for hypothetical buffer accesses of infinite length. > I.e., kbps = 1000*119*8/(t_write120-t_write1) > > Driver buffer read (kbps) buffer write (kbps) > --------------- ----------------------- ------------------- > spi-gpio 630 635 > spi-gpio-atben 2549 2559 > spi-jz4740-gpio 3676 4308 > spi_atben 3676 4327 > > At the air interface, IEEE 802.15.4 has a data rate of 250 kbps. > The AT86RF231 transceiver also supports non-standard higher data > rates up to 2 Mbps. > > Driver(s) Code size (lines) > --------------------------------------- ----------------- > spi_atben_gpio 128 > spi_atben_gpio + spi-gpio-atben 128+ 53 > spi_atben_gpio + spi-jz4740-gpio 128+416 > spi_atben 423 > > > Computational cost > ------------------ > > The high-level operations of sending and receiving produce the > following major low-level operations: > > Operation register buffer waitqueue > read write read write > --------------- ------- ------- ------- ------- --------- > reception 1 - 1 - 1 > transmission 9 4 - 1 1 > > Using the measured data from above, we get the following total > computational overhead in microseconds, without considering the > waitqueue scheduling delay: > > Driver reception transmission > 1 120 127 1 120 125 (bytes) > --------------- ------- ------- ------- ------- ------- ------- > spi-gpio 267 1777 1866 1166 2665 2727 > spi-gpio-atben 186 561 583 868 1240 1256 > spi-jz4740-gpio 31 290 304 132 353 362 > > Note that the minimum frame length in IEEE 802.15.4 is 5 bytes. > The values for 125 (excluding CRC) and 127 (including CRC) bytes > are extrapolated. > > According to [1], maximum-sized frames can be sent/received, > including CSMA/CA and acknowledgement, at a rate between one > every 4928 us and one every 7168 us. > > We would therefore get the following maximum CPU load: > > Driver Reception Transmission > --------------- --------------- ------------ > spi-gpio 38% 55% > spi-gpio-atben 12% 25% > spi-jz4740-gpio 6% 7% > > > Observations > ------------ > > spi-gpio needs the smallest amount of new code but is also very > inefficient, making it questionable whether this configuration > would yield acceptable performance in regular use. > > With spi-gpio-atben, only a small amount of code is added, but > buffer accesses become almost 4 times faster. Register reads and > writes are still fairly slow. > > spi_atben and spi-jz4740-gpio both achieve the best performance > without significant differences between them. Both add a complete > SPI driver. Of the two, spi-jz4740-gpio is preferable, because it > uses the nearly universal spi_atben_gpio framework driver. > > > Conclusion > ---------- > > I think performance trumps most other considerations in this case. > spi-gpio is clearly too inefficient. spi_atben_gpio with > spi-jz4740-gpio offers the best performance and has a low impact > on the system load (< 10%). In case this solution would be met > with strong resistance for some reason, spi-gpio-atben would offer > a compromise between performance and the amount of code. > > > References > ---------- > > [1] > http://www.jennic.com/files/support_files/JN-AN-1035%20Calculating%20802-15-4%20Data%20Rates-1v0.pdf > > _______________________________________________ > Qi Hardware Discussion List > Mail to list (members only): discussion@lists.en.qi-hardware.com > Subscribe or Unsubscribe: > http://lists.en.qi-hardware.com/mailman/listinfo/discussion >
_______________________________________________ Qi Hardware Discussion List Mail to list (members only): discussion@lists.en.qi-hardware.com Subscribe or Unsubscribe: http://lists.en.qi-hardware.com/mailman/listinfo/discussion