## 4 Calibration of the Read Reference Voltages  
In this section, we discuss a data-driven calibration method to predict the optimal threshold voltage without any previous knowledge of the flash life-cycle state. We exploit the observed number of errors in the codeword for the meta-data. We assume that the error correction for meta-data is stronger than the code used for the user-data. Hence, the voltage range that allows for successful decoding is larger. For the calibration, we determine a voltage \(V_{cal}\) for the first reading over all available life-cycle states. This voltage is obtained by maximizing the mutual information between the number of errors and the optimum threshold voltage over all data sets. Consider Figure 7 for reference \(r_{3}\), the best voltage \(V_{cal}\) is at \(V_{th}=-14\). The analysis of the mutual information has to be done for each reference. Firstly, the meta-data are read at the threshold voltage \(V_{cal}\) for reference \(r_{3}\) and decoded. In the case of successful decoding, the number of errors is known and can be used to adapt the threshold voltage for reading the user-data. This adaptation is done using a simple look-up in a table, which specifies a voltage offset for a given number of observed errors. The calculation for this table is described later on. In the case of a decoding failure, we apply a read-retry mechanism. We adapt the threshold voltage and read the meta-data again. For this second adaptation step, the same analysis of mutual information is performed but using only data sets of the pages, where the meta-data were not correctable at \(V_{cal}\). Again, we choose the threshold voltage which maximizes the mutual information between the number of errors and the optimum threshold voltage. In our measurements, a maximum of two read trials was sufficient for the calibration. In general, the maximum number of read-retries will depend on the error correction capability of the code. The number of errors in the meta-data is used to adapt the threshold voltage, which is then used to read the user-data. To obtain the best threshold voltage given a specific number of errors, we propose a look-up table filled with a data-driven approach. To determine the look-up table for the adaptation, we cluster the data sets of the measurements based on the number of errors in the meta-data when reading at the calibration voltage \(V_{cal}\). The clustering approach is similar to the well-known \(k\)-means clustering [44]. The number of clusters is determined by the error correction capability \(t\) of the code. We have \(t+1\) clusters, one for every possible number of errors. In contrast to \(k\)-means clustering, we require no iterative updates because the partition of the data set is obtained based on the number of errors observed in each page. Similar to \(k\)-means clustering, we determine the representatives (cluster centroid) of the clusters by minimizing the Euclidean distance to all samples in the cluster. Figure 9 shows the clusters for 0, 10, and 21 errors in the meta-data of the MSB page. The MSB page is defined by references \(r_{3}\) and \(r_{7}\). In the figures the optimum threshold voltage for the reference \(r_{7}\) is plotted versus the optimum threshold for reference \(r_{3}\). Each point depicts a possible pair of optimal voltages that was observed for a given number  
of errors in the meta-data. The small crosses in the plots for the three clusters, indicate the representatives of the clusters. As can be seen in Figure 9, the clusters are not well separated. This results from the small number of bits in the meta-data (\(n=504\)), which leads to a high variance in the number of errors. The lower right-hand figure shows the representatives of all clusters obtained by minimizing the Euclidean distance or by minimizing the mean bit error rate (BER) in the cluster, respectively. We observe that both ways to determine the representatives achieve similar results. Since the \(V_{cal}\) is typically lower than the \(V_{opt}\) (cf.