Thread: Reverse Engineering a NAND Flash Device Management Algorithm

  1. #1
    C++ Witch laserlight's Avatar
    Join Date
    Oct 2003
    Location
    Singapore
    Posts
    28,413

    Reverse Engineering a NAND Flash Device Management Algorithm

    I read this write up today and thought some of the people here might find it interesting: Reverse Engineering a NAND Flash Device Management Algorithm.
    Quote Originally Posted by Bjarne Stroustrup (2000-10-14)
    I get maybe two dozen requests for help with some sort of programming or design problem every day. Most have more sense than to send me hundreds of lines of code. If they do, I ask them to find the smallest example that exhibits the problem and send me that. Mostly, they then find the error themselves. "Finding the smallest program that demonstrates the error" is a powerful debugging tool.
    Look up a C++ Reference and learn How To Ask Questions The Smart Way

  2. #2
    and the hat of copycat stevesmithx's Avatar
    Join Date
    Sep 2007
    Posts
    587
    Quote Originally Posted by laserlight View Post
    I read this write up today and thought some of the people here might find it interesting: Reverse Engineering a NAND Flash Device Management Algorithm.
    Uber geek stuff. I can't understand a thing though, but I think I probably can, if I am just able to do this.
    Not everything that can be counted counts, and not everything that counts can be counted
    - Albert Einstein.


    No programming language is perfect. There is not even a single best language; there are only languages well suited or perhaps poorly suited for particular purposes.
    - Herbert Mayer

  3. #3
    C++まいる!Cをこわせ!
    Join Date
    Oct 2007
    Location
    Inside my computer
    Posts
    24,654
    Hehehe, lesson learned maybe? No traveling with SD cards inserted into laptops!
    And ewww to Verilog. VHDL all the way!
    Quote Originally Posted by Adak View Post
    io.h certainly IS included in some modern compilers. It is no longer part of the standard for C, but it is nevertheless, included in the very latest Pelles C versions.
    Quote Originally Posted by Salem View Post
    You mean it's included as a crutch to help ancient programmers limp along without them having to relearn too much.

    Outside of your DOS world, your header file is meaningless.

  4. #4
    Registered User Alpo's Avatar
    Join Date
    Apr 2014
    Posts
    877
    "The problem with this is that the bypassed transistors (that is to say, the ones that we're skipping over – the ones that we're not sensing) are not perfect. Even though they are supposed to conduct when they are being bypassed, if they have been programmed, they might conduct slightly less well."


    Does someone know what the term "programmed" means in this context? Is the author saying transistors that have current flowing?

    Also, thank you LaserLight for posting this .

  5. #5
    (?<!re)tired Mario F.'s Avatar
    Join Date
    May 2006
    Location
    Ireland
    Posts
    8,446
    I believe, he means the transistors have had their stand-off ratio adjusted. This is done by changing the diffusion characteristics of the conductive material.

    EDIT: Unijunction transistor - Wikipedia, the free encyclopedia is an example of a programmable transistor.
    Originally Posted by brewbuck:
    Reimplementing a large system in another language to get a 25% performance boost is nonsense. It would be cheaper to just get a computer which is 25% faster.

  6. #6
    Registered User
    Join Date
    Mar 2011
    Posts
    596
    Quote Originally Posted by Alpo View Post
    "The problem with this is that the bypassed transistors (that is to say, the ones that we're skipping over – the ones that we're not sensing) are not perfect. Even though they are supposed to conduct when they are being bypassed, if they have been programmed, they might conduct slightly less well."


    Does someone know what the term "programmed" means in this context? Is the author saying transistors that have current flowing?

    Also, thank you LaserLight for posting this .
    I believe "programmed" here refers to the process of storing a "one" in the transistor
    by charging the transistor's floating gate. These floating gate transistors form a NAND
    function; they are connected in series, with each transistor storing one bit of information.

    To read a specific bit, all the transistors except the one storing that bit are bypassed,
    and that one transistor in question is applied a gate signal. If it has been programmed
    with a one, it will not turn on. The string consisting of that transistor and the bypassed
    transistors will not conduct. If it has been erased, it will turn on and the series string
    will conduct.

    Bypassing is accomplished by driving the gate harder (or at least differently somehow).
    An erased transistor will turn on (conduct) hard. A programmed transistor may not turn
    on and conduct as well.

    (edited)
    I have "one" and "zero" reversed; looks like charging the gate stores a "zero".

    The term "programming" goes all the way back to some of the first memory devices.
    ROM (masked ROM) had the information placed in the memory cells during manufacture.
    PROM (programmable read only memory) then appeared, which could be programmed
    only once in the field. Then there was EPROM (erasable programmable read only memory).

    Just a guess, but the term might have been used because these devices almost always
    contained program code.

    -
    Last edited by megafiddle; 08-24-2014 at 01:06 PM.

  7. #7
    Registered User Alpo's Avatar
    Join Date
    Apr 2014
    Posts
    877
    Quote Originally Posted by megafiddle View Post

    (edited)
    I have "one" and "zero" reversed; looks like charging the gate stores a "zero".

    The term "programming" goes all the way back to some of the first memory devices.
    ROM (masked ROM) had the information placed in the memory cells during manufacture.
    PROM (programmable read only memory) then appeared, which could be programmed
    only once in the field. Then there was EPROM (erasable programmable read only memory).

    Just a guess, but the term might have been used because these devices almost always
    contained program code.

    -
    Sure enough, you seem to be right on:

    "The presence or the absence of a charge results in a more positive or more negative threshold voltage. In flash memory lingo, programming (putting electrons into the floating gate) means writing a 0, erasing (removing the charge from the floating gate) means resetting the flash memory contents to 1; or in other words: a programmed cell stores a logic 0, an erased (a.k.a. flashed) cell stores a logic 1."

    COEN 180

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Reverse Engineering a C Program
    By Freddie_Fred in forum C Programming
    Replies: 7
    Last Post: 05-02-2012, 08:42 AM
  2. StarUML reverse engineering
    By VirtualAce in forum General Discussions
    Replies: 1
    Last Post: 11-11-2010, 04:44 PM
  3. Reverse Engineering
    By fcommisso in forum C Programming
    Replies: 8
    Last Post: 12-14-2009, 12:58 AM
  4. reverse-engineering...
    By Nutshell in forum A Brief History of Cprogramming.com
    Replies: 13
    Last Post: 02-17-2002, 12:48 AM
  5. Reverse Engineering and Disasembling
    By jinx in forum Windows Programming
    Replies: 0
    Last Post: 12-08-2001, 06:16 PM