• Disclaimer: This Vendor's Forum is a paid-for commercial area. Unlike the rest of diyAudio, the Vendor has complete control of what may or may not be posted in this forum. If you wish to discuss technical matters outside the bounds of what is permitted by the Vendor, please use the non-commercial areas of diyAudio to do so.

Support for Botic Linux driver

4.0.0-botic5
Thanks Miero again. Finaly I returned to botic5 to do some performance tests and compare with new botic7pre3.
It seems like old version (kernel 4.0.0) is better than new ( 4.5.0-rc6) in terms of heavy CPU consuming tasks.
Using the same player (squeezelite v1.8.4-720) I played some files with upsampling switched on (parameters set as -u vI:::28) and observe everage CPU usage.
For the 16/44,1kHz with integer upsampling to 176,4kHz the CPU usage for old and new kernel was as follows:

  • old: 44% CPU usage
  • new: 58%
For 24/96kHz files with integer upsampled to 192kHz:

  • old: 55% CPU usage
  • new: 72%
Differences seem to be significant.
Regards,
 
Member
Joined 2007
Paid Member
Interesting, Bern. The increased CPU demand that you found is about the same I observed when I compared botic5 running in Debian 7.5 'wheezy' vs. botic5 running in Debian 8.2 'Jessie'. I have an excellent reason to use 'Jessie', but I need all the CPU efficiency I can muster. So any post-'wheezy' OS needs to be streamlined ruthlessly for me to make use of its advantages. With Linux I don't know what can be 'turned-off' without causing problems. Advice from any of you would be very welcome! :)
 
botic7-rc1 available for testing

There is a new version of Botic kernel to try:

# download and install new kernel
wget http://repo.ieero.com/botic/pool/ma...age-4.5.0-botic7-rc1_4.5-botic7-rc1_armhf.deb
dpkg -i linux-image-4.5.0-botic7-rc1_4.5-botic7-rc1_armhf.deb

# edit the /boot/uEnv.txt and check if there is a line starting with dtb= and change it to:
# (for normal Botic driver version)
dtb=am335x-boneblack-botic.dtb
# (for Botic driver with I2C control of ESS Sabre32 ES9018 DAC (stereo only) via isolated I2C header of Hermes-BBB)
dtb=am335x-boneblack-botic-sabre32.dtb

sync
reboot
# (after the reboot, check if the kernel version matches)
uname -r

It's based on the most recent kernel, so it might be better than botic5, or also not better.

Visible changes:
- fixed S/PDIF playback
- fixed I2S capture
- allowed clocking of BBB CPU to 1GHz (solves lower performance in the botic7pre3)
- native I2C control of ESS ES9018S in plain stereo mode from the kernel driver

At least 100MB of free disk space is needed for installation.

The botic5 kernel can be returned by editing two lines in the /boot/uEnv.txt:
uname_r=4.0.0-botic5
dtb=am335x-boneblack.dtb

Questions for testers:
- any problems with the installation?
- does it play sound without skips?
- does it play high sample rates >192kHz as well as previous version?
- does the I2C control of ES9018S works for you?

Thanks.
 
Last edited:
The volume should be possible to control using most of players that you are using. Just allow in it a hardware volume control for the Botic card.

A full control of ALSA mixer is possible using the "alsamixer" command from a terminal.

Or it can be also scripted, e.g.:
# Master Volume change
amixer -q sset Master 2+
amixer -q sset Master 2-
# External SPDIF input volume change
amixer -q sset External 2+
amixer -q sset External 2-
# Global MUTE toggle
amixer -q sset External toggle

# A state of the mixer controls can be saved for future reboots using:
alsactl store

A list of implemented ALSA mixer controls for ESS ES9018S codec:

