This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] J722SXH01EVM:OSPI NOR 闪存随机读取故障。

Guru**** 2328790 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1482266/j722sxh01evm-ospi-nor-flash-random-read-failures

器件型号:J722SXH01EVM

工具/软件:

尊敬的团队:


我正在使用预构建的二进制文件处理具有10.00.00.08 SDK 的 J722S 平台、我已经使用 dd 和 flashcp 命令测试了 NOR 闪存。

在此过程中、我观察到 NOR 闪存的后续读取出现了随机读取失败。

下面我附上了使用 dd 命令读取失败的日志。

e2e.ti.com/.../ospi_5F00_nor_5F00_flash_5F00_test_5F00_using_5F00_dd.txt

使用 flashcp 命令时附加了读取故障日志

e2e.ti.com/.../ospi_5F00_nor_5F00_flash_5F00_test_5F00_using_5F00_flashcp.txt

您能帮我解决这个问题吗?

此致、

Vishnupriya J

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    是否使用 EVM 进行这些测试? 还是基于您的定制板?

    如果基于定制板、使用的闪存器件是什么?

    此致、
    Tanmay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Tanmay、

    我使用 EVM 板进行此测试。

    此致、

    Vishnupriya J

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    让我来试一下、然后回复您。

    此致、
    Tanmay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Tanmay、

    感谢您的更新、我们期待您的答复。

    此致、

    Vishnupriya J

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Tanmay、

    是否有任何更新?
    我们正在等待您的回复。

    此致、

    Vishnupriya J

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Tanmay、

    是否有任何进展或更新?!
    请回复我们。

    此致、

    Vishnupriya J

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Vishnupriya、

    对这件事的长时间沉默表示歉意。 10.1 SDK 版本时也会看到这种差异。 您是否试用过10.1 SDK?

    https://www.ti.com/tool/download/PROCESSOR-SDK-LINUX J722S/10.01.00.04

    如果您看到同样的问题、请共享日志。

    感谢您的耐心等待、
    Keerthy

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Keerthy:

    感谢您的答复。 我们将对您进行检查和更新。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Keerthy:

    即使是最新的 J722S 10.01 SDK、我也使用了预编译的二进制文件。

    root@j722s-evm:~# flash_erase /dev/mtd3 0 0 
    Erasing 256 Kibyte @ 0 -- 100 % complete 
    root@j722s-evm:~# dd if=256K_file of=/dev/mtd3 bs=256K count=1
    0+1 records in
    0+1 records out
    131072 bytes (131 kB, 128 KiB) copied, 0.246157 s, 532 kB/s
    root@j722s-evm:~# dd if=/dev/mtd3 of=256K_file_read bs=256K count=1
    1+0 records in
    1+0 records out
    262144 bytes (262 kB, 256 KiB) copied, 0.00419299 s, 62.5 MB/s
    root@j722s-evm:~# diff 256K_file 256K_file_read
    Files 256K_file and 256K_file_read differ
    root@j722s-evm:~# 

    您能帮助我们找出导致此问题的根本原因吗?

    此致、

    Vishnupriya J

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Vishnupriya:

    写入闪存的字节数(131072)和读取的字节数(262144)有所不同。 它们是两倍。 您能检查一下这个吗?

    您是否还尝试过在 u-boot 中从 PHY 写入和回读? 这是否会维护数据完整性?

    此致、
    Tanmay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Vishnupriya:

    此外、在我这边的 EVM 上也看不到这一点 请参阅随附的日志

    root@j722s-evm:~# dd if=/dev/urandom of=text.txt  count=16  bs=16K                                                                                                           
    16+0 records in
    16+0 records out
    262144 bytes (262 kB, 256 KiB) copied, 0.00387583 s, 67.6 MB/s
    root@j722s-evm:~# ls -lh text.txt 
    -rw-r--r-- 1 root root 256K Oct 10 09:42 text.txt
    root@j722s-evm:~# dd if=text.txt of=/dev/mtd3 bs=256K count=1                                                                                                                
    1+0 records in
    1+0 records out
    262144 bytes (262 kB, 256 KiB) copied, 0.612383 s, 428 kB/s
    root@j722s-evm:~# dd if=/dev/mtd3 of=256K_file_read bs=256K count=1
    1+0 records in
    1+0 records out
    262144 bytes (262 kB, 256 KiB) copied, 0.00314416 s, 83.4 MB/s
    root@j722s-evm:~# diff text.txt 256K_file_read 
    root@j722s-evm:~# diff text.txt 256K_file_read 
    root@j722s-evm:~# diff text.txt 256K_file_read 
    root@j722s-evm:~# diff text.txt 256K_file_read 
    root@j722s-evm:~# 
    
    

    您是否可以尝试使用其他硬件?

    此致、
    Tanmay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Tanmay、

    写入闪存(131072)和读取(262144)的字节数有所不同。 它们是两倍。 您能否查看此信息。

    我很抱歉,这是我们一方的错误。 尽管在测试中使用了正确的文件、但我在内核中后续读取和写入时出现了错误。 我已附上日志供您参考。

    e2e.ti.com/.../ospi_5F00_nor_5F00_flash_5F00_test_5F00_in_5F00_kernel_5F00_read_5F00_inconsistency.txt

    您是否还尝试过在 u-boot 中从 PHY 写入和回读? 这是否会保持数据完整性?

    是的、我已尝试从 u-boot 读取和写入、并且 u-boot 上也遇到间歇性故障。

    已在 u-boot 上连接不一致的读取失败、以供您参考。

    e2e.ti.com/.../ospi_5F00_nor_5F00_flash_5F00_test_5F00_in_5F00_uboot_5F00_read_5F00_inconsistency.txt

    此致、

    Vishnupriya J

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Tanmay、

    此外、在我这边的 EVM 上也没有看到这一点 查看附加的日志

    正如我已经提到过的,我在后续读取时会出现间歇性故障,而且我过去用所有分区进行了近10次的测试。 您是否在 OSPI NOR 闪存器件的所有分区中进行了后续读取测试?

    您是否可以尝试使用其他硬件?

    我已经使用其他硬件进行了测试、即使我也遇到了故障。

    此致、

    Vishnupriya J

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Tanmay、

    是否有任何更新?

    请回复我们。

    此致、

    Vishnupriya J

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    您是否在 OSPI NOR 闪存器件的所有分区中使用了后续读取操作进行了测试?

    我已经尝试了所有的分区约400次迭代,没有看到这个问题。 我会在夜间进行测试、然后回来。

    所使用的闪存器件是什么。

    此致、
    Tanmay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Tanmay、

    正在使用的闪存器件是什么。

    在 J722S EVM 板的 OSPI NOR 闪存中测试读取和写入操作时、随机分区上会出现错误。

    您能给我们分享用于测试的文件和命令吗?

    此致、

    Vishnupriya J

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    我使用下面的脚本测试约400次迭代:

    do_test(){
    flash_erase /dev/mtd$1 0 0
    dd if=text.txt of=/dev/mtd$1 bs=256K count=1
    dd if=/dev/mtd$1 of=256K_file_read bs=256K count=1
    }
    
    
    c=0
    i=0
    p=0
    while [ $c -eq 0 ]; do
            do_test $p
            ((p++))
            if [ $p -eq 6 ]; then
                    p=0
            fi
    
            diff -q text.txt 256K_file_read
            c=$(diff -q text.txt 256K_file_read | grep differ | wc -c)
            ((i++))
            echo ""
            echo "Iteration $i partition $p"
            echo ""
            sleep 1
    done

    此致、
    Tanmay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Tanmay、

    我观察到共享脚本在所有分区中使用大小为256KB 的统一文件。 此外、比较后不会删除读回文件。

    为了进行测试、我在脚本中使用了不同的文件大小、从128KB 到每个分区的整个大小不等。 然而,在这样做的时候,我发现了随机分区的后续读取的问题。

    随函附上用于创建文件的命令和用于测试的脚本文件、供您参考。

    DD IF=/dev/urandom、of= BS = count=1

    #!/bin/bash
    
    test_flash() {
        local partition=$1
        local file=$2
        local size=$3
    
        echo ""
        echo "Testing partition $partition with file $file ($size)..."
        echo ""
    
        # Erase the partition
        flash_erase "$partition" 0 0
        if [ $? -ne 0 ]; then
    	echo ""
            echo "Failed to erase $partition"
    	echo ""
            exit 1
        fi
    
        # Write to partition
        dd if="$file" of="$partition" bs="$size" count=1
        if [ $? -ne 0 ]; then
    	echo ""
            echo "Failed to write $file to $partition"
    	echo ""
            exit 1
        fi
    
        # Read from partition
        local read_file="${file}_read"
        dd if="$partition" of="$read_file" bs="$size" count=1
        if [ $? -ne 0 ]; then
    	echo ""
            echo "Failed to read from $partition to $read_file"
    	echo ""
            exit 1
        fi
    
        # Compare
        diff -q $file  $read_file
        if [ $? -ne 0 ]; then
    	echo ""
    	echo "**********************Comparison failed between $file and $read_file**********************"
    	echo ""
    	exit 1
        fi
    
        # Delete the read file
        rm "$read_file"
        echo ""
    
        flash_erase "$partition" 0 0
        if [ $? -ne 0 ]; then       
            echo ""                 
            echo "Failed to erase $partition"
            echo ""                          
            exit 1                           
        fi  
    
    }
    
    declare -a tests=(
        "/dev/mtd0 128K_file 128K"
        "/dev/mtd0 256K_file 256K"
        "/dev/mtd0 512K_file 512K"
        "/dev/mtd1 128K_file 128K"
        "/dev/mtd1 256K_file 256K"
        "/dev/mtd1 512K_file 512K"
        "/dev/mtd1 2M_file 2M"
        "/dev/mtd2 128K_file 128K"
        "/dev/mtd2 256K_file 256K"
        "/dev/mtd2 512K_file 512K"
        "/dev/mtd2 2M_file 2M"
        "/dev/mtd2 4M_file 4M"
        "/dev/mtd3 128K_file 128K"
        "/dev/mtd3 256K_file 256K"
        "/dev/mtd4 128K_file 128K"
        "/dev/mtd4 256K_file 256K"
        "/dev/mtd5 128K_file 128K"
        "/dev/mtd5 256K_file 256K"
        "/dev/mtd5 512K_file 512K"
        "/dev/mtd5 2M_file 2M"
        "/dev/mtd5 4M_file 4M"
        "/dev/mtd5 10M_file 10M"
    )
    
    iterations=100
    
    for ((i=1; i<=iterations; i++)); do
        echo ""
        echo "---------------- Iteration $i ----------------"
        echo ""
    
        for test in "${tests[@]}"; do
            set -- $test
            partition=$1
            file=$2
            size=$3
    
    	flash_erase "$partition" 0 0                  
    	if [ $? -ne 0 ]; then                         
           		 echo ""                                   
            	echo "Failed to erase $partition"
            	echo ""                                                                                          
            	exit 1                                                                                           
       	fi  
    
            test_flash "$partition" "$file" "$size"
            if [ $? -ne 0 ]; then
    		echo ""
    		echo "Test failed on iteration $i for partition $partition with file $file"
    		echo ""
    		exit 1
    	else
    	 	echo ""
    		echo "Test success on iteration $i for partition $partition with file $file"
    		echo ""
    	fi
        done
    	echo ""
    	echo "________________________________________________________________________________________________"
    	echo "" 
    done
    
    echo ""
    echo ""
    echo ""
    echo "*************************************All tests completed successfully*************************************"
    echo ""
    echo ""
    echo ""

    此致、

    Vishnupriya J

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Tanmay、

    对此有任何更新?

    此致、

    Vishnupriya J

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    我使用您的脚本运行测试、但我无法重现错误。 但测试时间有点短(~几小时)。 今天我将重新运行此脚本进行夜间测试。 明天我将作出回应。

    此致、
    Tanmay

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Tanmay、

    感谢您的更新、我们期待您的答复。

    此致、

    Vishnupriya J