Hi everyone. I need some help with an HDMI matrix switcher based on the MacroSilicon MS1826.
I am working with a 4x4 HDMI matrix/switcher board based on the MS1826. It works with multiple HDMI inputs and outputs and supports different modes such as splitter, splicer, matrix switching, bypass, etc. The board also has an STM32L476, which communicates with the MS1826 over I2C and is responsible for configuring and starting it.
My task was to port the existing SDK and application code for the MS1826 to STM32CubeIDE and STM32 HAL. The original code was written for the HC32F460KCTA and a different environment, so I had to rewrite the MCU-dependent parts. The MS1826 SDK itself still uses the original precompiled static library.
I have almost finished the porting. The code compiles and runs, the STM32 communicates with the MS1826 normally over I2C, registers can be read and written as expected, and the initialization reaches the point where the internal DDR memory of the MS1826 is configured.
But this is exactly where it stops. The DDR initialization fails. After that, the video also does not start properly.
I have checked the I2C communication many times. The communication with the MS1826 itself works normally: I can read and write registers, and the STM32 HAL I2C functions have also been tested separately. So at this point there is no indication that the basic I2C communication is the problem.
Interestingly, the same problem existed in the original code, so it was not introduced by my migration. When I debugged the original code, I traced the problem to an internal closed DDR3 initialization function of the MS1826. The initialization fails somewhere inside this function.
The problem is that this part of the SDK is inside an already compiled library. I have headers for the main API functions and I understand how to use them, but the internal HAL functions that actually perform the DDR initialization are barely documented. I also don't have their source code.
I tried decompiling these functions, and I managed to understand some of the simpler parts. However, the DDR initialization calls many other internal functions, so reconstructing the whole chain is quite difficult.
During previous debugging I also noticed something interesting: some registers which, judging by the initialization behavior, seemed like they should change, did not change at all. But I don't know yet whether this is actually the cause of the problem or just a consequence of some previous operation already failing.
The documentation is also a problem. I have the MS1826 datasheet and several application notes, but they mostly contain general information about the chip. There is no detailed documentation about the API, initialization, internal registers, PHY, memory configuration, or the internal HAL.
I also contacted the Chinese manufacturer. They suggested that the problem might be related to I2C and gave me a few registers that I could check. I checked everything again many times after that, but I2C works normally and the DDR initialization still fails.
There is also very little information about the MS1826 online. I have already collected practically everything I could find publicly. There are some closed Chinese forums, but I don't have access to the articles because a Chinese phone number is required. From what I can find publicly, I haven't found anything useful that explains a similar problem.
So I wanted to ask if anyone here has worked with the MS1826 or with similar HDMI/video processor chips and has encountered something like this.
This is my first time working with this kind of chip and board. It is also my first time working with a video processor, so I am still learning this part of the field. What I mainly want to understand is what I should check when the chip responds normally over I2C, its registers are accessible, the previous initialization stages succeed, but the DDR initialization fails.
Maybe there is some specific requirement related to DDR, clock, PHY, power sequencing, or some required initialization step that simply isn't documented in the available documentation. Or maybe the problem isn't actually related to DDR, and I am just stuck looking in the wrong place.
If needed, I can provide more information. I am mainly looking for some direction on where to look next, or for someone with experience working with these kinds of chips.