Device for interleaving data blocks for an optical communications system between a satellite and an earth station , said interleaving device being configured to receive as input data frames , each frame comprising a plurality of ordered data blocks , and to provide as output interleaved data blocks , said interleaving device comprising a control module and an external memory intended to store the interleaved blocks , said interleaving device being characterised in that it further includes a cache memory comprising N T buffer areas of the "first in, first out" type, N T being an even integer greater than or equal to four, each buffer area having a size at least equal to the size of a frame , and for indices k, I, m and n initialized to zero the control module is configured to: - for each new frame received: ∘ write the frame in the buffer area of index k, ∘ increment modulo N T the index k by one; - iteratively form groups of blocks to be written in the external memory in the following way: ∘ so long as there are still blocks to be extracted in the buffer area of index I: ▪ extract a block from the buffer area of index I, ▪ add the extracted block to the group of interleaved blocks to be formed, ▪ if the group of blocks comprises N T /2 blocks, write the group of blocks in a sequential area of the external memory , ▪ increment modulo (N T /2 -1) the index m by one, ▪ assign to the index I the value (n x N T /2 + m), ∘ when all of the blocks of the frame stored in the buffer area of index I have been extracted: ▪ increment modulo 2 the index n by one, ▪ assign to the index I the value (n x N T /2), a buffer area being considered as available if and only if it does not contain any block that has not yet been used to form a group of interleaved blocks to be written in the external memory . - for each new frame received: ∘ write the frame in the buffer area of index k, ∘ increment modulo N T the index k by one; ∘ write the frame in the buffer area of index k, ∘ increment modulo N T the index k by one; - iteratively form groups of blocks to be written in the external memory in the following way: ∘ so long as there are still blocks to be extracted in the buffer area of index I: ▪ extract a block from the buffer area of index I, ▪ add the extracted block to the group of interleaved blocks to be formed, ▪ if the group of blocks comprises N T /2 blocks, write the group of blocks in a sequential area of the external memory , ▪ increment modulo (N T /2 -1) the index m by one, ▪ assign to the index I the value (n x N T /2 + m), ∘ when all of the blocks of the frame stored in the buffer area of index I have been extracted: ▪ increment modulo 2 the index n by one, ▪ assign to the index I the value (n x N T /2), ∘ so long as there are still blocks to be extracted in the buffer area of index I: ▪ extract a block from the buffer area of index I, ▪ add the extracted block to the group of interleaved blocks to be formed, ▪ if the group of blocks comprises N T /2 blocks, write the group of blocks in a sequential area of the external memory , ▪ increment modulo (N T /2 -1) the index m by one, ▪ assign to the index I the value (n x N T /2 + m), ▪ extract a block from the buffer area of index I, ▪ add the extracted block to the group of interleaved blocks to be formed, ▪ if the group of blocks comprises N T /2 blocks, write the group of blocks in a sequential area of the external memory , ▪ increment modulo (N T /2 -1) the index m by one, ▪ assign to the index I the value (n x N T /2 + m), ∘ when all of the blocks of the frame stored in the buffer area of index I have been extracted: ▪ increment modulo 2 the index n by one, ▪ assign to the index I the value (n x N T /2), ▪ increment modulo 2 the index n by one, ▪ assign to the index I the value (n x N T /2), <EOS>