1、#EMBEDDEDOSSUMMITHigh Bandwidth SensorsYuval Peress,GoogleEmail:Discord:yuval#5515GitHub:yperessAgendaWhat are high bandwidth sensors and why should you care?The evolution of sensors in ZephyrNew feature:streaming sensor dataWhat are high bandwidth sensors?Sensors that provide more than X samples/se
2、cond?Sensors that provide more than X bytes/second?Any sensor whos data pipeline is a bottleneck.1.Application calls fetch1.Application calls fetch2.Driver performs bus transactions to get the data1.Application calls fetch2.Driver performs bus transactions to get the data3.Application reads channels
3、 from driver cacheProblems:Application blocks during I/OData processing assumes driver is lockedFixed memory owned by driverNo blocking during bus I/OData processing does not require driver owned cacheFlexible memory use via mempool#Add these to your prj.confCONFIG_SENSOR=yCONFIG_SENSOR_ASYNC_API=yE
4、nabling the async API#EMBEDDEDOSSUMMITOne-shot dataSENSOR_DT_READ_IODEV(my_reader,/IODev name DT_CHOSEN(lid_accel),/Sensor node to read SENSOR_CHAN_ACCEL_XYZ/One or more channels to read);RTIO_DEFINE_WITH_MEMPOOL(sensor_read_rtio,/RTIO name 8,/Submit queue size 8,/Completion queue size 32,/Number of
5、 memory blocks 64,/Block size(bytes)4 /Block alignment(bytes);Setting up the readerSENSOR_DT_READ_IODEV(my_reader,/IODev name DT_CHOSEN(lid_accel),/Sensor node to read SENSOR_CHAN_ACCEL_XYZ/One or more channels to read);RTIO_DEFINE_WITH_MEMPOOL(sensor_read_rtio,/RTIO name 8,/Submit queue size 8,/Com
6、pletion queue size 32,/Number of memory blocks 64,/Block size(bytes)4 /Block alignment(bytes);Setting up the readerAllows us to delay processingAllows us to control how memory is managedSmall blocks for one-shot readingLarge blocks for streaming fast sensorsLots of small blocks for mixed useWhy use