So, I'm building my first DIY DAC with TPA parts, and I definitely want to use an external I2C controller, but I'd rather not have to have a separate control line and electronics or relay to control the DAC reset.
I'm wondering if there isn't a software solution to my problem. I haven't seen anyone propose this solution yet, although it's hard to catch up on many years of posts.
What I am planning is to leave the onboard controller in place, but replace the firmware with stripped down code that removes all of the support for being an I2C master on the bus, i.e. it will never talk to the DAC over I2C.
It's whole purpose in life will be to simply do the initial hardware reset sequence via gpio when power is first applied, and do nothing else.
If I decide that there is something else I want the onboard controller to do with the other GPIO's local to the DAC board, I can add code to make the controller an I2C slave, assign it an address that doesn't conflict with the DAC, and then send commands to it.
What I may do at first (during a transition to developing my own external controller code) is replace one of the current gpio switch settings to control whether or not to enable the onboard controller to be a master. That way I can keep the current code with the one difference, i.e. look at the switch at startup and only talk on the I2C bus as a master if the switch is set, otherwise have it be a reset only controller, i.e. I can still use the onboard controller for it's original purpose when I don't have my external controller being an I2C master.
Has anyone already tried this idea? Does anyone see any problems with it? The external controller (assuming it is in the same power domain) would have to wait the requisite reset time before it should attempt to talk to the DAC.
I'm wondering if there isn't a software solution to my problem. I haven't seen anyone propose this solution yet, although it's hard to catch up on many years of posts.
What I am planning is to leave the onboard controller in place, but replace the firmware with stripped down code that removes all of the support for being an I2C master on the bus, i.e. it will never talk to the DAC over I2C.
It's whole purpose in life will be to simply do the initial hardware reset sequence via gpio when power is first applied, and do nothing else.
If I decide that there is something else I want the onboard controller to do with the other GPIO's local to the DAC board, I can add code to make the controller an I2C slave, assign it an address that doesn't conflict with the DAC, and then send commands to it.
What I may do at first (during a transition to developing my own external controller code) is replace one of the current gpio switch settings to control whether or not to enable the onboard controller to be a master. That way I can keep the current code with the one difference, i.e. look at the switch at startup and only talk on the I2C bus as a master if the switch is set, otherwise have it be a reset only controller, i.e. I can still use the onboard controller for it's original purpose when I don't have my external controller being an I2C master.
Has anyone already tried this idea? Does anyone see any problems with it? The external controller (assuming it is in the same power domain) would have to wait the requisite reset time before it should attempt to talk to the DAC.
Brian D. sent me the necessary lines of code a long time ago but I ultimately chose a different solution. Now I can't find that information but its very doable.
At that time I didn't have a chip programmer but I had a spare Arduino so I just programmed that to do only the reset, and I removed the B3 onboard controller.
Next time I take the system apart I will remove the Arduino and install a 'supervisor chip' that runs on clean 3.3v completely isolated to the B3Pro. It will initially reset the DAC via the GPIO area of the B3Pro.
B3Pro GPIO info
Chip Info here
possible adapter for chip
At that time I didn't have a chip programmer but I had a spare Arduino so I just programmed that to do only the reset, and I removed the B3 onboard controller.
Next time I take the system apart I will remove the Arduino and install a 'supervisor chip' that runs on clean 3.3v completely isolated to the B3Pro. It will initially reset the DAC via the GPIO area of the B3Pro.
B3Pro GPIO info
Chip Info here
possible adapter for chip
Apologies, above I listed the wrong version of the 'supervisor chip'. The one above is normally low. We need the opposite, normally high except when the supply voltage is too low.
Here is the *correct* link
Once initialized without the onboard firmware via GPIO, the I2C pins on the Buffalo are active and the registers are easily addressed.
Here is the *correct* link
Once initialized without the onboard firmware via GPIO, the I2C pins on the Buffalo are active and the registers are easily addressed.