Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在NT3H2111 nfc芯片上选择扇区_Java_Android_Nfc - Fatal编程技术网

Java 如何在NT3H2111 nfc芯片上选择扇区

Java 如何在NT3H2111 nfc芯片上选择扇区,java,android,nfc,Java,Android,Nfc,我用安卓手机在NT3H2111 nfc芯片的EEPROM上读写数据 改变扇区的方法似乎是可行的,但从来没有少过,当我试图阅读内容时,扇区没有改变,它仍然在零扇区上 @Override protected void onNewIntent(Intent intent) { try { Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); ntagHandler = new NtagHandler

我用安卓手机在NT3H2111 nfc芯片的EEPROM上读写数据

改变扇区的方法似乎是可行的,但从来没有少过,当我试图阅读内容时,扇区没有改变,它仍然在零扇区上

@Override
protected void onNewIntent(Intent intent) {
    try {
        Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        ntagHandler = new NtagHandler(tag);
        ntagHandler.connect();
        if(mode == AppMode.READ) {
            Ve95_DataModelHandler.readSectionNames(ve95DataModel, ntagHandler);
            populateView();
        } else if(mode == AppMode.WRITE) {
            populateDataModel();
            Ve95_DataModelHandler.writeSectionNames(ve95DataModel, ntagHandler);
        }
        ntagHandler.close();
        ImageView img = findViewById(R.id.imageViewNFCConnect);
        if(img != null) {
            img.setVisibility(View.INVISIBLE);
            mode = AppMode.READ;
        }
    } catch(IOException e) {
        Toast.makeText(this, "Caught exception: " + e.toString(), Toast.LENGTH_LONG).show();
    }
}

我得到了这个结果,但是从数据中我可以看到扇区仍然是零,并且没有被更改为扇区一

D/Ve95_DataModelHandler:读取节名称

D/:sectorSelect捕获异常,但仍然成功

D/Ve95_DataModelHandler:sectorSelect返回true

D/Ve95_数据模型处理程序:04、B2、87、CA、D4、64、80、00、44、00、00、00、00

有人知道如何改变这个行业吗

问候


亨里克自己解决了这个问题。安装了1K芯片,而不是2K芯片。难怪它不起作用:

我自己解决了。安装了1K芯片,而不是2K芯片。难怪它不起作用:

你好!select_扇区的具体功能是什么?我应该在读写操作之前选择_扇区吗?谢谢NT3H2211芯片具有2k内存。从NFC端,该EEPROM存储器以4字节块寻址,这意味着只有1K可寻址。因此,扇区选择用于选择2K内存的上限或下限1K:。请看第16页你好!select_扇区的具体功能是什么?我应该在读写操作之前选择_扇区吗?谢谢NT3H2211芯片具有2k内存。从NFC端,该EEPROM存储器以4字节块寻址,这意味着只有1K可寻址。因此,扇区选择用于选择2K内存的上限或下限1K:。请看第16页
public boolean sectorSelect(int sector) throws IOException {
    byte[] cmd_sel1 = { (byte)0xC2, (byte)0xFF };
    byte[] cmd_sel2 = { (byte)sector, (byte)0x00, (byte)0x00, (byte)0x00 };
    byte[] result1 = nfca.transceive(cmd_sel1);
    if (result1 == null) {
        throw new TagLostException();
    } else if ((result1.length == 1) && ((result1[0] & 0x00A) == 0x000)) {
        return false;
    } else {
        try {
            byte[] result2 = nfca.transceive(cmd_sel2);
            if (result2 == null) {
                throw new TagLostException();
            } else if ((result2.length == 1) && ((result2[0] & 0x00A) == 0x000)) {
                // NACK response according to DigitalProtocol
                return false;
            } else {
                return true;
            }
        } catch (Exception e) {
            // passive ACK
            Log.d(TAG, "sectorSelect caught exception, but succeeded anyway");
            return true;
        }
    }
}
/*
 *  Read section names from EEPROM and put them into the data model
 */
public static boolean readSectionNames(@NonNull Ve95_DataModel ve95DataModel,
                                       @NonNull NtagHandler ntagHandler)
{
    try {
        Log.d(TAG, "Reading section names");
        boolean retVal = ntagHandler.sectorSelect((byte) 1);
        Log.d(TAG, String.format("sectorSelect returned %b", retVal));
        byte[] data = ntagHandler.fastRead((byte) BASE_ADDRESS_SECTION_NAMES, (byte) 0x2C);
        Log.d(TAG, Utils.bytesToHex(data));
        byte[] subArray;
        int size = 16;
        for(int i=0; i < 20; i++) {
            subArray = Arrays.copyOfRange(data, i * size, (i+1) * size);
            String name = new String(subArray, StandardCharsets.UTF_8);
            ve95DataModel.setSectionName(i, name);
            Log.d(TAG, String.format("section %d name %s", i, name));
        }
        return true;
    } catch (IOException e) {
        return false;
    }
}