Minneskretsar (flash)
Re: Minneskretsar (flash)
Det finns en del färdiga SOC (System On Chip), dvs färdigbyggda kort alternativt programmerade uProc med FAT-bibliotek mm att köpa, klara att ansluta till minneskort.
Re: Minneskretsar (flash)
Jag tror att du angriper problemet från fel håll!
De lösningar jag ser är enkel och/eller komplicerat:
* Du vill spela upp vaddetnuär från ett minne.
* Minnet ska vara stort.
* Programmerbart från fabrik.
* Gärna sitta i sockel.
Hela grundproblemet är enkelheten som gör det enkelt att designa men krångligare att underhålla.
En enkel lösning:
Ett kort med kontaktdon på, detta kort har uppspelningsräknaren, oscillator osv, alltså all utom minnet. Minnet är då ett separat kretskort som enkelt kan pluggas i. Kunderna kan köpa nya vågformer via nytt minneskort eller omprogrammering på fabrik.
Enkelt att bygga, bara att expandera jackbart minne.
Den lite mer knepiga:
En mikroprocessor styr uppspelningen, kanske med hjälp av hårdvara. Samtidig kan denna mikroprocessor läsa något minneskort och programmera in de nya kurvor i minnet.
En samlat lösning, rimlig enkel att designa i hårdvaran, mjukvaran blir dock intressant men definitivt inte ett gigantisk problem.
Kurvor kan designas och sparas på t.ex. ett SD-kort som enkelt kan läsas/skrivas och skickas.
Konklusion:
Grejen med att ha kurvformarna på alla möjliga sorters media är ju att de ska laddas in i ett minne och spelas upp så minnesstorleken ska finnas där till att börja med! Visst kan man se till att ladda in en viss mängd o spela upp denna och det ska nog gå att fixa men det blir lite knepigt att utveckla om man inte har koll på programmering på ett rimligt avancerat nivå.
De lösningar jag ser är enkel och/eller komplicerat:
* Du vill spela upp vaddetnuär från ett minne.
* Minnet ska vara stort.
* Programmerbart från fabrik.
* Gärna sitta i sockel.
Hela grundproblemet är enkelheten som gör det enkelt att designa men krångligare att underhålla.
En enkel lösning:
Ett kort med kontaktdon på, detta kort har uppspelningsräknaren, oscillator osv, alltså all utom minnet. Minnet är då ett separat kretskort som enkelt kan pluggas i. Kunderna kan köpa nya vågformer via nytt minneskort eller omprogrammering på fabrik.
Enkelt att bygga, bara att expandera jackbart minne.
Den lite mer knepiga:
En mikroprocessor styr uppspelningen, kanske med hjälp av hårdvara. Samtidig kan denna mikroprocessor läsa något minneskort och programmera in de nya kurvor i minnet.
En samlat lösning, rimlig enkel att designa i hårdvaran, mjukvaran blir dock intressant men definitivt inte ett gigantisk problem.
Kurvor kan designas och sparas på t.ex. ett SD-kort som enkelt kan läsas/skrivas och skickas.
Konklusion:
Grejen med att ha kurvformarna på alla möjliga sorters media är ju att de ska laddas in i ett minne och spelas upp så minnesstorleken ska finnas där till att börja med! Visst kan man se till att ladda in en viss mängd o spela upp denna och det ska nog gå att fixa men det blir lite knepigt att utveckla om man inte har koll på programmering på ett rimligt avancerat nivå.
Re: Minneskretsar (flash)
"En enkel lösning:
Ett kort med kontaktdon på, detta kort har uppspelningsräknaren, oscillator osv, alltså all utom minnet. Minnet är då ett separat kretskort som enkelt kan pluggas i."
Det var ungefär så jag hade tänkt mig det hela, och då med ett (2) CF som ansluts till moderkortet. Tanken var också att kunna använda ganska mycket av den gamla konstruktionen.
Era inputs bekräftar vad jag misstänkte, att det är ganska komplicerat att adressera ett CF-kort och att man knappast kan göra det med en ren hårdvarulösning.
"Kunderna kan köpa nya vågformer via nytt minneskort eller omprogrammering på fabrik."
Behovet av att leverera nya kurvformer får nog anses som mycket litet eftersom vi inte har uppdaterat några kurvformer hittills (på 11 år). Det var mest en feature jag presenterade när jag offererade den ursprungliga lösningen.
Jag har hittat några flashkretsar (på ELFA) som visserligen bara är 8 gånger större än de gamla epromen, men fördelen med dessa är att de har parallelladressering och därmed förefaller fungera ungefär som klassiska eprom. Visserligen är de ytmonterade (TSOP-56), men socklar till dessa är ganska billiga.
Problemet är hur man skall skriva dem? Jag hittar inga programmerare med fler än 48 pinnar....
Ett kort med kontaktdon på, detta kort har uppspelningsräknaren, oscillator osv, alltså all utom minnet. Minnet är då ett separat kretskort som enkelt kan pluggas i."
Det var ungefär så jag hade tänkt mig det hela, och då med ett (2) CF som ansluts till moderkortet. Tanken var också att kunna använda ganska mycket av den gamla konstruktionen.
Era inputs bekräftar vad jag misstänkte, att det är ganska komplicerat att adressera ett CF-kort och att man knappast kan göra det med en ren hårdvarulösning.
"Kunderna kan köpa nya vågformer via nytt minneskort eller omprogrammering på fabrik."
Behovet av att leverera nya kurvformer får nog anses som mycket litet eftersom vi inte har uppdaterat några kurvformer hittills (på 11 år). Det var mest en feature jag presenterade när jag offererade den ursprungliga lösningen.
Jag har hittat några flashkretsar (på ELFA) som visserligen bara är 8 gånger större än de gamla epromen, men fördelen med dessa är att de har parallelladressering och därmed förefaller fungera ungefär som klassiska eprom. Visserligen är de ytmonterade (TSOP-56), men socklar till dessa är ganska billiga.
Problemet är hur man skall skriva dem? Jag hittar inga programmerare med fler än 48 pinnar....
Re: Minneskretsar (flash)
Jaha, och hur kan man använda ett sådant i min applikation?TomasL skrev:Det finns en del färdiga SOC (System On Chip), dvs färdigbyggda kort alternativt programmerade uProc med FAT-bibliotek mm att köpa, klara att ansluta till minneskort.
Re: Minneskretsar (flash)
Du kan inte komma åt data på minneskort utan en processor inblandad.
I det läget är det enbart diskreta parallella minneskretsar som gäller.
I det läget är det enbart diskreta parallella minneskretsar som gäller.
Re: Minneskretsar (flash)
De enda flashminnen jag har erfarenhet av är seriella SPI-minnen.
Det smarta med dessa är att när man väl skickat rätt instruktion till minnet så har det en intern adressräknare som räknar upp adressen, så det är inget du behöver tänka på. Du kör bara på klockan för fullt och ut strömmar data seriellt, byte för byte ...
Ett som jag testat litegrann är Atmel's AT25DF041 (4 Mbit)
Hastigheten är inga problem - vid läsning klarar den minst 50 Mbit/sekund. När man skriver till minnet kan det ta längre tid. Den har SOIC-8 kapsel så rent fysiskt är den smidig.
Det enda du behöver är en processor som kör SPI och skyfflar ut data på lämpligt sätt , exempelvis seriellt till en DAC, då kan du kanske klara dig med en 8-pinnars processor också.
Skriver man koden i assembler bör det gå att få ut data i 250 kbyte/sek.
(vid 8 Mhz klocka har du 32 instruktioner per skickad byte och om du kör 20 KHz (som är Max för de flesta Atmel's 8-bitars AVR) så får du hela 80 instruktioner på dig att läsa ett tecken och sedan skicka det. Enda problemet med den lösningen skulle kunna vara om SPI-interfacet måste byta enhet för varje byte... man skulle behöva två parallella SPI-enheter, eller så skickar du ut data parallellt (ska du ha 8-bitars data?) till en DAC med parallell dataingång.
Förutom Atmel så finns nästan identiska (kompatibla) minnen från bl.a. ST, Microchip med flera.
Dessa heter t.ex. SST25VF040B (Microchip) och M25P40 (ST).. Givetvis finns de i olika storlekar från några hundra kilobyte upp till... tja... minst 8 Mbit i alla fall.
4 Mbit är väl vad du hade i EEPROM innan, och du ville upp i större volym:
Microchip har den här typen av flashminnen upp till 32 Mbit: SST25VF032B-80-4I-S2AF. Då har du 8 ggr din ursprungliga storlek, för endast 17 kr.
Ska du upp i större datamängder (>100 Mbit till Gigabit) blir det andra minnen och andra kapslar, ofta med 48-64 pinnar. De flesta av dessa är BGA, men det finns även en del TSSOP (med lödbara pinnar). Dessa har jag ingen erfarenhet av.
Det smarta med dessa är att när man väl skickat rätt instruktion till minnet så har det en intern adressräknare som räknar upp adressen, så det är inget du behöver tänka på. Du kör bara på klockan för fullt och ut strömmar data seriellt, byte för byte ...
Ett som jag testat litegrann är Atmel's AT25DF041 (4 Mbit)
Hastigheten är inga problem - vid läsning klarar den minst 50 Mbit/sekund. När man skriver till minnet kan det ta längre tid. Den har SOIC-8 kapsel så rent fysiskt är den smidig.
Det enda du behöver är en processor som kör SPI och skyfflar ut data på lämpligt sätt , exempelvis seriellt till en DAC, då kan du kanske klara dig med en 8-pinnars processor också.
Skriver man koden i assembler bör det gå att få ut data i 250 kbyte/sek.
(vid 8 Mhz klocka har du 32 instruktioner per skickad byte och om du kör 20 KHz (som är Max för de flesta Atmel's 8-bitars AVR) så får du hela 80 instruktioner på dig att läsa ett tecken och sedan skicka det. Enda problemet med den lösningen skulle kunna vara om SPI-interfacet måste byta enhet för varje byte... man skulle behöva två parallella SPI-enheter, eller så skickar du ut data parallellt (ska du ha 8-bitars data?) till en DAC med parallell dataingång.
Förutom Atmel så finns nästan identiska (kompatibla) minnen från bl.a. ST, Microchip med flera.
Dessa heter t.ex. SST25VF040B (Microchip) och M25P40 (ST).. Givetvis finns de i olika storlekar från några hundra kilobyte upp till... tja... minst 8 Mbit i alla fall.
4 Mbit är väl vad du hade i EEPROM innan, och du ville upp i större volym:
Microchip har den här typen av flashminnen upp till 32 Mbit: SST25VF032B-80-4I-S2AF. Då har du 8 ggr din ursprungliga storlek, för endast 17 kr.
Ska du upp i större datamängder (>100 Mbit till Gigabit) blir det andra minnen och andra kapslar, ofta med 48-64 pinnar. De flesta av dessa är BGA, men det finns även en del TSSOP (med lödbara pinnar). Dessa har jag ingen erfarenhet av.
Re: Minneskretsar (flash)
Men alltså... 4Mbit = 512kByte med SPI-interface??? När efterfrågades ett interface som gör det krångligare att läsa ut?
73-824-53 är en kapsel med 4M * 16 bit vilket borde räcka en bit på vägen.
Programmeringsenheten är helt enkelt en mikroprocessor som kommunicerar med minnesmodulerna. Att programmera flash-minnen är ganska enkelt egentligen: Man skriver mellan 2 och 5 kommandon till specifika adressor i en viss följd och kretsen raderar sig själva eller skriver in en word (16 bit). När detta kommando och data är skrivna ska man kolla på en specifik adress efter ett visst mönster och när det är på ett visst sätt är det bara att köra nästa steg.
Man kan välja mellan att göra en "primitiv" uppspelningsenhet och sedan ha en programmeringsmojäng på fabriken eller att bygga in det hela i varje enhet.
Programmeringen för att radera en block kan se ut som följer:
Detta fungerar i flashminnet i en Fujitsu-processor, det minne är en kopia av någon annan tillverkares flash och använder därför deras sekvens. Ung. på samma sätt programmeras minnet sedan (lite färre kommandon för skrivning) och det är allt.
73-824-53 är en kapsel med 4M * 16 bit vilket borde räcka en bit på vägen.
Programmeringsenheten är helt enkelt en mikroprocessor som kommunicerar med minnesmodulerna. Att programmera flash-minnen är ganska enkelt egentligen: Man skriver mellan 2 och 5 kommandon till specifika adressor i en viss följd och kretsen raderar sig själva eller skriver in en word (16 bit). När detta kommando och data är skrivna ska man kolla på en specifik adress efter ett visst mönster och när det är på ett visst sätt är det bara att köra nästa steg.
Man kan välja mellan att göra en "primitiv" uppspelningsenhet och sedan ha en programmeringsmojäng på fabriken eller att bygga in det hela i varje enhet.
Programmeringen för att radera en block kan se ut som följer:
Kod: Markera allt
PUSHW (RW0,RW1,RW2,RW3,RW4,RW5,RW6,RW7)
MOVL A,#0x00112233 ; Poke in bank address
AND A,#0xFE ; Must be even address
MOVL RL0,A ; Save target address
MOVL RL1,A ; Store it in RL1
MOVL RL2,A ; And RL2
MOVW A,#0xAAAA ; Address 1 LSW
MOVW RW2,A ; Store it in low RL1
MOVW A,#0x5554 ; Address 2 LSW
MOVW RW4,A ; Store it in low RL2
MOV A,#0xAA ; Sequence step 1
MOVW @RL1,A
MOV A,#0x55 ; Sequence step 2
MOVW @RL2,A
MOV A,#0x80 ; Sequence step 3
MOVW @RL1,A
MOV A,#0xAA ; Sequence step 4
MOVW @RL1,A
MOV A,#0x55 ; Sequence step 5
MOVW @RL2,A
MOV A,#0x30 ; Sequence step 6
MOVW @RL0,A
Loop:
MOVW A,@RL0 ; Read Bank
ANDW A,#0xA0 ; Check that all is OK
BEQ Loop ; Wait for it to erase
MOV A,#0xF0 ; Reset Command
MOVW @RL0,A ; Set FLASH to readmode
POPW (RW0,RW1,RW2,RW3,RW4,RW5,RW6,RW7)
RETP
Re: Minneskretsar (flash)
Det är bara jag som är allergisk mot IC med hemskt många ben.... 
Och så har jag inte så svårt för SPI...

Och så har jag inte så svårt för SPI...
Re: Minneskretsar (flash)
Nej, IC med många ben är jättebra, desto fler ben, desto större kaos 

Re: Minneskretsar (flash)
Vilken känns roligast att löda?
... 
Programmeringen gör du en gång. Sedan är du klar. Lödningen måste du fippla med på varje exemplar... (större kretskort = dyrare osv...)


Programmeringen gör du en gång. Sedan är du klar. Lödningen måste du fippla med på varje exemplar... (större kretskort = dyrare osv...)
Re: Minneskretsar (flash)
Den vänstra, mer spännande, å andra sidan, för mig spelar det ingen roll längre.
Den ena av de högra är lite svår dock
Den ena av de högra är lite svår dock

Re: Minneskretsar (flash)
Jag har lödat sådana upp-och-ner också! (ehh.. ibland caddar man inte som man har tänkt, eller hur var det nu
)Jag lovar att det fortfarande är lättade än den där dj**eln till vänster...

Re: Minneskretsar (flash)
16 bitarjesse skrev:man skulle behöva två parallella SPI-enheter, eller så skickar du ut data parallellt (ska du ha 8-bitars data?) till en DAC med parallell dataingång.
Nja, så helt enkelt verkar det ju inte. För att min uppdragsgivare skall kunna skriva till minnena krävs alltså att vi tar fram en speciell programmeringsutrustning?Icecap skrev:Programmeringsenheten är helt enkelt en mikroprocessor som kommunicerar med minnesmodulerna. Att programmera flash-minnen är ganska enkelt egentligen: Man skriver mellan 2 och 5 kommandon till specifika adressor i en viss följd och kretsen raderar sig själva eller skriver in en word (16 bit).
Lödning har jag jobbat med i 36 år, fast ytmonterat brukar man inte löda med lödkolv i produktion...jesse skrev:Programmeringen gör du en gång. Sedan är du klar. Lödningen måste du fippla med på varje exemplar...
När det gäller programmering har jag gjort några enkla projekt med de allra minsta PIC-kretsarna.
Den har "bara" 48 pinnar och det finns adaptrar till DIL48 . Går det att använda en vanlig programmerare för att skriva till sådana minnen?Icecap skrev:73-824-53 är en kapsel med 4M * 16 bit vilket borde räcka en bit på vägen.
Re: Minneskretsar (flash)
Jo , visst är en 48-pinnars helt OK, jag bara tjafsade lite med TomasL...
Sen hade jag ingen aning om du lödat alls förr eller inte, eller om det handlade om 10 handlödade enhelter eller 10.000 i produktion... Enda orsaken att jag själv presenterade de 8-bitars är att jag själv använt dem. Antagligen är det bästa en med parallella utgångar. 16-bit parallellt ut skulle väl passa dig perfekt. TSOP är ju inga problem, egentligen (fast jag gillar inte 0.50 mm pitch när jag prototypar). Jag har inte läst databladet för den aktuella kretsen, men om den är riktigt bra så kan den kanske vara lika enkel att adressera och läsa data ur som ett eeprom.
(Fast hade det varit jag så hade jag fortfarande kollat om det hade funkat med en 8-pinnars µC + en 8-pinnars FLASH + en 6-8 pinnars DAC som kör seriellt.... mest för storleken på kretskortet)

(Fast hade det varit jag så hade jag fortfarande kollat om det hade funkat med en 8-pinnars µC + en 8-pinnars FLASH + en 6-8 pinnars DAC som kör seriellt.... mest för storleken på kretskortet)
Re: Minneskretsar (flash)
Storleken på kretskortet är (nästan) helt ointressant, lådan vi använder är 260 x 200 invändigt. Det gamla kretskortet (med 4 x 40-pin DIL) är 230 x 100!
Ett helt parallellt flashminne borde kunna fungera som våra gamla eprom, förutom att adressräknaren skall räkna lite längre och att jag måste sänka matningsspänningen till 3V.
Återstår då hur man skall programmera ett sådant minne?
Jag antar att jag får kontakta någon leverantör av programmerare för att få veta om det skulle funka med en TSOP-DIL adapter.
Antalet vet jag inte heller riktigt vad kunden har tänkt sig. Vi har levererat bortåt 150 enheter och jag misstänker att marknaden är tämligen mättad. Man kan nog inte räkna med att sälja lika många av en ny och förbättrad variant. Några tiotal åt gången kanske?

Ett helt parallellt flashminne borde kunna fungera som våra gamla eprom, förutom att adressräknaren skall räkna lite längre och att jag måste sänka matningsspänningen till 3V.
Återstår då hur man skall programmera ett sådant minne?
Jag antar att jag får kontakta någon leverantör av programmerare för att få veta om det skulle funka med en TSOP-DIL adapter.
Antalet vet jag inte heller riktigt vad kunden har tänkt sig. Vi har levererat bortåt 150 enheter och jag misstänker att marknaden är tämligen mättad. Man kan nog inte räkna med att sälja lika många av en ny och förbättrad variant. Några tiotal åt gången kanske?