[![enter image description here][1]][1]

You could probably do this easily with a *Follow Curve* constraint on a bunch of plane objects.

Create a simple square mesh with desired dimensions (example $2$ x $2$)

Create a rectangular Bezier Curve object that has an exact $5$ x $4$ squares in dimensions (for squares of $2$ units you get $10$ x $8$), minus one in each direction so it fits the square by their center points.

[![enter image description here][2]][2]

Under *Object Data* properties Activate *Path Animation* and set it for $18$ frames (its length in number of squares).

Now add a *Follow Curve* constraint to you plane, an pick the previously created curve. 

Duplicate the plane without moving it, then under *Follow Curve* increase the *Offset* value to $1$. Keep making copies of it until you fill the whole curve, progressively increasing the offset value by one unit.

Repeat the same process for a smaller curve inside the outer one, adjusting frame count for its length.

You can then use your planes directly with whatever visuals you like, use dupligroups on said planes, or just model the shape after what you desire for each square directly in the plane mesh.

[![enter image description here][3]][3]


  [1]: https://i.sstatic.net/1kir6.gif
  [2]: https://i.sstatic.net/Wh1ir.png
  [3]: https://i.sstatic.net/HWI5C.gif