The matrix you have is block tridiagonal and block Toeplitz.
I'll give two methods: one that uses nothing but documented functionality, and one that uses undocumented functionality.
First up is an extension of the method I gave in the comments, which hinges on the ability of SparseArray[] + Band[] to handle a list of matrices (of conforming dimensions):
cmat = Array[C, {2, 2}];
dmat = Array[\[FormalCapitalD], {2, 2}];
With[{m = 5, k = Length[cmat]},
bigMat = SparseArray[{Band[{k + 1, 1}] -> ConstantArray[dmat, m - 1],
Band[{1, 1}] -> ConstantArray[cmat, m],
Band[{1, k + 1}] -> ConstantArray[dmat, m - 1]}]];
MatrixForm[bigMat]

The important part here is the specification of Band[] for the off-diagonal blocks, which depends on the sizes of the blocks.
For the method using undocumented functions, here is one that uses SparseArray`SparseBlockMatrix[], which has previously featured in past answers on block matrices (here I use the same definitions as above):
With[{m = 5, k = Length[cmat]},
bigMat = SparseArray`SparseBlockMatrix[
Join[MapIndexed[Join[#2, #2] -> #1 &, ConstantArray[cmat, m]],
MapIndexed[Join[#2, #2 + 1] | Join[#2 + 1, #2] -> #1 &,
ConstantArray[dmat, m - 1]]]]];
which should give the same matrix.
(Perhaps someday, Mathematica will have better handling of block matrices.)
m=SparseArray[{Band[{1, 1}] -> c, Band[{1, 2}] -> d, Band[{2, 1}] -> d}, {5, 5}]; m // MatrixForm– cvgmt Jun 11 '22 at 09:11ToeplitzMatrix– yarchik Jun 11 '22 at 09:12SparseArray[{Band[{4, 1}] -> ConstantArray[HilbertMatrix[3], 4], Band[{1, 1}] -> ConstantArray[ToeplitzMatrix[3], 5], Band[{1, 4}] -> ConstantArray[HilbertMatrix[3], 4]}]. – J. M.'s missing motivation Jun 11 '22 at 09:43ToeplitzMatrix[{c, d, 0, 0, 0}] /. {c -> {{1, 1}, {1, 1}}, d -> {{2, 2}, {2, 2}}} // ArrayFlatten. The key isArrayFlatten. – Ben Izd Jun 11 '22 at 10:27