root@botic:~# amixer
Simple mixer control 'Master',0
Capabilities: pvolume pvolume-joined pswitch pswitch-joined
Playback channels: Mono
Limits: Playback 0 - 201
Mono: Playback 86 [43%] [-34.63dB] [on]
Simple mixer control 'DAC1',0
Capabilities: pvolume pvolume-joined
Playback channels: Mono
Limits: Playback 0 - 255
Mono: Playback 255 [100%] [0.00dB]
Simple mixer control 'DAC2',0
Capabilities: pvolume pvolume-joined
Playback channels: Mono
Limits: Playback 0 - 255
Mono: Playback 255 [100%] [0.00dB]
Simple mixer control 'DAC3',0
Capabilities: pvolume pvolume-joined
Playback channels: Mono
Limits: Playback 0 - 255
Mono: Playback 255 [100%] [0.00dB]
Simple mixer control 'DAC4',0
Capabilities: pvolume pvolume-joined
Playback channels: Mono
Limits: Playback 0 - 255
Mono: Playback 255 [100%] [0.00dB]
Simple mixer control 'DAC5',0
Capabilities: pvolume pvolume-joined
Playback channels: Mono
Limits: Playback 0 - 255
Mono: Playback 255 [100%] [0.00dB]
Simple mixer control 'DAC6',0
Capabilities: pvolume pvolume-joined
Playback channels: Mono
Limits: Playback 0 - 255
Mono: Playback 255 [100%] [0.00dB]
Simple mixer control 'DAC7',0
Capabilities: pvolume pvolume-joined
Playback channels: Mono
Limits: Playback 0 - 255
Mono: Playback 255 [100%] [0.00dB]
Simple mixer control 'DAC8',0
Capabilities: pvolume pvolume-joined
Playback channels: Mono
Limits: Playback 0 - 255
Mono: Playback 255 [100%] [0.00dB]
Simple mixer control 'DPLL',0
Capabilities: enum
Items: '1x Auto' '128x Auto' 'No' '1x' '2x' '4x' '8x' '16x' '32x' '64x' '128x' '256x' '512x' '1024x' '2048x' '4096x' '8192x'
Item0: '8192x'
Simple mixer control 'DPLL Phase',0
Capabilities: enum
Items: 'Normal' 'Flip'
Item0: 'Normal'
Simple mixer control 'De-emphasis Filter',0
Capabilities: enum
Items: 'Bypass' '32kHz' '44.1kHz' '48kHz'
Item0: 'Bypass'
Simple mixer control 'External',0
Capabilities: pvolume pvolume-joined pswitch pswitch-joined
Playback channels: Mono
Limits: Playback 0 - 201
Mono: Playback 153 [76%] [-14.46dB] [on]
Simple mixer control 'FIR Rolloff',0
Capabilities: enum
Items: 'Slow' 'Fast'
Item0: 'Fast'
Simple mixer control 'IIR Bandwidth',0
Capabilities: enum
Items: 'Normal' '50k' '60k' '70k'
Item0: 'Normal'
Simple mixer control 'Jitter Reduction',0
Capabilities: enum
Items: 'Bypass' 'Use'
Item0: 'Use'
Simple mixer control 'MCLK Notch',0
Capabilities: enum
Items: 'No Notch' 'MCLK/4' 'MCLK/8' 'MCLK/16' 'MCLK/32' 'MCLK/64'
Item0: 'MCLK/64'
Simple mixer control 'Oversampling Filter',0
Capabilities: enum
Items: 'Use' 'Bypass'
Item0: 'Use'
Simple mixer control 'Remap Inputs',0
Capabilities: enum
Items: '12345678' '12345676' '12345658' '12345656' '12325678' '12325676' '12325658' '12325656' '12145678' '12145676' '12145658' '12145656' '12125678' '12125676' '12125658' '12125656'
Item0: '12125656'
Simple mixer control 'Remap Output',0
Capabilities: enum
Items: 'q6true' 'q7pseudo' 'q7true' 'q8pseudo' 'q8true' 'q9pseudo'
Item0: 'q6true'
Simple mixer control 'SPDIF Source',0
Capabilities: enum
Items: '1' '2' '3' '4' '5' '6' '7' '8'
Item0: '7'
Simple mixer control 'True Mono',0
Capabilities: enum
Items: 'Left' 'Off' 'Right'
Item0: 'Off'
 
Last edited:
How to configure External SPDIF playback on Sabre32 using Botic:
- attach TOSLINK receiver output to O_D7 pin on the Hermes-BBB
- configure "SPDIF Source" mixer control to 7
- unmute 'External' volume mixer control

If configured in such way, the Botic will reconfigure DAC to the external SPDIF input whenever the BBB is not playing. For external source an independent volume of 'External' mixer control is set.

Enabling the External input will disable muting of the DAC via I2C command. But the DAC will be muted during the reconfiguration phase. However ES9018S has volume ramp on mute, so some "clicks" might still occur.
 
Hi miero, thank you for giving me this occasion of testing.

- any problems with the installation?
No problem with the installation because I've accustomed to the basic setting after the last trial.
- does it play sound without skips??
- does it play high sample rates >192kHz as well as previous version?
No problem with playing PCM and DSD sources up to 96kHz and 128fs, respectively, without skips, though experiencing stuttering in playing 192kHz PCM sources as before.

Regards,
 
Member
Joined 2007
Paid Member
Hi Miero!

I'm using my backup BBB to experiment - no Cronus attached. I tried updating a 'boticized' Debian 8.3, which worked previously in the main system. I assume that now I need to set kernel option snd_soc_botic.ext_masterclk to 0. However, directory /boot/uboot is empty. Any suggestions? TIA!
 
Thanks miero,
The newest version 4.5.0-botic7-rc1 is slightly faster than 4.0.0-botic5 in soxr integer upsampling (which is good achievement):)
For example for upsampling from 16/44,1kHz to 176,4kHz squeezelite takes:

  • 4.0.0-botic5: 44% CPU usage
  • 4.5.0-botic7-rc1: 42%
24/96kHz upsampled to 192kHz:

  • 4.0.0-botic5: 55% CPU usage
  • 4.5.0-botic7-rc1: 53%
 
Last edited:
Member
Joined 2007
Paid Member
With Botic 7 in Jessie 8.3 + new ACDf LADSPA filters in ALSA I see about 10% savings on CPU load (versus identical signal processing using Richard Taylor's LADSPA filters with Botic 5 in Wheezy 7.5). Good stuff! The new ACDf filters permit bandpass attenuation, so I may not have to mess with es9018 OSF FIR programming to prevent DAC clipping. But no critical listening yet - that is obviously the most important comparison. :)
 
Last edited:
Member
Joined 2007
Paid Member
Does anyone know of a simple route to control bbb Botic from within Roon?
I do not. If you control Roon using their iOS or Android remote apps, there is a 'side-by-side' option. The 'NetIO' app would not run "within" Roon's own remote control but 'right next door' on the remote device. I use a separate player app and NetIO to control the BBB and DACs via I2C. With the iPad you can change between the two apps using a 4-finger swipe.

NetIO APP

http://www.diyaudio.com/forums/twisted-pear/281776-control-bbb-based-audio-appliances.html