• 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.

Introducing the Buffalo III-SE-Pro 9028/9038

The datasheet I've seen says that 128fs mode is PCM only, is that not the case?

PCM normal or OSF bypass mode only, to be more accurate.

But they define this synchronous mode as MCLK=128FSR instead of MCLK=128fs and they appear to define FSR as a function of DPLL number, with another definition for fs. Quite confusing.

Anyway, in case of so called 128fs sync mode, it becomes independent on DPLL (i.e., DPLL=0, known as no bandwidth in SE9018). So the definition of FSR above becomes inapplicable. I think DSD will be still eligible for 128fs truesync setting and empirically it was obvious to find stable DSD512 to become unstable DSD256 in 128fs mode with 45/49 clocks.

Just my humble opinion.
 
-snip-
So i should set 1:1 clock divider on Cronus? What should i write in /boot/uEnv.txt?
Go to http://bbb.ieero.com/ and check the section of External masterclock frequencies.

Examples to modify /boot/uEnv.txt for 22/24; 45/49 and 90/98:

#cmdline=coherent_pool=1M net.ifnames=0 quiet
cmdline=coherent_pool=1M quiet snd_soc_botic.clk_44k1=45158400 snd_soc_botic.clk_48k=49152000
#cmdline=coherent_pool=1M quiet snd_soc_botic.clk_44k1=90316800 snd_soc_botic.clk_48k=98304000
 
Go to http://bbb.ieero.com/ and check the section of External masterclock frequencies.

Examples to modify /boot/uEnv.txt for 22/24; 45/49 and 90/98:

#cmdline=coherent_pool=1M net.ifnames=0 quiet
cmdline=coherent_pool=1M quiet snd_soc_botic.clk_44k1=45158400 snd_soc_botic.clk_48k=49152000
#cmdline=coherent_pool=1M quiet snd_soc_botic.clk_44k1=90316800 snd_soc_botic.clk_48k=98304000


Thanks!
 
I confirm no pop noise when a songs ceases by itself and another song starts. The noise only occurs when i press "stop" or i start another song while one is already playing

The botic system by miero was supposed to provide mute pin on the BBB (http://bbb.ieero.com/) but it was never implemented when I asked him a long time before. So this might be related to the current issue.

If you feel it still annoying, you might change the DD converter from BBB/Hermes/Cronus to another one like the products from DIYINHK, which is pop-free.
 
So, I can only list some possible ideas to solve your problem:
If using 45/49 clocks on the Cronus, setting DSD512 on HQP may avoid pops in truesync mode. If using 22/24 clocks, setting DSD128 may show better resutls.
The second idea is to change the jumper position of the clock divider on the Cronus (ignoring appropriate mathematical ratio) with fixed DSD256 on HQP, because 128fs mode is somehow mysterious :).
The third one is to modify the clock setting in the /boot/uEnv.txt on the BBB (22/24 to 45/49 with the 1:1 jumper ratio on the Cronus, if using 45/49 clocks).


Unfortunately, none of the above ideas does work in my system. Switching to 1:1 divider on Cronus always leads to noisy and accelerated playback, whatever i write in /boot/uEnv.txt...
Lowering hqp buffer size doesn't make any difference, too.
I think i'll have to live with pops,,, :sorry:
 
Unfortunately, none of the above ideas does work in my system. Switching to 1:1 divider on Cronus always leads to noisy and accelerated playback, whatever i write in /boot/uEnv.txt...
Lowering hqp buffer size doesn't make any difference, too.
I think i'll have to live with pops,,, :sorry:
Sorry for the issue persistent. Though not for solution, you might visit here to share the similar problems with others, to find something helpful...
 
One key point that has already been brought up - is that you can't communicate with the DAC at all until it has been properly brought out of reset on power up. I do this with the on-board firmware.

You could likely also just keep reset high all the time- but I have never tried that. It is important never to try to configure the DAC until you are certain it is getting your I2C messages :) That can be accomplished several ways.

Hi Russ,

I have been trying to get my arduino to talk to my IIISE Pro with no success. Just to test, I ran a scanner on the arduino, connect a jumper from the rst pin to vdd, but the arduino still could not find any address. Can you please help? I already have the sketch ready, but it could not go thru the I2C. Besides the two SCL/SDA wires, I also connected a gnd wire from the arduino to the dac. But still no I2C devices found, what am I doing wrong?

Alex
 
Hi Russ,

I have been trying to get my arduino to talk to my IIISE Pro with no success. Just to test, I ran a scanner on the arduino, connect a jumper from the rst pin to vdd, but the arduino still could not find any address. Can you please help? I already have the sketch ready, but it could not go thru the I2C. Besides the two SCL/SDA wires, I also connected a gnd wire from the arduino to the dac. But still no I2C devices found, what am I doing wrong?

Alex
Hi Alex,

Though I don't know the details of your I2C connection between Arduino and B3SEpro, a level shifter (Arduino usually with 5V VDD and B3SEpro with 3.3V VDD) and, if possible, an I2C isolator to eliminate possible noise must be interposed between them. This is a basic connection between the I2C devices of different voltage supply.

BTW, I don't use Arduino for my I2C connection to the B3SEpro. So I can not advice further on this matter.

Regards,
 
Hi Alex,

Though I don't know the details of your I2C connection between Arduino and B3SEpro, a level shifter (Arduino usually with 5V VDD and B3SEpro with 3.3V VDD) and, if possible, an I2C isolator to eliminate possible noise must be interposed between them. This is a basic connection between the I2C devices of different voltage supply.

BTW, I don't use Arduino for my I2C connection to the B3SEpro. So I can not advice further on this matter.

Regards,

Hi,

Thanks for your reply. Yes, I do have at least a level shifter, but as I recall, Russ mentioned that the IIISE pro is 5v tolerant, but anyways, my problem is that my controller, the arduino, can see other device on the I2C bus, namely, the LCD device, but not the Dac? I am not sure what I am doing wrong.

Alex
 
Hi,

Thanks for your reply. Yes, I do have at least a level shifter, but as I recall, Russ mentioned that the IIISE pro is 5v tolerant, but anyways, my problem is that my controller, the arduino, can see other device on the I2C bus, namely, the LCD device, but not the Dac? I am not sure what I am doing wrong.

Alex

LCD of 3.3V or 5V supply? Arduino can see the latter but can not see the former. Anyway, for the setting of reset pin and VDD on B3SEpro, a reset monitor may work. You might check my previous post.

Though I'm using Hermes-BBB for I2C control of the B3SEpro, my setting may be of help for you. Please check my GitHub page.

Regards,
 
LCD of 3.3V or 5V supply? Arduino can see the latter but can not see the former. Anyway, for the setting of reset pin and VDD on B3SEpro, a reset monitor may work. You might check my previous post.

Though I'm using Hermes-BBB for I2C control of the B3SEpro, my setting may be of help for you. Please check my GitHub page.

Regards,

Thanks again. I read your post and the GitHub page. Now correct me if I am wrong, if I understand you correctly. First, I took the onboard controller out, then connect 3 wires from my controller, the arduino, to the dac (please see attached image). Then put a jumper on pin 1 and 2 of the GPIO (RST and DVCC), then turn on the dac. Then after a few seconds, if these procedure is correct then it should respond with address 0x48, right? But it does not.

Another thing that I may have understood is, everybody is saying the Dac's I2C address is 0x48, but according to russ documentation, its suppose to be 0x90 or 0x92 depending if pin 11 of the GPIO is hi or lo??

Kindly comment?
 

Attachments

  • Image.pdf
    258.7 KB · Views: 107
Member
Joined 2007
Paid Member
Thanks again. I read your post and the GitHub page. Now correct me if I am wrong, if I understand you correctly. First, I took the onboard controller out, then connect 3 wires from my controller, the arduino, to the dac (please see attached image). Then put a jumper on pin 1 and 2 of the GPIO (RST and DVCC), then turn on the dac. Then after a few seconds, if these procedure is correct then it should respond with address 0x48, right? But it does not.

Another thing that I may have understood is, everybody is saying the Dac's I2C address is 0x48, but according to russ documentation, its suppose to be 0x90 or 0x92 depending if pin 11 of the GPIO is hi or lo??

Kindly comment?

Please see posts #556-558 and 852 in this thread.

For hardware reset, the B3PRO voltages should be stabilized before pulling GPIO pin 1 low (grounding) and then high (applying continuous 3.3v). Merely binding pins 1 and 2 might not properly initialize the 9028/9038, depending on the particulars of your build.

I find the DAC at 0x48. Not a problem... The data sheet lists 0x90 & 0x92. You can run a scan to see what is on the bus using a command like i2cdetect or i2cdump.

Cheers! :)
 
Last edited:
Thanks again. I read your post and the GitHub page. Now correct me if I am wrong, if I understand you correctly. First, I took the onboard controller out, then connect 3 wires from my controller, the arduino, to the dac (please see attached image). Then put a jumper on pin 1 and 2 of the GPIO (RST and DVCC), then turn on the dac. Then after a few seconds, if these procedure is correct then it should respond with address 0x48, right? But it does not.

Aha! First of all, please forget to use the external IO header. The TPA provides a particular GPIO header for this purpose as shown in their blog. My description is based on using this GPIO header. Also, please set up a level shifter between Arduino and B3SEpro.

Next, the B3SEpro provides an I2C header near SW1 and please use it for I2C connection. Usually a three-line connection (SCL, SDA and GND) will be sufficient but may require additional 3.3V supply to the header pin. Just try which one will work.

Another thing that I may have understood is, everybody is saying the Dac's I2C address is 0x48, but according to russ documentation, its suppose to be 0x90 or 0x92 depending if pin 11 of the GPIO is hi or lo??
Usually DAC address is indicated by 8-bit binary but in case of I2C connection it is shown by 7-bit binary. Both are identical in the real world. The address 0x92 is only used for dual-mono setting. Otherwise you can forget it.

Regards,
 
Last edited:
...everybody is saying the Dac's I2C address is 0x48, but according to russ documentation, its suppose to be 0x90 or 0x92 depending if pin 11 of the GPIO is hi or lo??

You can think of I2C addresses as 7-bit addresses with the LSB of the 8-bit physical address word reserved for use as a read/write control bit, or you can think of the addresses as 8-bit where the write address has an LSB of 0, and the read address has an LSB of 1. In the case of the 7-bit address way of looking at the addressing, there is only one address and it is used for both reading and writing. Thus, all I2C devices will show up as having a 7-bit address and an 8-bit address. Which version you use depends on the the I2C library you choose to use. Some libraries allow the use of either address form.

Regarding I2C bus, it is an open collector bus, so it has to have pullup resistors on it somewhere to work.

Sabre dacs I2C pins are 5v tolerant, but only when the dac is powered up. Therefore, best to connect the I2C pullup resistors to the Sabre power supply. That means if using an Arduino, its I2C pins should be protected from damage from the dac power supply when the Arduino is powered off. To prevent potential problems, I2C isolator chips can be used.
 
Last edited:
Aha! First of all, please forget to use the external IO header. The TPA provides a particular GPIO header for this purpose as shown in their blog. My description is based on using this GPIO header. Also, please set up a level shifter between Arduino and B3SEpro.

Next, the B3SEpro provides an I2C header near SW1 and please use it for I2C connection. Usually a three-line connection (SCL, SDA and GND) will be sufficient but may require additional 3.3V supply to the header pin. Just try which one will work.

Usually DAC address is indicated by 8-bit binary but in case of I2C connection it is shown by 7-bit binary. Both are identical in the real world. The address 0x92 is only used for dual-mono setting. Otherwise you can forget it.

Regards,

Magnificent! I will go ahead and try that...

Thanks you very much...hope it works..

Alex
 
Reset

Recently I applied a reset monitor to make more stable I2C communication with the DAC and found that a TCM809R chip from Microchip worked quite well for this purpose.

Although there has been no problem with powering up the DAC with the DAC_RESET and DVCC GPIO pins shorted, this introduction of reset monitor made me to feel more secured in the I2C communication with the DAC.

Regards,

Hi,

Your method of doing the reset so far is the best I have seen. I looked up the chip, but am not quite sure how to connect it. I could not figure it out from the photo. The TCM809 pins are labeled 1-Gnd, 2-Reset, 3-Vdd, can you show me where those pins should go? I would appreciate it.

BTW, I was able to get my arduino to communicate with my dac, thanks again for your help.

Alex
 
Hi,

Your method of doing the reset so far is the best I have seen. I looked up the chip, but am not quite sure how to connect it. I could not figure it out from the photo. The TCM809 pins are labeled 1-Gnd, 2-Reset, 3-Vdd, can you show me where those pins should go? I would appreciate it.

BTW, I was able to get my arduino to communicate with my dac, thanks again for your help.

Alex
They go to the GPIO pins like below:

1-Gnd to 4-GPIO, 2-Reset to 1-GPIO and 3-Vdd to 2-GPIO

Rgds,